随笔分类 -  嵌入式C/C++

嵌入式C/C++
摘要:嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(SetTopBox)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。 嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。 一类是学电子工程、通信工程等偏硬件专业出身的人,他.. 阅读全文
posted @ 2013-11-12 19:54 奔流聚海 阅读(632) 评论(0) 推荐(0)
摘要:说明:c语言的很多语法部分都和JAVA,AS等相同 特别是for的用法. c语言中的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句. for(表达式1 ;表达式2 ; 表达式3) 语句 它的执行过程如下: (1)先求表达式1. (2)求表达式2, 若其值为真(值为非0), 则执行for语句中指定的内嵌语句, 然后执行下面第三步做若为假(值为0), 则结束循环, 转到第5步. (3)求解表达式3 (4)转回上面第(2)步骤继续执行; (5)结束循环,执行for语句下面的一个语句; for(循环变. 阅读全文
posted @ 2013-08-10 13:44 奔流聚海 阅读(2097) 评论(0) 推荐(0)
摘要:/*********************************************************************** 名称:main() 功能:主函数,将x9015设置为中间档位(16),则测量出来的值约为实际的电压信号的一半。***********************************************************************/ 1 int main(void) 2 { uint32 data; 3 x9015_Init(); 4 NumbTube_Init(); //数码管初始化 5 ... 阅读全文
posted @ 2013-08-10 13:13 奔流聚海 阅读(668) 评论(0) 推荐(0)
摘要:一,两者的用法 枚举类型定义用关键字enum标识,形式为:enum 标识符{ 枚举数据表};枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。enum status{ copy, delete};枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0、1,代表复制与删除。enum status{ copy=6, delete};则copy的序号为6,delete的序号为7。enum用来定义一系列宏定义常量区别用,相当于一系列的#define xx xx,当然它后面的标识符也可当作一个类型 阅读全文
posted @ 2013-06-28 21:08 奔流聚海 阅读(3096) 评论(0) 推荐(0)
摘要:1.指针函数的定义顾名思义,指针函数即返回指针的函数。其一般定义形式如下:类型名*函数名(函数参数表列);其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。“(函数参数表列)”中的括号为函数调用运算符,在调用语句中,即使函数不带参数,其参数表的一对括号也不能省略。其示例如下:int *pfun(int, int);由于“*”的优先级低于“()”的优先级,因而pfun首先和后面的“()”结合,也就意味着,pfu 阅读全文
posted @ 2013-03-16 11:22 奔流聚海 阅读(437) 评论(0) 推荐(0)
摘要:#define FUNTION_LED 0 宏要大写void RCC_Configuration(void) 函数关键字要大写,驼峰法 阅读全文
posted @ 2012-12-28 23:05 奔流聚海 阅读(330) 评论(0) 推荐(0)
摘要:预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。关于预处理命令中的文件包含(#i nclude),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。以下分3种情况:1:情况1:#ifdef _XXXX...程序段1...#else...程序段2...#endif这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2 阅读全文
posted @ 2012-12-27 10:21 奔流聚海 阅读(1360) 评论(0) 推荐(0)
摘要:A模块函数.h文件中 extern inta;.c文件中 B模块函数,可以定义 int a;直接引用即可。 阅读全文
posted @ 2012-10-29 19:49 奔流聚海 阅读(338) 评论(0) 推荐(0)
摘要:用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用。 举例说明:项目文件夹project下有main.c、common.c和common.h三个文件,其中common.h文件分别#include在main.c和common.c文件中。现在希望声明一个字符型变量key,在main.c和common.c中公用。 有人想,既然是想两个文件都用,那就在common.h中声明一个unsigned char key,然后由于包含关系,在main.c和common.c中都是可见的,所以就能共用了。 想起来... 阅读全文
posted @ 2012-08-06 11:14 奔流聚海 阅读(64331) 评论(4) 推荐(7)
摘要:一. 良好的编程风格 1.排版:a. 代码缩进空格数为4 个。若是可能,尽量用空格来代替Tab键,因为有些编译器不支持Tab键(我自己至今未见过,但确实有这个风险),这给程序的移植带来了问题。 b. 较长的语句要分2行来书写,并用‘\’符号隔开。 c. 函数代码的参数过长,分多行来书写。void UARTSendAndRecv(UINT8 *ucSendBuf, UINT8 ucSendLength, UINT8 *ucRecv... 阅读全文
posted @ 2012-08-05 22:15 奔流聚海 阅读(938) 评论(0) 推荐(1)
摘要:C 语言源文件 *.c 理想的模块化应该可以看成是一个黑盒子。即我们只关心模块提供的功能,而不管模块内部的实现细节。在大规模程序开发中,一个程序由很多个模块组成,这些模块的编写任务被分配到不同的人,编写这个模块的时候很可能就需要利用到别人写好的模块的接口,至于模块内部是如何组织的,外界不需要知道。而追求接口的单一性,把不需要的细节尽可能对外部屏蔽起来,正是我们所需要注意的地方。 C 语言头文件 *.h 模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C 文件,而且每个C 文件的作用不尽相同。在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变. 阅读全文
posted @ 2012-08-05 18:13 奔流聚海 阅读(1480) 评论(0) 推荐(0)
摘要:为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对单片机编程语言和08编译器而言,包括排版、注释、命名、变量使用、代码可测性、程序效率、质量保证等内容。1.基本规则 格式清晰、注释简明扼要、命名规范易懂、函数模块化、程序易读易维护、功能准确实现、代码空间效率和时间效率高、适度的可扩展性、单片机编程规范-标识符命名。2.标识符命名 2.1 命名基本原则 (1)命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写... 阅读全文
posted @ 2012-08-05 16:40 奔流聚海 阅读(3816) 评论(0) 推荐(0)
摘要:switch语句可以产生具有多个分支的控制流程。它的格式是:switch(控制表达式){ case常量表达式:语句列表 case常量表达式:语句列表 ... default:语句列表}例如以下程序根据传入的参数1~7分别打印Monday~Sunday:例4.1.switch语句如果传入的参数是2,则从case 2分支开始执行,先是打印相应的信息,然后遇到break语句,它的作用是跳出整个switch语句块。C语言规定各case分支的常量表达式必须互不相同,如果控制表达式不等于任何一个常量表达式,则从default分支开始执行,通常把default分支写在最后,但不是必须的。使用swit... 阅读全文
posted @ 2012-07-25 10:39 奔流聚海 阅读(433) 评论(0) 推荐(0)
摘要:在C语言中,经常会出现一个项目由多个C文件共同组成,而多个C文件中有时需要引用相同的变量。在嵌入式单片机中,也会出现相同的情况,除了需要条件编译外,还需要全局变量声明:"extern"外部声明。一处进行了定义 unsigned char a ,其他地方再次引用只需要直接声明就好,extern a; 放到c文件中,其他地方调用时extern NvU32 disp_init_flag ;一下还是可以的。放到h文件中不行,每个包含这个h文件的c文件都会赋值,就冲突了. A.带“extern”关键字的语句属于声明(declarations),不是定义(definitions),他不 阅读全文
posted @ 2012-07-19 15:34 奔流聚海 阅读(1462) 评论(0) 推荐(0)
摘要:#ifndef 标示1 //判断"标示1"是否定义,如果被定义则返回假,如果没有被定义则返回真。 /**********************************/ 语句1 #ifndef 标示1 语句2 #define 标示1 语句3 #endif 语句4 …… 语句5 ……该段代码意思是:如果标示1没有被定义,则重定义标示1,即执行语句2、语句3、语句4、……;如果标示1已经被定义,则直接跳过语句2、语句3,直接执行语句4、语句5、……备注:#ifndef 和 #endif 要一起使用,如果丢失#endif,可能会报错。 千万不要忽略了头文件中的#ifndef,这 阅读全文
posted @ 2012-07-17 18:13 奔流聚海 阅读(2448) 评论(0) 推荐(0)
摘要:(1)*:得到对应指针中的存储的“东西”(一维的时候,这个东西是最体的值;二维时,这个东西就是指向一维数组的一个指针,三维时。。。多维时。。。)。(2)&: 得到相应变量的地址。(3)[]:表示相对于当前指针的偏移量。比如: 例1:对int a[5],则a[3]表示相对于a偏移3个位置: 即:a[3] = *(a+3) //******这是理解的关键 例2:对int a[5][4],则a[3][2]表示相对a[3]偏移2个位置,而a[3]表示相对于a偏移3个位置: 即:a[3][2]= *(a[3]+2) = *(*(a+3)+2) 例3:对int a... 阅读全文
posted @ 2012-05-31 15:10 奔流聚海 阅读(408) 评论(0) 推荐(0)