新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Bootloader技術(shù)在數(shù)字信號(hào)控制器中的應(yīng)用

Bootloader技術(shù)在數(shù)字信號(hào)控制器中的應(yīng)用

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

6 程序編寫(xiě)

6. 1 dsPIC30F系列器件存儲(chǔ)空間的分配

在編寫(xiě)程序之前, 我們必須首先了解芯片的程序存儲(chǔ)空間分配情況。dsPIC30F 系列芯片包含144K字節(jié)的FLASH 程序存儲(chǔ)空間, 尋址范圍為0x0000100~ 0x017FFE, 圖1 ( a)為dsPIC30F系列芯片的程序存儲(chǔ)器地址映射情況。

0x00~ 0x03地址單元是復(fù)位向量; 0x04~ 0xFE地址單元是中斷向量表和后備中斷向量表( IVT /A IVT) ; 在其后的0x100~ 0x17FFE單元為48K指令字的用戶閃存程序存儲(chǔ)器。原則上, Boot loader程序可以放在整個(gè)程序空間中的任何位置, 但是為了簡(jiǎn)單方便、具有通用性和盡量減少對(duì)用戶程序的影響,本設(shè)計(jì)使用了0x100 ~ 0x4FE 的一段程序存儲(chǔ)器( Boo tloader程序與用戶程序的代碼總量不能超過(guò)144KB)。程序后面便可存放用戶程序,但是受到FLASH 存儲(chǔ)器頁(yè)的限制, 用戶程序不可緊跟在Boo tloader程序之后, 它必須從下一個(gè)FLASH存儲(chǔ)器頁(yè)的開(kāi)始處(如0x500) 存放, 如圖1 ( b) 所示。

程序存儲(chǔ)器地址映射
圖1 程序存儲(chǔ)器地址映射

6. 2 . hex文件的解析

當(dāng)dsPIC30F系列的程序編寫(xiě)完成之后, 利用開(kāi)發(fā)平臺(tái)MPLAB IDE編譯后會(huì)生成一個(gè). hex 文件, 將這個(gè). hex 文件燒寫(xiě)到FLASH 存儲(chǔ)器中系統(tǒng)才能運(yùn)行, 因此要完成的任務(wù)就是將這個(gè). hex 文件下載到目標(biāo)系統(tǒng)中。如果直接從PC 端將. hex 文件中的全部?jī)?nèi)容發(fā)送給下位機(jī), 就需要Boot loader程序來(lái)解析提取要寫(xiě)入存儲(chǔ)器的數(shù)據(jù), 這樣做勢(shì)必加大Boo tloader程序代碼長(zhǎng)度, 也會(huì)影響整個(gè)Boo tloader過(guò)程的時(shí)間, 因此本設(shè)計(jì)采用在PC機(jī)端程序解析. hex 文件的方法。為了正確地將這個(gè). hex文件下載到下位機(jī)中必須對(duì). hex 文件有一個(gè)比較深入的了解。. hex文件的格式如下:

: BBAAAATTHHHH……HHCC

BB: 二位16 進(jìn)制值, 表示該幀數(shù)據(jù)的字節(jié)長(zhǎng)度。

AAAA: 四位16 進(jìn)制值, 表示隨后數(shù)據(jù)的起始地址, 該地址為字節(jié)地址。

TT: 二位16進(jìn)制值, 表示數(shù)據(jù)幀類(lèi)型( 00 : 數(shù)據(jù)幀; 01 : 結(jié)束幀; 04 : 擴(kuò)展地址幀)。

HH: 16進(jìn)制值, 表示具體的數(shù)據(jù), 即具體程序代碼。

CC: 二位16進(jìn)制的校驗(yàn)碼, 使該幀全部以二位16進(jìn)制相加后總和為0。

一個(gè). hex 文件可分為5部分代碼: 復(fù)位向量代碼、程序代碼、中斷向量代碼、后備中斷向量代碼和結(jié)束代碼, 除結(jié)束代碼僅含結(jié)束幀外, 其余各部分代碼都由擴(kuò)展地址幀和數(shù)據(jù)幀組成, 其中僅數(shù)據(jù)幀存儲(chǔ)了用戶程序信息。因此PC 機(jī)端程序僅保留擴(kuò)展地址幀和數(shù)據(jù)幀的內(nèi)容并按順序進(jìn)行發(fā)送即可, 下位機(jī)接收數(shù)據(jù)后根據(jù)擴(kuò)展地址幀可以直接將用戶代碼寫(xiě)入FLASH 存儲(chǔ)器相應(yīng)的地址單元中, 從而提高了整個(gè)Bootloader的效率。



評(píng)論


相關(guān)推薦

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

關(guān)閉