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

          新聞中心

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

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

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

            引言

            實(shí)際應(yīng)用中,由于客戶需求變化或程序BUG修改等原因,經(jīng)常出現(xiàn)需要使單片機(jī)應(yīng)用的情況,本文利用單片機(jī)運(yùn)行時(shí)的自編程(Run-Time Serf-Programming,RTSP)特性,實(shí)現(xiàn)了基于該單片機(jī)應(yīng)用程序的升級(jí)功能。

            1 基本原理

            系列單片機(jī)提供了兩種方式用于對(duì)其內(nèi)部程序存儲(chǔ)器進(jìn)行編程:在線串行編程(In-Circuit Serial Programming,ICSP)和運(yùn)行時(shí)自編程(Run-TimeSelf-Programming,RTSP)。ICSP使用5根線對(duì)單片機(jī)編程,主要用于產(chǎn)品調(diào)試或生產(chǎn)過程中,顯然不適合用于產(chǎn)品運(yùn)行時(shí)的。RTSP是通過使用TBLRD(表讀)和TBLWT(表寫)指令來完成的,使用RTSP可以一次將64條指令(192 B)的塊(或“行”)或單個(gè)程序存儲(chǔ)字寫入程序存儲(chǔ)器,也可以一次擦除512條指令(1 536 B)的塊(或“頁”),由于該方法采用程序指令實(shí)現(xiàn)了自編程,可應(yīng)用于產(chǎn)品運(yùn)行時(shí)的,因此本文采用RTSP方法實(shí)現(xiàn)基于系列單片機(jī)的應(yīng)用程序升級(jí)功能。程序升級(jí)的實(shí)質(zhì)是對(duì)程序存儲(chǔ)器內(nèi)容的更新,所以有必要先了解一下dsPIC33F單片機(jī)的程序存儲(chǔ)器內(nèi)部結(jié)構(gòu)。

            1.1 dsPIC33F單片機(jī)的程序存儲(chǔ)器內(nèi)部結(jié)構(gòu)

            dsPIC33F單片機(jī)的程序存儲(chǔ)器結(jié)構(gòu)如圖1所示。一般情況下,“復(fù)位地址”的內(nèi)容為全0,單片機(jī)復(fù)位后均從程序存儲(chǔ)器地址0的位置上開始執(zhí)行,即從圖1中的“GOTO指令”位置開始執(zhí)行。在這里存放了一個(gè)跳轉(zhuǎn)指令,直接指向用戶程序的首址,默認(rèn)情況下該位置的指令為“GOTO 0x200”,即默認(rèn)跳轉(zhuǎn)到首址為0x200的用戶程序(圖1中的“用戶程序存儲(chǔ)空間”)開始執(zhí)行。dsPIC33F單片機(jī)具有2個(gè)中斷向量表,即“中斷向量表”和“備用中斷向量表”,地址分別從0x000004~0x0000FF和0x000100~0x0001FF這兩個(gè)中斷向量表允許使用不同的中斷服務(wù)程序來處理每個(gè)中斷源。程序升級(jí)功能正是基于程序存儲(chǔ)器內(nèi)部結(jié)構(gòu)的以上特性而實(shí)現(xiàn)。

            

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

            1.2 程序升級(jí)功能的實(shí)現(xiàn)流程

            將圖1中的“用戶程序存儲(chǔ)空間”分為引導(dǎo)程序和應(yīng)用程序2部分,如圖2(a)所示。引導(dǎo)程序用于引導(dǎo)用戶程序是進(jìn)入升級(jí)狀態(tài),還是進(jìn)入正常運(yùn)行狀態(tài),若進(jìn)入升級(jí)狀態(tài)則接收新的程序數(shù)據(jù),并更新程序存儲(chǔ)器的內(nèi)容;若進(jìn)入正常運(yùn)行狀態(tài)則程序跳轉(zhuǎn)到應(yīng)用程序區(qū)。應(yīng)用程序是為了實(shí)現(xiàn)產(chǎn)品功能而編寫的程序,也就是本文所謂“程序升級(jí)”的對(duì)象。

            實(shí)際應(yīng)用中,將外部非易失性存儲(chǔ)器(如E2PROM)的某些存儲(chǔ)單元值當(dāng)作是否進(jìn)行程序升級(jí)的標(biāo)志(以下簡(jiǎn)稱程序升級(jí)標(biāo)志)。單片機(jī)上電或復(fù)位后首先執(zhí)行“GOTO0x400”指令,即跳轉(zhuǎn)到引導(dǎo)程序。默認(rèn)情況下程序升級(jí)標(biāo)志是處于“正常運(yùn)行”狀態(tài)下的,引導(dǎo)程序調(diào)用跳轉(zhuǎn)指令將用戶程序引導(dǎo)到應(yīng)用程序區(qū),若運(yùn)行過程中發(fā)現(xiàn)服務(wù)器有新的應(yīng)用程序版本或接收到服務(wù)器發(fā)來的升級(jí)程序命令時(shí),單片機(jī)將程序升級(jí)標(biāo)志設(shè)置為“程序升級(jí)”狀態(tài),然后軟件復(fù)位單片機(jī)。這時(shí)程序再次跳轉(zhuǎn)到引導(dǎo)程序,根據(jù)程序升級(jí)標(biāo)志,單片機(jī)進(jìn)入程序升級(jí)狀態(tài),接收新的程序,并更新程序存儲(chǔ)器的內(nèi)容,升級(jí)完成后,單片機(jī)將程序升級(jí)標(biāo)志設(shè)置為“正常運(yùn)行”狀態(tài),然后再次軟件復(fù)位,此時(shí)單片機(jī)運(yùn)行于新的應(yīng)用程序中。

            由于引導(dǎo)程序和應(yīng)用程序都可能用到中斷,因此應(yīng)用程序采用中斷向量表,引導(dǎo)程序采用備用中斷向量表,以執(zhí)行各自相應(yīng)的中斷服務(wù)子程序。值得注意的是,在圖2(a)中引導(dǎo)程序的首址為0x000400,這是因?yàn)閐sPIC33F單片機(jī)執(zhí)行一次擦除指令會(huì)擦除512條指令空間(即1“ 塊”,占用1 024個(gè)地址單元),這意味著程序升級(jí)必須以1 024(即0x400)為單位。同理,應(yīng)用程序的首址必須為0x400的整數(shù)倍,本文采用0x00C800。

            從以上基本原理的分析可看出,程序升級(jí)功能的實(shí)現(xiàn)主要就是引導(dǎo)程序的實(shí)現(xiàn)。


          上一頁 1 2 3 下一頁

          關(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); })();