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