嵌入式软件开发---避免C语言陷阱

(1)“=”和"=="

为了避免“=”和“==”用错,有经验的程序员一般将数值写在符号的左边。例如:if (2 == x){},这样可以让编译器直接产生报错提示。

(2)复合赋值运算符(+=、*=、-=)

避免符号放置位置出错。

(3)指针加减运算

指针变量+1,加1后的结果比原结果多了指针变量所指向数据类型的长度值。例如:int *p = (int *)0x00001000,p = p + 1后,p = 0x00001004。

对连续RAM初始化零操作:unsigned int * pRAMaddr ; for(pRAMaddr = Startaddr; pRAMaddr = Endaddr; pRAMaddr += 4){pRAMaddr = 0x00000000;},pRAMaddr += 4的操作实际上使pRAMaddr增加了4 * sizeof(int) = 16字节的RAM空间,每一次for循环只会将4个字节初始化为零,其余12个字节为随机数。

(4)数组名和指针

只有数组名被作为函数形参的时候,数组名才可以被认为是指针。此时,不要针对指针应用sizeof操作符,否则容易有风险。例如:

void ClearRAM(char array[ ]){ }

(5)各种进制(十进制、八进制、十六进制)

各种进制简单理解是数值的不同表示形式,嵌入式软件开发过程中,下位机用什么进制,与之通信的上位机就用什么进制接收,char类型的数据表示一个字节,计算机处理数据的最小单位是字节,串口通信时可以将数据定义成char类型,即一个字节。-基于Mbed库开发。

(6)取十六进制数的高八位、低八位

例:0xABCD,取低八位:0xABCD & 0xFF,取高八位:(0xABCD >> 8) & 0xFF;0xABCD:16位数据,二进制转换成十六进制时,用二进制的4位表示十六进制的1位。

(未完待续。。。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容