q1. iar中怎樣描述p2out.3腳,#define lcd_cs1 p2out.3; 對嗎?
a1:430 不能位定址,所以一般的位操作,都通過「與」來作用。#define lcd_cs1 (p2out&bit3 )。
q2.__intrinsic是什麼意思
a2:本徵函式,不是c語言標準庫,而是和msp430彙編直接對應的函式,比如:
_nop()
_eint()
lpm0
引用msp430***x.h,預設引用的標頭檔案
q3:在程式裡迴圈呼叫了sprintf函式,當迴圈了幾次後程式就跑飛了,是堆疊大小不夠嗎?還有sprintf到底需要多大的堆疊,單步走了下,發現它使用堆疊都不是連續的?
a3:有可能是的sprintf 函式堆疊資料把跳轉位址擠掉,可以調開堆疊看一下。
q4:資料型別small,medium,large的區別,以及怎麼訪問大於0x10000的位址空間?資料放在大於0x10000的位址空間中,怎麼去訪問?同時small,medium,large 在何處可以體現它們的區別?
a4: 可以訪問。值得注意的是option 裡的general option 選項內的資料型別得選擇large,程式大小,ram使用,執行速度都不一樣。
1.f5xx 430x
2.選擇large small medium 產生效果是改變指標變數所佔位元組個數.iar 中指標變數預設2 個位元組,選擇large
占用4 個位元組,那麼指標就可以訪問超過64k範圍的位址.
3.可以採用iar 內部函式, */
void __data20_write_char (unsigned long __addr,
unsigned char __value);
void __data20_write_short(unsigned long __addr,
unsigned short __value);
void __data20_write_long (unsigned long __addr,
unsigned long __value);
unsigned char __data20_read_char (unsigned long __addr);
unsigned long __data20_read_long (unsigned long __addr);
q5:浮點數運算問題,既然2.2a編譯器能實現64浮點位運算,那麼它的運算程式在哪個文件裡。
a5:要使用64位的浮點運算需要設定編譯器首先選擇project->option->general->target->dou××e floating point size選中"64"再選擇project->option->xlink->include->library->cl430d.r43用c++的朋友要選擇dl430d.r43庫建議用整型數進行運算,比如像開方,64 位浮點數要用幾十毫秒,而整型數隨資料大小只要幾微秒到幾毫秒不等。
q6:區域性變數的問題,在中斷服務程式中開中斷響應其他中斷,發現中斷服務中定義的區域性變數老被改動,換成全域性變數沒問題。想問一下這是啥原因?還想問一下c程式設計過程中應注意的細節?
a6:區域性變數只是暫存變數,一般編譯器會使用通用暫存器來儲存這個變數值,彙編程式設計的話需要圧棧操作,c語言程式設計的話建議把變數申明為全域性或者靜態。
MSP430常見問題之通訊類
1 430 串列埠中,有個r d 控制線,在接收上位機的資料,但本身的資料有無傳送完畢不知道啊,什麼時候才可置低r d 位來接收資料啊?好像430 沒有傳送完中斷標誌 a1 位元組主動傳送,一般都能發出去,除非你的的時鐘有問題 可以用程式檢測,半雙工通訊,可以多傳送乙個位元組,作為判斷,當最後個位元...
MSP430常見問題之復位系統類
q2上電復位和硬體看門狗復位有什麼區別嗎,在程式裡將兩者分開,請問有辦法將兩者分開嗎?a2 上電復位時,記憶體被清零或為任意值,看門狗清零時並沒有斷電,記憶體裡的原有資訊被保留,同時上電復位無法通過標誌位來判別,看門狗復位才可以通過wdtifg 來判別。同時注意reset 之後 1 判斷有無復位標誌...
MSP430常見問題之AD轉換類
q1 msp430f149 ad 的輸入阻抗有多大?a1 rc 2000歐 30pf q2 msp430 adc12 模組的速度?a2 adc12 的轉換速率是轉換所需的adc12clk 以及時鐘的一項功能。adc12clk 的近似最小值與最大值分別為500khz 及6.5mhz。速度最快的整個轉換...