以下是在使用msp430中的一些總結:
1.系統時鐘問題:
系統預設使用dco,使用外部高速晶振xt2時必須自己開啟xt2,並延時50us等待xt2起振,然後手工清除ifg1中的ofifg位
!!!!一定要注意操作順序:開啟xt2->等待xt2穩定->切換系統時鐘為xt2
若後面兩步操作反了,在通常情況下不會出現問題,但是在電壓不穩mcu頻繁復位的情況下,非常容易造成mcu死掉,只能掉電後重新上電才能可靠復位。
2.早期版本的iar開發環境
必須在project->option->c-spy中選擇對應器件的ddf檔案,否則除錯時無sfr視窗。
3.在寫flash期間,一定要關閉中斷,此時cpu無法執行程式
4.除錯的時候,不要選中"release jtag on go"
5.在除錯時,需要關閉看門狗,否則在開啟看門狗的情況下,每當執行到斷點,程式將會跳轉到入口點從頭執行。或者,暫停執行或停止到斷點處時,當需要繼續執行時,程式不再執行,而是需要使用「同步jtag」才能繼續執行(從頭執行?)
6. iar ewb識別符號是區分大小寫的
7. 結構變數內部存在對齊要求,通常按照2個位元組的位置對齊,在"c/ec++ compiler reference guide"的p93又如下例子:
struct s;
sizeof(s) 為10,而不是8
可以使用#pragma pack來改變這種對齊方式,但是會導致,這個結構只能按位元組方式訪問
8. msp430 iar c/ec++ compiler支援兩個執行庫
1. iar clib : 主要用於8或16為處理器,不完全相容iso/ansi c,也不完全支援ieee 754浮點數,不支援embedded c++.
2. iar clib : 支援iso/ansi c和embedded c++.
9. cstartup的定製
(1). 在__low_level_init()中新增**。該函式可以用來初始化i/o暫存器,並決定資料段是否在cstartup被初始化。檔案430\src\lib\lowinit.c給出了框架,copy到專案目錄中使用,檔案中有一定的使用說明。
(2) 若__low_level_init()中新增**不能滿足要求,則把430\src\lib\cstartup.s43拷貝到自己的工作目錄,修改所需**;然後在將該檔案新增到專案,在專案選型的xlink的include頁下選擇ignore cstartup in library即可。
10. 使用#include "io430x14x.h"和#include "in430.h"來替代#include
可以使用定義的位變數
可以使用以下方式定義位變數,但是編譯器最終還是轉換為位元組操作:
struct
ie1_bit;
不推薦使用bitfields,效率很低
11. 陣列的索引值用int型效率最高,char型也好略低
陣列型別:char型陣列效率最高,
其他型別的陣列在索引時,都採用了乘法
使用MSP430注意的問題
i nclude 指要在編輯器設定目錄下,i nclude 指的是在當前工程目錄下。2.要呼叫另乙個檔案中的函式,要把這個函式檔案放到當前工程目錄下,並且在工程中新增此檔案。3.命名中不能有 比如 byq ee會認為是錯誤的,要用下劃線。4.用iar軟體 時,可以加入變數,如果是檢視i o資訊只需加...
專案要求注意事項
專案要求注意事項 一 專案評分的三個方面 l 60 l 文件 20 l 答辯 20 二 專案每個方面的要求 1 l 規範,如 命名規範 縮排規範 注釋規範等。嚴格參照電子書 高質量 c 程式設計指南 的 規範。l 及格標準 具備壓縮 解壓兩個功能。l 採用新技術 使用新演算法可加分。l 增加新功能可...
MSP430 開發中遇到的坑(待續)
1 sprintf 格式化結果與預期不符 現象 sprintf buf,0x 02x hex buf 輸出的 0x 7830 中間遇到問題,上網查了半天能查到的方法都測試過了,問題未解決 最後的解決辦法 include stdio.h 想死的心都有 2 在 定時器中 呼叫串列埠傳送資料 導致資料亂碼...