MSP430的C語(yǔ)言編寫(xiě)注意事項(xiàng)
微處理器一般用于特定環(huán)境和特定用途,出于成本、功耗和體積的考慮,一般都要求盡量節(jié)省使用資源,并且,由于微處理器硬件一般都不支持有符號(hào)數(shù)、浮點(diǎn)數(shù)的運(yùn)算,且運(yùn)算位有限,因此,分配變量時(shí)必須仔細(xì)。另外要說(shuō)明的是,速度和存儲(chǔ)器的消耗經(jīng)常是2個(gè)不可兼顧的目標(biāo),在多數(shù)情況下,編程者必須根據(jù)實(shí)際情況作出權(quán)衡和取舍。
需要注意的事項(xiàng)如下:
1) 通常在滿(mǎn)足運(yùn)算需求的前提下,盡量選擇為變量定義字節(jié)少的數(shù)據(jù)類(lèi)型。比如最常用的 int和 char, int是 16 位的, char 是8位的,如果沒(méi)有必要,不要使用 int,而且使用 char 也最好使用 unsigned char。運(yùn)行時(shí),可以在變量窗口看到,使用類(lèi)型為unsigned char 的變量是 16 進(jìn)制的格式,而使用 int 的是十進(jìn)制格式,如果 char 沒(méi)有定義為 unsigned,會(huì)出現(xiàn)負(fù)號(hào),如果沒(méi)有必要的話(huà),在 430 中是不需要負(fù)數(shù)的。
2) 盡量不用過(guò)長(zhǎng)的數(shù)據(jù)類(lèi)型,如 long、long long和 double
3) MSP430的 C編譯器不支持位尋址,所以運(yùn)算中盡量減少位操作,對(duì)于只有“是”和“否”的變量,如果RAM 容量允許,則可分配為 unsigned char類(lèi)型,可提高運(yùn)算速度。如果分配為某字節(jié)的某個(gè)位,可以減少存儲(chǔ)器的消耗,但是會(huì)降低運(yùn)算速度
4) 避免使用浮點(diǎn)數(shù),盡量使用定點(diǎn)數(shù)進(jìn)行小數(shù)運(yùn)算。如果必須使用浮點(diǎn)數(shù),則盡量用 32 位的 float,而不是 64位的 double
5) 盡量將變量分配為無(wú)符號(hào)數(shù)據(jù)類(lèi)型
6) 對(duì)于指針變量,如果聲明后其值不再改變,則聲明為 const 類(lèi)型,這樣編譯器編
譯時(shí)能更好的優(yōu)化生成的代碼
7) 盡可能的使用局部變量而非全局變量或者靜態(tài)變量(static) 。這樣有利于編譯器編譯時(shí)更好的優(yōu)化生成的代碼
8) 避免對(duì)局部變量使用 &取地址符。因?yàn)檫@樣會(huì)使編譯器無(wú)法把此變量放在 CPU的寄存器中,而是放在RAM中,從而失去了優(yōu)化的機(jī)會(huì)
9) 僅在模塊內(nèi)使用的變量聲明為 static,有利于優(yōu)化代碼
10) 如果堆??臻g有限,盡量減少函數(shù)調(diào)用的層次和遞歸調(diào)用