以下是在使用MSP430中的一些總結: 1.系統時(shí)鐘問(wèn)題: 系統默認使用DCO,使用外部高速晶振XT2時(shí)必須自己開(kāi)啟XT2,并延時(shí)50us等待XT2起振,然后手工清除IFG1中的OFIFG位 !!!!一定要注意操作順序:打開(kāi)XT2->等待XT2穩定->切換系統時(shí)鐘為XT2 若后面兩步操作反了,在通常情況下不會(huì )出現問(wèn)題,但是在電壓不穩MCU頻繁復位的情況下,非常容易造成MCU死掉,只能掉電后重新上電才能可靠復位。 2.早期版本的IAR開(kāi)發(fā)環(huán)境 必須在Project->Option->C-Spy中選擇對應器件的DDF文件,否則調試時(shí)無(wú)SFR窗口。 3.在寫(xiě)Flash期間,一定要關(guān)閉中斷,此時(shí)CPU無(wú)法執行程序 4.調試的時(shí)候,不要選中"Release JTAG on Go" 5.在調試時(shí),需要關(guān)閉看門(mén)狗,否則在打開(kāi)看門(mén)狗的情況下,每當執行到斷點(diǎn),程序將會(huì )跳轉到入口點(diǎn)從頭執行;蛘,暫停運行或停止到斷點(diǎn)處時(shí),當需要繼續運行時(shí),程序不再執行,而是需要使用“同步JTAG”才能繼續運行(從頭運行?) 6. IAR EWB標識符是區分大小寫(xiě)的 7. 結構變量?jì)炔看嬖趯R要求,通常按照2個(gè)字節的位置對齊,在"C/EC++ Compiler Reference Guide"的P93又如下例子: struct { short s; /* stored in byte 0 and 1 */ char c; /* stored in byte 2 */ long l; /* stored in byte 4, 5, 6, and 7 */ char c2; /* stored in byte 8 */ } s; sizeof(s) 為10,而不是8 可以使用#pragma pack來(lái)改變這種對齊方式,但是會(huì )導致,這個(gè)結構只能按字節方式存取 8. MSP430 IAR C/EC++ Compiler支持兩個(gè)運行庫 (1). IAR CLIB : 主要用于8或16為處理器,不完全兼容ISO/ANSI C,也不完全支持IEEE 754浮點(diǎn)數,不支持Embedded C++. (2). IAR CLIB : 支持ISO/ANSI C和Embedded C++. 9. cstartup的定制 (1). 在__low_level_init()中添加代碼。該函數可以用來(lái)初始化I/O寄存器,并決定數據段是否在cstartup被初始化。文件430\src\lib\lowinit.c給出了框架,copy到項目目錄中使用,文件中有一定的使用說(shuō)明。 (2) 若__low_level_init()中添加代碼不能滿(mǎn)足要求,則把430\src\lib\cstartup.s43拷貝到自己的工作目錄,修改所需代碼;然后在將該文件添加到項目,在項目選型的XLINK的include頁(yè)下選擇Ignore CSTARTUP in library即可。 10. 使用#include "io430x14x.h"和#include "in430.h"來(lái)替代#include 可以使用定義的位變量 可以使用以下方式定義位變量,但是編譯器最終還是轉換為字節操作: struct { unsigned char WDTIE : 1; unsigned char OFIE : 1; unsigned char : 2; unsigned char NMIIE : 1; unsigned char ACCVIE : 1; unsigned char URXIE0 : 1; unsigned char UTXIE0 : 1; } IE1_bit; 不推薦使用bitfields,效率很低 11. 數組的索引值用int型效率最高,char型也好略低 數組類(lèi)型:char型數組效率最高,其他類(lèi)型的數組在索引時(shí),都采用了乘法 |