嵌入式c语言编程小知识总结.docx

上传人:aa****6 文档编号:51227088 上传时间:2018-08-13 格式:DOCX 页数:7 大小:18.14KB
返回 下载 相关 举报
嵌入式c语言编程小知识总结.docx_第1页
第1页 / 共7页
嵌入式c语言编程小知识总结.docx_第2页
第2页 / 共7页
嵌入式c语言编程小知识总结.docx_第3页
第3页 / 共7页
嵌入式c语言编程小知识总结.docx_第4页
第4页 / 共7页
嵌入式c语言编程小知识总结.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《嵌入式c语言编程小知识总结.docx》由会员分享,可在线阅读,更多相关《嵌入式c语言编程小知识总结.docx(7页珍藏版)》请在金锄头文库上搜索。

1、嵌入式嵌入式 C C 语言编程小知识总结语言编程小知识总结流水线被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅指单周期指令)。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。下面是小编为大家带来的嵌入式 C 语言编程小知识总结,欢迎阅读。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。可以通过过下面的程序延迟 10 毫秒:for(i=0;i for

2、(j=0;j /IP 数据报总长度高字节IpHeadUint8=(_/IP 数据报总长度低字节IpHeadUint8=_eg;inta=1,2,3,4,5;但如果当输出第 a 以上的元素时,系统回输出随机数值,所以使用此方法时,不能使用超过初始值元素以上的元素。eg: PINSEL0 |= 0x00000005; /设置串口引脚使第 0 位和第二位置一,其他位不变。1 C 语言中函数名直接对应于函数生成的指令代码在内存中的地址,因此函数名可以直接赋给指向函数的指针2 调用函数实际上等同于“调用指令+参数传递处理+回归位置入栈” ,本质上最核心的操作是将函数生成的目标代码的首地址赋给 CPU 的

3、 PC 寄存器。3 因为函数调用的本质是跳转到某一个地址单元的code 去执行,所以可以“调用一个根本就不存在在函数实体4 int (*p)();定义 p 是一个指向函数的指针变量,次函数返回带回整型的返回值。*P 两侧的括号不能省略,表示 p 先于*结合,是指针变量,然后再与后面的()结合,表示此指针指向函数。区别:int *p()表示这个函数的返回值是指向整型变量的指针。说明:(1) 指向函数的指针变量的一般定义形式为:数据类型 (*指针变量名)();1 此处的“数据类型”是指函数返回值的类型(2) 返回指针值的函数:类型名 *函数名(参数表)eg: int * func(int x,in

4、t y)func 是函数名,调用它以后能返回一个指向整型数据的指针。x,y 是 func 的形参。区别方法:a.从右往左找第一个括号,括号里面的是函数的形参。b.括号外面的第一个标识符是函数的名字,函数前面的表示函数的返回数值。1int (*p)表示*p 有 4 个元素,每个元素为整型。也就是 p 所指的对象有 4 个整型元素的数组,既 P 是行指针。2 指针数组一个数组,其元素均为指针类型数据,称为指针数组;即指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为:类型名 *数组名eg:int *p:作用:它用于指向若干个字符串,使字符串处理更加方便灵活。适用于一个二维字符串数

5、组,其中每一行的字符数组的长度各不相同eg:char * name=“Follow me”,”BASIC”,”GreatWall”;1 可以用结构体变量做实参。但是用结构体变量作实参时,采取的是“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序递给形参。形参也必须是同类型的结构体变量。eg:pint(su);/注在此处 su 为结构体注:这种传递方式在空间和时间上开销较大,如果结构体的规模较大时,开销是很可观的。2 用直向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参eg:print(/注在此处 su 为结构体1 共用体把几种不同数据类型的变量存放在同一块内存里

6、。公用体中的变量共享同一块内存。2 定义公用体类型变量的一般形式为:union 共用体名成员列表;变量列表;3在共用体中同一块内存可以用来存放几种不同类型的数据,但在某一时刻只能在其中存放一个成员变量。共用体变量中起作用的成员是最后一次存入的数据。eg: union dataint i;char c;double d;union data a;共用体变量 a 中的成员 i,c,d 三个变量在内存中从同一个地址开始存储。如进行如下赋值:= 100;= A;那么此时共用体变量 a 中的成员 i 已经没有值了,因为存储该值的内存现在已经被用来存储成员 c 的值了。3 共用体变量的长度取决于其成员的最

7、大长度:说明:结构体变量所占内存的长度是各个成员的总和,每个成员分别占有自己的存储空间。共用体变量所占内存的长度是其最长成员的长度。当然,编译器出于提高访问效率的目的,在编译分配存储空间时往往要进行对齐操作。对齐操作以最大基本类型为准。即以最大基本类型为基本单元。若按实际算下的长度不是基本单元的整数倍,则其实际长度应该是基本单元的整数倍。(在 TurboC 中不进行对齐,在 Linux 中进行对齐)例如:使用共用体来解决这一冲突:union send_tempuint16 words;uint8 bytes;send_buff;eg:send_=a;/此处 a 是 8 位send_=b;/此处

8、 b 是 8 位;此时就将 8 位字拼成了 16 位字存储了。发送时 send(send_)就可以每次发送一个 16 位的数据了。1复合赋值运算符号:a+=3*5;等价于 a=a+(3*5);printf(“something or other”);fflush(stdout);volatile 变量可能用于如下几种情况:1设备的硬件寄存器(如:状态寄存器)2一个中断服务子程序中会访问到的全局变量3多线程应用中被几个任务共享的变量。当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C 语言提供了一种变量,即寄存器变量。这种变量存放在 CPU 的寄存器中,使用时,不需要访

9、问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是 register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。(1) 只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部 static 变量;(2) register 是一个“建议“型关键字,意指程序建议该变量放在寄存器中,但最终该变量可能因为条件不满足并未成为寄存器变量,而是被放在了存储器中,但编译器中并不报错(在 C+语言中有另一个“建议“型关键字:inline)。CPU 对各种存储器的访问速度,基本上是:CPU 内部 RAM 外部同步 RAM 外部异步 RAM FLASH/ROM在 C 语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。1宏定义“像”函数;2宏定义不是函数,因而需要括上所有“参数”;3宏定义可能产生副作用。因而不要给宏定义传入有副作用的“参数“。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号