說(shuō)說(shuō)嵌入式調試方式
對嵌入式軟件的開(kāi)發(fā),講解的教程、教材都比較多,但這些都還只是在理論上進(jìn)行說(shuō)明,并且,對開(kāi)發(fā)環(huán)境、仿真器的作用對于一個(gè)嵌入式開(kāi)發(fā)的門(mén)外漢來(lái)講都是非常復雜的知識,這里就將我所總結出來(lái)的嵌入式開(kāi)發(fā)過(guò)程的相關(guān)概念進(jìn)行一下解釋?zhuān)饕菍RM嵌入式中關(guān)于片內f(wàn)lash,片外flash,片內RAM,片外RAM的相關(guān)調試工作進(jìn)行一下詳細的說(shuō)明。
本文引用地址:http://dyxdggzs.com/article/201610/307387.htm我所獲取的知識的實(shí)踐環(huán)境還是老樣子:IAR+JLINK V7.0,這套環(huán)境說(shuō)明一下:IAR是一套非常成熟的嵌入式開(kāi)發(fā)環(huán)境,之所以選擇它,是因為入門(mén)時(shí)的項目就是拿他做的,當時(shí)用的是LM1138 是M3的ARM核。
作為一個(gè)嵌入式的門(mén)外漢辛辛苦苦的詳細了解了IAR環(huán)境的一個(gè)調試過(guò)程,然后就產(chǎn)生了惰性,哈哈,懶得用別的開(kāi)發(fā)環(huán)境了。其實(shí)就是這樣的,做軟件開(kāi)發(fā)的,尤其是嵌入式軟件開(kāi)發(fā),你用什么開(kāi)發(fā)工具其實(shí)都是一樣的,幾種開(kāi)發(fā)工具ADS,IAR,MDK其實(shí)都是各有優(yōu)缺點(diǎn)的,我感覺(jué)IAR的環(huán)境下官方例程較多,如果采用比較常見(jiàn)的MCU的話(huà),基本在里面都能找到相應的例程的;并且IAR是在不斷更新的,目前的最新版本已經(jīng)到了5.4.1了,相對非常成熟,對各種新的核心支持非常及時(shí);ADS是早期對ARM開(kāi)發(fā)支持的最好的環(huán)境之一,兼容所有ARM指令集、偽指令集,應該可以說(shuō)是標準的開(kāi)發(fā)環(huán)境了,但ADS環(huán)境永遠停留在了1.2版本上,對新ARM核的支持已經(jīng)無(wú)從談起,它在設計上比較優(yōu)越的就是將軟件調試AXD與編輯ADS是分開(kāi)兩個(gè)程序的,我們可以使用ASD對非ADS開(kāi)發(fā)的bin程序進(jìn)行調試,算是比較方便的,網(wǎng)上的資源相對來(lái)講也是比較多的,如果是嵌入式愛(ài)好者使用ADS作為開(kāi)發(fā)環(huán)境還是相當不錯的。MDK沒(méi)有用過(guò),不太清楚,不過(guò)MDK是ARM在放棄ADS環(huán)境支持后選擇的第二個(gè)官方編譯環(huán)境,對新內核的支持也是非常迅速的??偟恼f(shuō)來(lái),做嵌入式軟件開(kāi)發(fā),選用哪一中開(kāi)發(fā)環(huán)境其實(shí)都是沒(méi)有什么關(guān)系的,從開(kāi)發(fā)上來(lái)講,他們的主要區別主要還是集中在匯編指令不同、程序入口函數名不同等等,這些非常細節上的東西,對程序主體所使用的C語(yǔ)言是完全相同的。這些開(kāi)發(fā)環(huán)境在網(wǎng)上都有相應的破解版,如果是個(gè)人作為學(xué)習之用選擇哪一個(gè)都是無(wú)所謂的。
作為仿真器來(lái)講,JLINK我認為是非常值得推薦的,主要原因還是JLINK破解的非常完善,隨便在淘寶上一搜就有一堆,現在的價(jià)錢(qián)又非常的便宜,一般在80塊左右使用起來(lái)就沒(méi)有問(wèn)題了,與正版的JLINK在功能上現在已經(jīng)沒(méi)有什么區別了。JLINK支持幾乎所有片內f(wàn)lash燒錄,以及大部分的Norflash的燒錄。但JLINK不支持直接的NANK flash的燒錄。而目前對產(chǎn)品開(kāi)發(fā)來(lái)說(shuō)所使用的仿真器如ZLG的AK100來(lái)說(shuō)是支持NAND flash的直接燒錄的。并且在IAR下不論使用JLINK方式還是RDI的調試方式,都是不能使用JLINK的Norflash燒錄程序的,只能使用片內f(wàn)lash的燒錄算法。
好啦,上面的工具說(shuō)明就說(shuō)到這里;下面主要說(shuō)一下關(guān)于IAR環(huán)境調試的主要方式。在嵌入式開(kāi)發(fā)中,由于對flash芯片的燒錄速度較慢,讀取flash芯片的速度也非常慢,而調試的時(shí)候需要頻繁修改程序,對程序的讀取、寫(xiě)入速度對開(kāi)發(fā)速度影響很大。因此對調試來(lái)說(shuō),一般講程序直接燒入片內ram或者是片外的ram中運行的,這樣調試速度極快。這在IAR中是通過(guò)在linker中所設置的icf文件所實(shí)現的,在調試時(shí),我們一般講icf中RAM ROM都設置為片內ram的地址范圍,這樣程序在鏈接時(shí)所使用的地址范圍都在片內ram中,IAR調試時(shí)將程序鏡像放于片內RAM中,跳轉到入口程序__iar_start就可以對程序進(jìn)行調試了。但有時(shí)片內RAM空間并不夠使用,我們需要使用片外的RAM,但是我們需要知道,使用片外RAM的話(huà)我們需要首先設置CPU內相應的存儲器管理寄存器,告訴CPU如何訪(fǎng)問(wèn)片外RAM(主要有片外RAM 地址、大小、位寬、時(shí)序等)這部分工作是需要在程序寫(xiě)入片外RAM之前就完成的,所以將這部分指令實(shí)現為IAR下的linker設置中的mac文件,在該文件中完成對CPU相關(guān)寄存器的設置后,IAR通過(guò)仿真器向片外RAM寫(xiě)入數據。這里需要說(shuō)明一個(gè)問(wèn)題就是異常向量的訪(fǎng)問(wèn),我們在片內或者片外RAM中調試程序的時(shí)候,是不能夠運行正常的異常向量的,我們知道異常向量表是在地址空間0x000000的位置的,一般是flash空間,(不經(jīng)過(guò)Remap,MMU的修改,關(guān)于Remap,MMU在這里就不進(jìn)行展開(kāi)說(shuō)明了,改日再討論)而我們的程序都是寫(xiě)入RAM地址空間的,這就導致我們的程序如果進(jìn)入異常狀態(tài)那就肯定會(huì )跑飛,就是說(shuō)程序跳轉到異常處理函數,而異常處理函數又指向一個(gè)不存在的函數地址,這樣就非常不方便調試異常狀態(tài)了。
再說(shuō)一下關(guān)于片內f(wàn)lash,片外flash的調試方法,首先,我們要明確,只要是flash不管是NAND,還是Norflash,對flash芯片的訪(fǎng)問(wèn)都是需要驅動(dòng)程序的,這是嵌入式初學(xué)者經(jīng)常糊涂的地方,對Norflash來(lái)說(shuō),它的地址線(xiàn)、數據線(xiàn)連接與片外SRAM,SDRAM其實(shí)是差不多的,為什么對SRAM,SDRAM我們只需要在mac文件中設置寄存器,而flash確一定要使用驅動(dòng)程序那,這里,主要是對RAM的訪(fǎng)問(wèn),我們只需要設置地址、大小、位寬、時(shí)序就可以訪(fǎng)問(wèn)了,而對flash來(lái)說(shuō),我們在向其中寫(xiě)入或者讀出數據,我們首先要向flash芯片內相應的寄存器寫(xiě)入命令才能都完成后續的讀取、寫(xiě)入、設置的操作,這就是flash芯片驅動(dòng)程序的作用??赡苡腥税l(fā)現,IAR下對片內f(wàn)lash并沒(méi)有設置flash驅動(dòng)程序啊,其實(shí)這部分在我們設置工程中使用的DEVICE名稱(chēng)時(shí)就自動(dòng)設置好啦,如我們使用LM1138的芯片,IAR在將程序寫(xiě)入片內f(wàn)lash時(shí),自動(dòng)調用LM1138的flash驅動(dòng)函數向flash中寫(xiě)入程序。這樣片外flash又該如何操作那,這里就要說(shuō)一下啦,只要是flash就必須要有驅動(dòng),對flash芯片的燒錄過(guò)程就是首先,IAR在芯片的片內RAM中運行flash驅動(dòng)程序,將程序燒錄入片內或者片外的flash芯片中。片內非flash驅動(dòng)IAR已經(jīng)自動(dòng)設置好啦,片外的flash就需要我們來(lái)寫(xiě)驅動(dòng)了,這里就有兩種方式來(lái)調用驅動(dòng)了,一個(gè)是在IAR下編譯根據flash芯片的數據手冊編寫(xiě)驅動(dòng),然后通過(guò)IAR的flashloader調用編譯好的驅動(dòng)程序,片外flash芯片寫(xiě)入數據。還有就是功能比較全面的仿真器,可以直接在設置時(shí)指定片外flash芯片驅動(dòng)程序,IAR通過(guò)相應的調試接口支持相關(guān)的仿真器的在線(xiàn)調試。使用JLINK的話(huà)只能通過(guò)在IAR下編寫(xiě)片外flash芯片驅動(dòng)的方式開(kāi)實(shí)現對片外flash芯片讀寫(xiě)的需要。
最后說(shuō)一下程序鏈接與程序燒錄的關(guān)系,在程序鏈接時(shí)指定ROM,RAM地址的范圍,ROM,RAM其實(shí)就相當于程序燒錄地址,也就是說(shuō),設置鏈接器地址時(shí)需要對應芯片數據手冊、開(kāi)發(fā)板的地址空間范圍等,設計好程序運行地址空間,設置鏈接地址。
評論