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





