<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > dsPIC33F單片機(jī)的程序升級(jí)探討

          dsPIC33F單片機(jī)的程序升級(jí)探討

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

          2 引導(dǎo)程序的實(shí)現(xiàn)

            2.1 程序流程

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

            (1)初始化電路板,包括單片機(jī)的工作頻率、外圍接口等,尤其要注意啟用單片機(jī)的“備用中斷向量表”。因?yàn)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/dsPIC33F">dsPIC33F單片機(jī)復(fù)位后默認(rèn)啟用“中斷向量表”,而由基本原理的說(shuō)明可看出,引導(dǎo)程序必須采用“備用中斷向量表”。

            (2)判斷程序走向,通過(guò)標(biāo)志判斷是跳轉(zhuǎn)到應(yīng)用程序,還是執(zhí)行流程。

            (3)若標(biāo)志為“正常運(yùn)行”,則調(diào)用GOTO指令跳轉(zhuǎn)到應(yīng)用程序。

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

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

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

            

          引導(dǎo)程序的詳細(xì)流程

            2.2 關(guān)鍵細(xì)節(jié)的實(shí)現(xiàn)

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

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

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

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



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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();