關于LPC1768的存儲地址、運行地址、向量地址
對于編寫程序而言,程序的運行地址很重要。默認情況下都是直接按照軟件的模塊進行設置即可,此前并沒有太過于關心,最近在研究iap的時候需要做到這個方面的改進。
以NXP官方提供的IAR例程為例,IAR既可以做flash的調(diào)試還支持SRAM的調(diào)試,那這是如何做到的呢?在程序中,有以下的一段切換代碼:
在FLASH模式下:
在RAM模式下:
翻譯以后,可以得到以下內(nèi)容:
當FLASH調(diào)試時,設置向量地址為:0x00000000;當RAM 調(diào)試時, 設置向量地址為:0x10000000;LPC1768的為512K的flash和32K的sram,其地址如下圖所示:
因此答案很清除,當要在flash調(diào)試時,將向量地址指向flash,當要在ram中調(diào)試時,將向量地址指向ram。
以上是程序內(nèi)容的變化,然后還有鏈接文件的變化,分別對應以下兩個文件:
通過ultra-edit打開,發(fā)現(xiàn)兩份鏈接文件的區(qū)別主要是向量地址,ROM地址,RAM地址發(fā)生了變化。由于鏈接文件是給程序編譯、鏈接用的,因此一旦鏈接文件確定,程序就必須按照鏈接文件中規(guī)定的地址存儲。這里的鏈接地址也認為是存儲地址。
由于bin文件格式本身是不帶程序運行地址信息的,因此在用J-LINK燒寫時,必須指定BIN文件的燒寫地址。如程序從0x00000000運行,則從0x00000000開始燒寫,如從0x00001000運行,則從0x00001000開始燒寫。
程序運行,MCU上電后,總是從0x00000000地址開始運行程序。