嵌入式軟件開發(fā)---避免C語(yǔ)言陷阱

(1)“=”和"=="

為了避免“=”和“==”用錯(cuò),有經(jīng)驗(yàn)的程序員一般將數(shù)值寫在符號(hào)的左邊。例如:if (2 == x){},這樣可以讓編譯器直接產(chǎn)生報(bào)錯(cuò)提示。

(2)復(fù)合賦值運(yùn)算符(+=、*=、-=)

避免符號(hào)放置位置出錯(cuò)。

(3)指針加減運(yùn)算

指針變量+1,加1后的結(jié)果比原結(jié)果多了指針變量所指向數(shù)據(jù)類型的長(zhǎng)度值。例如:int *p = (int *)0x00001000,p = p + 1后,p = 0x00001004。

對(duì)連續(xù)RAM初始化零操作:unsigned int * pRAMaddr ; for(pRAMaddr = Startaddr; pRAMaddr = Endaddr; pRAMaddr += 4){pRAMaddr = 0x00000000;},pRAMaddr += 4的操作實(shí)際上使pRAMaddr增加了4 * sizeof(int) = 16字節(jié)的RAM空間,每一次for循環(huán)只會(huì)將4個(gè)字節(jié)初始化為零,其余12個(gè)字節(jié)為隨機(jī)數(shù)。

(4)數(shù)組名和指針

只有數(shù)組名被作為函數(shù)形參的時(shí)候,數(shù)組名才可以被認(rèn)為是指針。此時(shí),不要針對(duì)指針應(yīng)用sizeof操作符,否則容易有風(fēng)險(xiǎn)。例如:

void ClearRAM(char array[ ]){ }

(5)各種進(jìn)制(十進(jìn)制、八進(jìn)制、十六進(jìn)制)

各種進(jìn)制簡(jiǎn)單理解是數(shù)值的不同表示形式,嵌入式軟件開發(fā)過(guò)程中,下位機(jī)用什么進(jìn)制,與之通信的上位機(jī)就用什么進(jìn)制接收,char類型的數(shù)據(jù)表示一個(gè)字節(jié),計(jì)算機(jī)處理數(shù)據(jù)的最小單位是字節(jié),串口通信時(shí)可以將數(shù)據(jù)定義成char類型,即一個(gè)字節(jié)。-基于Mbed庫(kù)開發(fā)。

(6)取十六進(jìn)制數(shù)的高八位、低八位

例:0xABCD,取低八位:0xABCD & 0xFF,取高八位:(0xABCD >> 8) & 0xFF;0xABCD:16位數(shù)據(jù),二進(jìn)制轉(zhuǎn)換成十六進(jìn)制時(shí),用二進(jìn)制的4位表示十六進(jìn)制的1位。

(未完待續(xù)。。。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容