1. 程式人生 > >ARM開發除錯教程-不錯的ARM開發心得

ARM開發除錯教程-不錯的ARM開發心得

(三) 利用我提供的模板開始自己的專案
很多剛剛學習ARM的人往往會遇到這樣一個問題:自己寫了程式,編譯也通過了,結果怎麼也生成不了二進位制格式的目的碼(*.bin)。如何生成目的碼需要參考SDT2.51安裝資料夾pdf中的userguide.pdf,在它的392頁有詳細說明,教你怎麼 Converting ARM linker ELF output to binary ROM formats。
為了給大家帶來方便,在我提供的小應程式中,可以將他儲存為一個模板,操作如下
開啟我提供的小應用程式的工程,點選選單File下的Save As Template:

然後在彈出的視窗中隨意選擇一個目錄下,新建一個自己的資料夾,隨便取一個Project名稱,確認即可在主程式上出現新Project介面。現在可以在剛才建立的資料夾下面編輯程式碼,包括彙編程式碼和C程式程式碼。注意彙編程式碼必不可少,它是用來進行系統初始化和C程式入口的,這些範例程式碼可以在三星網站去下載。

(四) 如何新增自己的原始碼

點選選單Project下的Add File To Project……,在彈出的視窗中,瀏覽自己的Project資料夾下面的程式程式碼,將程式碼新增到建立的專案。這時依次點選rom、debug、Sources前面的十字架,就會看到自己剛才新增成功的程式碼,雙擊任何一個程式碼檔案就可以開啟它進行編輯:

說明:SDT2.51好象有一個bug,當你直接雙擊一個程式碼檔案時,可能會出現非法錯誤。我的機器就是這樣。希望各位當編寫程式碼時用uedit,這樣比較方便。

(五) 生成可以在FLASH中執行的程式碼
編輯程式碼大家都會了,那麼如何將自己寫的程式碼放在FLASH中,並直接執行呢?看過S3C44B0 DATASHEET的人或者知道計算機啟動過程的人都會知道,BIOS是一個什麼東西,
那麼對於S3C44B0的啟動也無非如此。你生成的程式碼必須存放在0x00000000為開始的FLASH中,這樣當S3C44B0復位的時候,從這裡取指令執行。

那麼如何設定呢?如下:

點選ENTRY AND BASE,接著會出現如下對話方塊:



(六) 生成可在FLASH中執行的目標碼


現在選擇選單build或者點選快捷圖示就可以編譯程式碼,點選Force build之後就生成了二進位制目的碼(*.bin),這可以在專案資料夾下面找到。在主程式視窗下面的資訊框可以看到編譯的情況,包括警告和錯誤資訊,最終程式碼生成的情況等等;

好了,生成了bin檔案。下一步就可以進行寫入FLASH裡了。

(七) 寫入可執行的目標碼
激動人心的時刻就要到來了,如果你按照我的步驟一步一步走,離成功不遠了!!
檢測硬體是否正常(按照我上訴硬體篇中的步驟)。如果硬體準備就緒,寫入目標碼過程如下:

對於我的板子,使用SST39VF160,需要的S3C44B0X.bsd、default.fcd和Fluted.exe,將自己的目的碼model.bin與上面的三個檔案放在同一個目錄下面,執行Fluted.exe就可以進行Flash燒寫了。
由於Fluted.exe要輸入相應的配置引數,所以我乾脆做了一個批處理檔案f.bat:
FluteD a -f model.bin -v -s 0
這樣執行這個批處理檔案就可以開始燒寫了,燒寫介面如下:

這個程式首先開啟fcd檔案和bin檔案,然後檢查裝置ID,如果ID錯誤的話程式會停止執行。這意味著你的硬體系統有問題,或者JTAG接線有錯誤等等。然後開始擦除FLASH裡面的資料,根據Flash的大小擦除時間有長有短;擦除完畢就開始對Flash程式設計,將目的碼寫進去。程式設計完畢開始校驗,如果出錯會給出提示資訊的,告訴你在哪個地址區域出錯,寫進去的資料是什麼,讀出來的資料又是什麼,只有校驗完全成功才是燒寫OK!

一般朋友易犯的錯誤:
有些朋友將目的碼定位在0X0C000000,結果燒寫後校驗也完全成功了,但復位之後板子卻沒有任何反應!這是因為寫到SDRAM之後校驗肯定也是對的,但復位之後程式是從0X00000000開始執行的,而不是從0X0C000000開始的,所有板子肯定沒有反應了!

(八) 如何除錯程式

各位朋友都知道,除錯程式是在SDRAM中執行的,那麼我們必須將自己編譯好的程式放到SDRAM中,那麼如何才能將程式放入SDRAM中呢?操作如下:

就我的板子而言,SDRAM的片選引腳接在nSCS0上面,它的地址從0X0C000000開始,所有要把目標程式定位在這裡。
如前面所說步驟,先單擊一下主程式視窗ROM下的Debug,然後點選選單中的set,在彈出的視窗中選擇點選Entry And Base,在Read- only下面的框裡面輸入0X0c000000(程式空間),在Read-write下面的框裡面輸入0X0c5f0000(這是資料空間),確認即可:
按照上述步驟,設定SDT2.51,然後別忘了重新編譯。會生成AXF檔案,這個檔案就是我們要除錯的程式了。

(九) 除錯之前需要知道的……
SDT2.51支援軟體模擬和硬體debug,預設是軟體模擬,這個很簡單,大家一看就會。關鍵的是硬體debug,它支援串列埠、並口和乙太網模擬,串列埠和並口我不知道怎麼玩。
我的板子是通過並口JTAG進行硬體除錯的,但實際上卻是通過乙太網的。這裡面有一個轉換軟體——JTAG.exe,它把傳送到乙太網的資料攔截下來,遵從JTAG協議,轉換到並口上面,然後通過JTAG介面板,控制ARM板上面的CPU,進行硬體Debug。
JTAG.exe在王雲飛的網頁上面有下載,包括並口JTAG介面板的電路圖,我就是照他的圖紙做的板子。
需要說明一下:JTAG.exe只能在Win98下執行,Win2000下不行,所以如果你要進行硬體模擬的話,必須切換到Win98系統下面。這很不爽,哪位朋友找到能在Win2000下面跑的JTAG.exe的話,麻煩告訴我一聲!當然如果只是進行程式編寫、編譯、軟體模擬,SDT2.51在 Win98、Win2000和WinXP都沒有問題的!
雙擊JTAG.exe,它就在後臺運行了。

(十) 開始模擬了……

使用這種方式模擬,還要進行一些設定才行。點選Debug選單或者快捷圖示,出現ARM Debugger程式視窗:


然後選擇選單Options下面的Config Debugger:

在Target Environment下面選擇Remote_A,然後點選Configure:

選擇Heartbeat,在Ethernet後面輸入你的計算機IP地址並確認。這裡面肯定要你機器上面裝有網絡卡,而且IP地址要指定了,如果是自動分配IP的話,就不太方便了,每次都要查詢自己機子的IP。

(十一) 裝載目標碼到板子…

如果是第一次設定Debugger,確認以後,系統就會自動裝載程式碼到ARM板上,你也可以點選Reload圖示重新轉載程式碼。如果程式碼很大的話,時間會稍長一點,可能要幾十秒,一般幾秒就搞定,出現如下視窗:

出現了上面的這個畫面才說明你裝載成功了,如果出現與此完全不同的東西,或者莫名其妙的程式碼,你就要檢查硬體了!

現在按F8就可以單步模擬了,你可以看到綠色的圖示一步一步向下走。

如果出現以下幾種情況的處理方法:
1)如果程式一單步就跑飛,可能就是硬體問題了,檢查時鐘電路,電源濾波是否良好?
2)初學者建議時鐘倍頻不用太高,如果時鐘輸入是10MHz的話,二倍頻將主頻定在20MHz,這樣除錯起來可能麻煩少一點。大家都知道頻率高了會出現很多意想不到的情況。

彙編程式走完,就要進入C程式碼了,下面是從彙編到C的入口:
按F8就進入C程式碼模擬了,介面如下:

(十二) 軟體的其他使用方法我在這裡不在說明,希望各位能夠迅速建立自己學習ARM的信心…

後記
本文歡迎轉載,但請註明出處,如果您願意修改裡面的內容,請您標註您修改的地方。並email回本人。對文章內容有任何疑問請Email聯絡本人,共同研究!

類似這樣的文章我還會繼續……,文章只是我與大家交流心得的一種體現,如果您對文章有所見解或者有所疑義,請您聯絡我並共同研究。

我的產品計劃:根據網友的需求,我將盡量推出價位低功能全的開發板,並且會給各位朋友一個遐想的空間……

1) S3C44B0開發套件,比較完整的ARM解決方案,十分低廉的價格,提供硬體開發板,簡單源程式,移植完整的uClinux作業系統,提供相關驅動(網絡卡驅動和LCD驅動)。
2) S3C4510開發套件,比較完整的ARM解決方案,十分低廉的價格,提供硬體開發板,簡單源程式,移植完整的uClinux作業系統,提供相關驅動(網絡卡驅動和LCD驅動)。

3) DSP開發套件:比較完整的DSP解決方案,十分低廉的價格,提供硬體開發板,簡單源程式,移植完整的ucosII的作業系統。