<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > dsPIC33F單片機的程序升級探討

dsPIC33F單片機的程序升級探討

作者: 時(shí)間:2011-09-19 來(lái)源:網(wǎng)絡(luò ) 收藏

2 引導程序的實(shí)現

  2.1 程序流程

  進(jìn)入引導程序后,程序的執行流程如下:

  (1)初始化電路板,包括單片機的工作頻率、外圍接口等,尤其要注意啟用單片機的“備用中斷向量表”。因為單片機復位后默認啟用“中斷向量表”,而由基本原理的說(shuō)明可看出,引導程序必須采用“備用中斷向量表”。

  (2)判斷程序走向,通過(guò)標志判斷是跳轉到應用程序,還是執行流程。

  (3)若標志為“正常運行”,則調用GOTO指令跳轉到應用程序。

  (4)若程序升級標志為“程序升級”,則執行程序升級流程,這是引導程序的重點(diǎn)。

  程序升級按“塊”更新,每“塊”包含1 024個(gè)存儲單元(以字為單位),即每幀數據需包含2 048個(gè)字節的程序代碼。在更新程序時(shí)并不是簡(jiǎn)單地用接收到的新程序代碼覆蓋舊程序,對于一些特殊幀需特殊處理,通過(guò)對比應用程序編譯后的程序存儲器結構與實(shí)際應用中的程序存儲器結構可以很好地理解這點(diǎn)。圖2(a)所示為實(shí)際應用中的程序存儲器內部結構;(b)為應用程序編譯后的程序存儲器結構。通過(guò)對比這兩張圖可以看出,“GOTO指令”、“備用中斷向量表”、“引導程序”這些區間的程序不能直接覆蓋,若“GOTO指令”被覆蓋,則程序升級后程序直接跳轉到應用程序,不會(huì )執行引導程序;若“備用中斷向量表”被覆蓋,則引導程序中的中斷服務(wù)程序無(wú)法執行;若“引導程序”區間的內容被覆蓋,則引導程序被清空,顯然會(huì )帶來(lái)災難性的后果。因此對于第1幀數據需特別處理,該幀數據對應程序存儲器第1塊(地址為0~0x3FF)的內容,包含“GOTO指令”、“復位地址”、“中斷向量表”和“備用中斷向量表”的內容,為了保證"GOTO指令”和“備用中斷向量表”的內容不被修改,需要先讀出原“GOTO指令”和“備用中斷向量表”的內容,替代接收數據緩沖區中對應位置的內容,然后寫(xiě)入程序存儲區的第1塊;對于第2幀到第50幀(0xe800/0x400),這些是引導程序的內容,顯然不能做任何修改,因此這幾幀數據接收后直接丟棄;從第51幀到最后一幀,這是應用程序的內容,也是真正要升級的內容,所以可直接覆蓋舊內容。程序升級后,將程序更新標志恢復為“正常運行”狀態(tài),然后復位CPU,則經(jīng)引導程序又進(jìn)入了新的應用程序,從而實(shí)現了應用程序的升級。

  基于以上說(shuō)明可得引導程序的詳細流程如圖3所示。

  

引導程序的詳細流程

  2.2 關(guān)鍵細節的實(shí)現

  (1)啟用“備用中斷向量表”。設置INTCON2寄存器中ALTIVT控制位的值,其值設置為“1”則啟用“備用中斷向量表”;設置為“0”則啟用“中斷向量表”。

  (2)程序首址的設置。在以上流程的說(shuō)明中談到引導程序的首址為0x400,而應用程序的首址為0xc800,則設置程序的首址可通過(guò)修改鏈接描述文件(.gld文件)實(shí)現。以J256GP710單片機為例,將引導程序首址改為0x400,其實(shí)現步驟為:打開(kāi)p33FJ256GP710.gld文件,將其中的“program(xr):ORIGIN=0x200,LENGTH=0x2AA00”改為“pro-gram(xr) :ORIGIN=0x400,LENGTH=0x2A900”;將“_ _CODE_ BASE=0x200”改為“_ _CODE_BASE=0x400”。應用程序首址的修改也采用相同方法。

  (3)讀/寫(xiě)程序存儲器。在參考文獻中有很完整的原理說(shuō)明,也有完整的源代碼,可直接使用。

  (4)軟件復位CPU。在應用程序運行過(guò)程中發(fā)現需升級程序或在引導程序中升級程序完畢時(shí),均需對CPU進(jìn)行軟件復位,這可通過(guò)單片機提供的“reset”指令實(shí)現,可在程序相應位置執行“reset”指令即可。



關(guān)鍵詞: dsPIC33F 程序升級

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>