在調(diào)試的過程中,時(shí)常需要查看寄存器值,以確認(rèn)配置是否正常寫入或者手動(dòng)修改某些位。
支持的交互方式列舉如下。
無論是哪種交互方式,都要注意
|
1、通過svc文件。將芯片對(duì)應(yīng)的svc文件加入到工程(部分驅(qū)動(dòng)庫已經(jīng)包含在chip目錄下)。
● 打開Peripherals Pane的視圖
● 進(jìn)入調(diào)試界面,選擇要查看的外設(shè)。toggle點(diǎn)擊可以取消查看。
● 調(diào)試界面可以看到對(duì)應(yīng)外設(shè)的寄存器內(nèi)容
2、通過Frame Pane中的Memory tab。如果您手中暫時(shí)沒有svc文件,也可以通過查看memory區(qū)內(nèi)容獲得寄存器狀態(tài)。
● 確保Frame Pane處于打開狀態(tài)。
● 對(duì)照芯片使用手冊(cè),查詢外設(shè)基地址。
● 定位Memory地址。如下圖。寄存器地址為基址+Offset值。
如果代碼要用math庫中的函數(shù),需要做
1、文件中 #include
2、修改link tab的內(nèi)容。將連接類型改成whole-archive,并在link flags中增加 -lm,如下圖所示:
如果不小心關(guān)閉了一些顯示窗口,比如調(diào)試時(shí)的匯編窗口、Frame Info窗口、Debugger窗口……,找不到恢復(fù)地方可以使用一鍵恢復(fù)默認(rèn)顯示。
1.點(diǎn)擊菜單欄中的“Windows”,再點(diǎn)擊“Reset View to Defaults”
如何實(shí)現(xiàn)變量的絕對(duì)定位
CDK編譯環(huán)境使用了GNU C Complier,簡(jiǎn)稱GCC。GCC使用ld腳本對(duì)代碼對(duì)象進(jìn)行鏈接,將多個(gè)輸入文件整合成一個(gè)輸出文件。
在一些特殊的場(chǎng)合,我們需要對(duì)代碼中的一些內(nèi)容實(shí)現(xiàn)精確的定位。
這里我們分兩個(gè)方面來介紹,分別是變量的絕對(duì)定位和函數(shù)(代碼段)的絕對(duì)定位。
假設(shè)要實(shí)現(xiàn)將wData[] 放到程序存儲(chǔ)區(qū) 0x9000的位置。需要做以下兩個(gè)操作
1. 首先在代碼文件中,將變量歸入某個(gè)section,這個(gè)例子里是FlashData段。
__attribute__((section(".FlashData"))) const uint32_t wData[] = {0x1, 0x2}; //在這種絕對(duì)定位的情況下,關(guān)鍵字 const 不是必須的。
< /FONT >
< P > 2. 其次,要對(duì)ld文件進(jìn)行修改。增加以下內(nèi)容,將FlashData段起始地址定位在0x9000。
.FlashData 0x9000:
{
. = ALIGN(0x4)
;
*(.FlashData)
*(.FlashData.*)
} > ROM
再重新編譯,就可以在map文件上看到:
有時(shí)候,會(huì)希望有一些代碼可以快速取址并運(yùn)行。其中一個(gè)實(shí)現(xiàn)的方法是把函數(shù)定位到RAM區(qū)。
假設(shè)要實(shí)現(xiàn)將function() 放到RAM。需要做以下兩個(gè)操作:
1. 首先在代碼文件中,將函數(shù)歸入某個(gè)section,這個(gè)例子里是codeinram段。
__attribute__((section(".codeinram"))) void function1(void);
2. 其次,要對(duì)ld文件進(jìn)行修改。
1、如果拿到的庫程序第一次編譯報(bào)錯(cuò),錯(cuò)誤提示如下:
這是因?yàn)閹彀l(fā)布時(shí)帶了一些編譯選項(xiàng),點(diǎn)擊CDK“清除”快捷按鈕清除一下工程,再重新編譯即可。
1、芯片放在燒錄器上燒寫時(shí)需關(guān)注芯片放置的位置,有沒有放反等等。
2、芯片在板燒寫時(shí),需要注意
● 燒寫需要用到的5個(gè)信號(hào)(VDD,VSS,SWD,SWCLK,RST)有沒有都連到燒寫器上
● VDD和VSS之間的電容有沒有超過100uF,超過的話可能需要在燒錄器這邊的VDD和VSS之間并個(gè)小電容(如500ohm)來對(duì)板子上的大電容進(jìn)行放電
● SWD,SWCLK和RST線的路徑上有沒有串電阻或并電容,這些都會(huì)影響燒寫時(shí)序。電路設(shè)計(jì)時(shí)要盡量避免這樣的電路。 如果應(yīng)用上不得不有這些阻容,電容<101pF,電阻<1Kohm
1、 可能的原因是沒有選擇正確的下載文件,或者下載文件的長(zhǎng)度為0。
當(dāng)遇到CDK環(huán)境下可以燒錄代碼,但是拿到燒錄器上反而提示燒錄失敗的現(xiàn)象時(shí),請(qǐng)檢查:
ihex文件的大小是不是超過了芯片的最大DROM size?
如果超過了,再檢查ld文件,是不是出現(xiàn)了段定義錯(cuò)誤?如下面ROM段的LENGTH。
MEMORY
{
ROM(RX) : ORIGIN = 0x00000000, LENGTH = 64K
RAM(RWX) : ORIGIN = 0x20000000, LENGTH = 4K
}