MCU中填充未使用程序空間的方法討論
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在使用Microchip的8位PIC單片機(jī)中,如何使用XC8 編譯器用已知值填充未使用的程序存儲(chǔ)器,而不保持默認(rèn)的0x3FFF呢?這是一個(gè)網(wǎng)友經(jīng)常問的問題,那么今天我們就此話題展開討論。
這里給大家推薦使用編譯器自帶的--FILL 驅(qū)動(dòng)選項(xiàng),它可以允許您使用已知數(shù)字值填充未使用的程序內(nèi)存。
具體而言,您可以在MPLAB® X IDE > XC8 Project Properties > XC8 Linker > Fill Flash Memory 下拉菜單中選擇訪問此選項(xiàng),然后在填充字段中輸入適當(dāng)?shù)膮?shù)即可,如圖1所示。
圖1 填充FLASH空間的選項(xiàng)設(shè)置
究其根本,此選項(xiàng)是利用XC8所帶的Hexmate 應(yīng)用程序工具,來填充未使用的位置,鑒于這個(gè)原因,它僅適用于十六進(jìn)制的HEX 文件處理,它不會(huì)填充二進(jìn)制文件格式的代碼。
圖2 填充FLASH空間的選項(xiàng)實(shí)現(xiàn)格式
圖3 填充FLASH空間的選項(xiàng)示例
上述示例,將未使用FLASH空間以0x3FFF來填充,因此這個(gè)結(jié)果和默認(rèn)的未使用空間一致。
圖4 填充FLASH空間的說明
從圖4說明來看,這個(gè)選項(xiàng)主要有幾個(gè)參數(shù)值得注意,首先是填充的內(nèi)容,填充的變化形式,填充的地址范圍。
圖4中的第一個(gè)示例顯示,使用常數(shù)0xBEFF來填充所有未使用FLASH空間。第二個(gè)示例顯示,采用以0xBEFF為基準(zhǔn)值,逐步加1的形式,來填充未使用FLASH空間。
第三個(gè)示例顯示,使用以0xBEFF為基準(zhǔn)值,逐步遞減0x10的方式填充未使用FLASH空間。
第四個(gè)示例顯示,使用一個(gè)重復(fù)的常數(shù)序列,來填充整個(gè)未使用的程序FLASH空間。這些方式選項(xiàng)的執(zhí)行,都可以在編譯器選項(xiàng)中去設(shè)置。
我們以圖1為例,如下方式,去填充所有未使用空間為0x3333這個(gè)值,而默認(rèn)值是0x3FFF.
圖5 填充后的FLASH MEMORY顯示
可以看出未使用空間被填充為了0x3333,和預(yù)期一致。除了填充所有的未使用FLASH空間的形式之外,也可以使用選項(xiàng)去設(shè)定僅僅填充部分地址范圍的未使用FLASH空間,如圖6說明。
圖6 部分FLASH未使用空間填充定義
上述定義可知,使用@unused參數(shù)表示填充所有的未使用FLASH空間,而上圖第二個(gè)示例表示,在其中一個(gè)地址0x1000處填充為常數(shù) fill_expr,注意這里,也可以填充一個(gè)單個(gè)地址為某一個(gè)常數(shù)。
上述示例3中采用@0:0xFF表示在0-0xFF地址范圍內(nèi)填充0xBEFF常數(shù),這就是一個(gè)FLASH地址范圍的填充形式。
圖7 部分未使用地址空間填充為常數(shù)的設(shè)置
這里表示從0x500到0x600之間的地址空間中的未使用FLASH空間被填充為0x3333.
圖8 地址范圍內(nèi)未使用空間填充1
可以看出,在0x500,到0x600的FLASH地址范圍內(nèi),未使用的空間變?yōu)?/span>0x3333,其中部分空間已經(jīng)被代碼占用。
圖9地址范圍內(nèi)未使用空間填充2
從圖9來看,截止到0x600 Flash地址,未使用空間都被給填充為了0x3333,但是后面的更大的地址處的未使用空間,還是保持為默認(rèn)的0x3FFF.
另外,值得一提的是,在FLASH MEMORY窗口,也可以右鍵直接更改Hex數(shù)據(jù)并進(jìn)行填充,但是這里并未使用編譯器選項(xiàng)。
圖10 在FLASH MEMORY窗口進(jìn)行FLASH空間直接填充改寫Hex
圖11 在FLASH MEMORY窗口進(jìn)行FLASH空間直接填充改寫Hex示例
圖12 直接對(duì)Hex進(jìn)行填充更改
由上圖12可知,指定范圍內(nèi)的FLASH空間被直接填充為0x0000,當(dāng)然還有更多的操作方式,這里就不一一去說明,有興趣的朋友可以去嘗試。
以上介紹了基于PIC16的單片機(jī)如何進(jìn)行未使用的程序空間進(jìn)行填充期望值的方法,如有更多問題,可以關(guān)注公眾號(hào)后添加作者微信進(jìn)行交流。





