- 博客(79)
- 收藏
- 关注
转载 C++用 _findfirst 和 _findnext 查找文件
转自博客园 河沟大河沟一、这两个函数均在io.h里面。 二、首先了解一下一个文件结构体:struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_write; _fsize_t size; ...
2018-07-12 16:18:23 4758
转载 常见内存错误
转载时请注明出处:http://blog.csdn.net/absurd随着诸如代码重构和单元测试等方法引入实践,调试技能渐渐弱化了,甚至有人主张废除调试器。这是有道理的,原因在于调试的代价往往太大了,特别是调试系统集成之后的BUG,一个BUG花了几天甚至数周时间并非罕见。而这些难以定位的BUG基本上可以归为两类:内存错误和并发问题。而又以内存错误最为普遍,即使是久经沙场的老手,也
2017-08-05 10:21:32 415
转载 为何printf()经常有重入和性能上的问题
转载:这个概念在嵌入式操作系统中比较重要,由于存在任务的调度,它实时系统,可剥夺型内核中是危险的,如同一个安静的水雷。可能会被触发,也可能安然无恙。由于它运行结果的不可预期性,会使系统带来隐患。printf()经常有重入解释不可重入函数不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。因为中断可能在任何时候发生,例如在printf执行过程中,
2017-08-01 10:23:22 1770
转载 对称加密与非对称加密
(一)对称加密(Symmetric Cryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大
2017-08-01 10:21:50 328
原创 建立ubuntu到开发板(2451)的磁盘映射
为方便驱动开发在建立ubuntu到windows的磁盘映射后,建立ubuntu到开发板的映射。优点:方便编译。 第一步,进入虚拟机,打开编辑----虚拟网络编辑器然后点击添加网络点击确定,然后选择桥接模式选择如图,表示有线网。 点击确定,应用 第二步,点击虚拟机的设置,点击添加。 如图选择网络适配器,点击下一步,选择自定义(桥接模式)
2017-08-01 10:13:42 649
原创 学习驱动:移植u-boot
u-boot的移植: (版本 2010 目标:生成s3c2451下的u-boot)根据相似的开发板来配置新的开发板的u-boot移植目的:reuse实现代码复用移植原因:存在差异移植方法:架构 arm版本片内外设 即SOC(system on chip)板级支持产品支持Mini2451与smdk2410类似,下面是具体操作
2017-07-25 18:10:31 346
原创 windows到ubuntu的共享环境搭建
实现windows和ubuntu间的共享1,关闭防护墙等杀毒工具,打开虚拟机的虚拟网卡2,打开虚拟机,点击编辑------虚拟网络编辑器,如图查看仅主机模式下的子网地址,如图子网地址为 192.168.163.0,虚拟网卡是VMnet03,打开ubuntu,使用命令 vi /etc/network/interfaces看自己是哪一个网卡,然后修改如下。
2017-07-25 18:04:36 385
原创 学习ADC
S3C2451内部ADC结构图我们从上面的结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器0中(ADCDAT
2017-07-22 23:00:39 1236
原创 学习LCD
S3C2451 中的 LCD 控制器由从位于系统存储器的视频缓冲区到外部 LCD 驱动器的转移 LCD 图像数据逻辑组成。LCD 控制器支持单色 LCD 的单色、2 位每像素(4 阶灰度)或 4 位每像素(16 阶灰度)模式,通过使用基于时间的抖动算法和帧频控制(FRC)方法,其可以连接到 8 位每像素(256 色)的彩色 LCD 面板和连接到 12 位每像素(4096 色)的 STN LCD。
2017-07-22 22:59:17 1276
原创 学习定时器
S3C2451有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。定时器 0 和 1 共用一个 8 位预分频器,定时器 2、3 和 4 共用另外的 8 位预分频器。每个定时器都有一个可以生成 5 种不同分频信号(1/2,1/4,1/8,1/16 和 TCLK)的时钟分频器
2017-07-15 22:39:00 1102
转载 详解C中volatile关键字
详解C中volatile关键字 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出
2017-07-15 00:00:56 193
转载 UART寄存器详解
1.UART行控制寄存器ULCONn(ULCON0, R/W, Address = 0xEC00_0000)ULCONn的含义如表8-2所示。表8-2 ULCONn的含义ULCONn位描述初始状态Reserved[7] 0Infra-Red Mode[6]是否使
2017-07-12 21:52:59 16621
转载 C语言:递归的简单介绍
一、基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己。 要点: 1、C语言函数可以递归调用。 2、可以通过直接或间接两种方式调用。目前只讨论直接递归调用。二、递归条件 采用递归方法来解决问题,必须符合以下三个条件: 1、可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍
2017-07-12 21:45:04 962
转载 SQL中Group By的使用
SQL中Group By的使用1、概述2、原始表3、简单Group By4、Group By 和 Order By5、Group By中Select指定的字段限制6、Group By All7、Group By与聚合函数8、Having与Where的区别9、Compute 和 Compute By1、概述“Gr
2017-07-12 21:40:58 409
转载 C/C++时间函数使用方法
转载自博客园C++对时间的操作也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作、获取和显示等等的问题。下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法. 通过学习许多C/C++库,你可以有很多操作、使用时间的方法。但在这之前你需要了解一些“时间”和“日期”的概念,主要有以下几个:
2017-05-20 15:56:58 1433
原创 C++:模板,string类,异常
函数模板在C++中,数据的类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当发生函数调用时,编译器可以根据传入的实参自动推断数据类型。这就是类型的参数化。值(Value)和类型(Type)是数据的两个主要特征,它们在C++中都可以被参数化。所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定
2017-05-20 15:42:16 1749
原创 C++:运算符重载
所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。实际上,我们已经在不知不觉中使用了运算符重载。例如,+号可以对不同类型(int、float 等)的数据进行加法操作;v
2017-05-13 21:45:50 449
转载 C++:多态性(虚函数)
我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例12.1(具体代码请查看:C++多态性的一个典型例子)程序中,在Circle类中定义了 area函数,在Circle类的派生类Cylinder中也定义了一个area函数。这两个函数不仅名字
2017-05-06 22:32:58 271
原创 C++:向上转型
类其实也是一种数据类型,也可以发生数据类型转换,不过这种转换只有在基类和派生类之间才有意义,并且只能将派生类赋值给基类,包括将派生类对象赋值给基类对象、将派生类指针赋值给基类指针、将派生类引用赋值给基类引用,这在 C++ 中称为向上转型(Upcasting)。相应地,将基类赋值给派生类称为向下转型(Downcasting)。向上转型非常安全,可以由编译器自动完成;向下转型有风险,需要程序员
2017-05-06 22:11:51 5063 4
转载 C++:虚基类详解
今天学习多继承时,遇到二义性的问题,然后找到了回答很详细的博客,下面是转载内容C++虚基类详解1、虚基类的作用从上面的介绍可知:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员,如
2017-05-06 21:39:09 914
转载 预处理:条件编译
假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出不同的平台。Windows 有专有的宏_WIN32,Linux 有专有的宏__linux__,以现有的知识,我们很容易就想到了 if else,请看下面的代码:#inclu
2017-05-04 00:49:59 523
转载 C++新特性:函数模板
函数模板是通用的函数描述,也就是说,它们使用泛型定义函数,其中的泛型可用具体的类型(例如int或double)代替。函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计。它的最大特点是把函数使用的数据类型作为参数。函数模板的声明形式为:template(参数表){ 函数体}其中,templa
2017-05-04 00:48:21 324
原创 C++:继承与派生
设计新类时可继承已有的类,这个已有的类被称为基类或父类• 基类是为解决以前的老问题而设计的,在面对新问题时其功能可能会显得不够完善。程序员需要在继承的基础上对基类进行派生,例如添加新功能,或者对从基类继承来的功能进行某些修改。派生的目的是为了解决新问题• 通过继承与派生所得到的新类被称为派生类或子类• 继承与派生的编程原理是:程序员在定义新类的时候,首先继承基类的数据成
2017-04-29 12:03:43 306
原创 C++:组合类
关于代码重用:结构化程序设计中重用的代码是算法即函数代码,没有重用数据代码在面向对象的程序设计中重用的是类的代码1,用类定义对象2,通过组合定义新的类(组合类)3,通过继承定义新的类(派生类)组合的编程原理是:程序员在定义新类的时候,使用已有的类来定义数据成员。这些数据成员是类类型的对象,被称为类的对象成员。C++语言将数据成员中包含对象成员的类称为组合
2017-04-29 12:02:21 2060
原创 C++:友元
class A{public: int x; // 公有成员xprotected: int y; // 保护成员yprivate: int z; // 私有成员zA(int p1=0, int p2=0, int p3=0) { x = p1; y = p2; z = p3; } // 构造函数} ;void fun1( ){A obj1( 2, 4,
2017-04-29 09:46:12 183
转载 C++:拷贝构造函数
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100; int b = a; int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace s
2017-04-26 09:59:32 193
原创 C++:new和delete的用法
对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。 new和delete运算符是用于动态分配和撤销内存的运算符。 一、new用法 1.开辟单变量地址空间 使用new运算符时必须已知数据类型,new
2017-04-18 21:13:35 560
原创 C++:引用作为返回值
例如,下面的程序是有关引用返回的4种形式: //********************* //** ch9_6.cpp ** //********************* #include float temp; float fn1(float r) { temp = r*r*3.14;
2017-04-16 22:05:30 19538 7
原创 C++:关于引用
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。 一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明:
2017-04-16 21:47:08 388
原创 C++:this指针
this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。this 虽然用在类的内部,但是只有在对象被创建以后才会给 this 赋值,并且这个赋值的过程是编译器自动完成的,不需要用户干预,用户也不能显式地给 this 赋值this 是 const 指针,它的值是不能被修改的,一切企图修改该指针的操作,如赋值、递增、递减等都是
2017-04-15 22:17:40 306
原创 C++:构造函数和析构函数
在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。构造函数必须是 public 属性的,否则创建对象时无法调用。当然,设置为 private、protected 属性也不会报错,但是没有意义。构造函数没有返回值,因为没有变量来接收返回值,即使有也
2017-04-15 22:13:12 1211
原创 C++:类和对象
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。与结构体一样,类只是一种复杂数据类型的声明,不占用内存空间。而对象是类这种数据类型的一个变量,或者说是通过类这种数据类型创建出来的一份实实在在的数据,所以占用内存空间。有些教程将类的成员变量称为类的属性(Pro
2017-04-15 22:01:06 454
转载 redhat最小化窗口消失问题解决
今天写程序不知做了什么改变,最小化终端后竟然不见了,下面是我百度到的答案,很有用我在Linux系统下最小化窗口时就消失了,在任务栏上也无法找到,你知道怎么让它在任务栏上显示吗?”——到目前为止,已经有不下于五个朋友问过我这个问题。尽管这是一个Linux系统X Window中入门级的操作,但我很惊讶居然让这么多人感到迷惑。更有趣的是,有个家伙发现这种情况下可以用Alt+Tab切换
2017-04-08 23:31:36 7631
转载 解决curses中文乱码问题
问题的解决方案也是我自己百度的,我把方法和觉得应该注意的地方写一下1、引入本地头文件 在main函数文件中添加#include 头文件 (用make的话放在myhead.h就可以)2、改变引入的curses头文件 将#include 或#include 改为#include 这时如果编译出错,显示没有ncursesw.h文件 ,则继续使用#include
2017-03-31 20:53:11 2240
转载 TCP/IP四层模型和OSI七层模型的概念
TCP/IP四层模型TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP位于协议簇的第二层(对应OSI的第三层),TCP位于协议簇的第三层(对应OSI的第四层)。 TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮
2017-03-25 23:52:22 264
转载 学习Linux的几点忠告
转载地址:http://wiki.ubuntu.org.cn/index.php?title=%E5%AD%A6%E4%B9%A0linux%E5%87%A0%E7%82%B9%E5%BF%A0%E5%91%8A&variant=zh-cn作者:王垠目录[隐藏]1 不要当“传教士”2 不要强迫自
2017-03-25 23:50:07 274
原创 条件变量经典实例
/*这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,所有生产者和消费者都是异步方式运行的,但它们必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经装满产品且尚未
2017-03-25 23:32:08 1263 1
原创 解决线程间对共享资源的竞争
进行多线程编程,因为无法知道哪个线程会在哪个时候对共享资源进行操作,因此让如何保护共享资源变得复杂,通过下面这些技术的使用,可以解决 线程之间对资源的竞争: 1 互斥量Mutex 2 信号灯Semaphore(不做介绍) 3 条件变量Conditio
2017-03-25 22:36:36 2444
转载 linux常用的时间函数
一、linux时间函数总结 写停车场系统时需要用到时间函数,就百度了下,下面是转载某位博主的内容,看不懂得程序,自己敲一下也就懂了: asctime, ctime, gmtime,localtime, gettimeofday, mktime, asctime_r, ctime_r, gmtime_r,localtime_r二、常用
2017-03-20 23:40:26 309
原创 多线程编程实例
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:A:1 2 3 4 1 2....B:2 3 4 1 2 3....C:3 4 1 2 3 4....D:4 1 2 3 4 1....程序:#inclu
2017-03-20 00:26:59 271
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人