首页/文章/ 详情

MCU中填充未使用程序空间的方法讨论

1年前浏览2026

大家好,我是电源漫谈,在使用Microchip8PIC单片机中,如何使用XC8 编译器用已知值填充未使用的程序存储器,而不保持默认的0x3FFF呢?这是一个网友经常问的问题,那么今天我们就此话题展开讨论。

这里给大家推荐使用编译器自带的--FILL 驱动选项,它可以允许您使用已知数字值填充未使用的程序内存。  

具体而言,您可以在MPLAB® X IDE > XC8 Project Properties > XC8 Linker >Fill Flash Memory 下拉菜单中选择访问此选项,然后在填充字段中输入适当的参数即可,如图1所示。  

1 填充FLASH空间的选项设置  

究其根本,此选项是利用XC8所带的Hexmate 应用程序工具,来填充未使用的位置,鉴于这个原因,它仅适用于十六进制的HEX 文件处理,它不会填充二进制文件格式的代码。  

图2 填充FLASH空间的选项实现格式  

3 填充FLASH空间的选项示例  

上述示例,将未使用FLASH空间以0x3FFF来填充,因此这个结果和默认的未使用空间一致。  

4 填充FLASH空间的说明  

从图4说明来看,这个选项主要有几个参数值得注意,首先是填充的内容,填充的变化形式,填充的地址范围。  

4中的第一个示例显示,使用常数0xBEFF来填充所有未使用FLASH空间。第二个示例显示,采用以0xBEFF为基准值,逐步加1的形式,来填充未使用FLASH空间。  

第三个示例显示,使用以0xBEFF为基准值,逐步递减0x10的方式填充未使用FLASH空间。  

第四个示例显示,使用一个重复的常数序列,来填充整个未使用的程序FLASH空间。这些方式选项的执行,都可以在编译器选项中去设置。  

我们以图1为例,如下方式,去填充所有未使用空间为0x3333这个值,而默认值是0x3FFF.

5 填充后的FLASH MEMORY显示  

可以看出未使用空间被填充为了0x3333,和预期一致。除了填充所有的未使用FLASH空间的形式之外,也可以使用选项去设定仅仅填充部分地址范围的未使用FLASH空间,如图6说明。  

6 部分FLASH未使用空间填充定义  

上述定义可知,使用@unused参数表示填充所有的未使用FLASH空间,而上图第二个示例表示,在其中一个地址0x1000处填充为常数 fill_expr,注意这里,也可以填充一个单个地址为某一个常数。  

上述示例3中采用@00xFF表示在0-0xFF地址范围内填充0xBEFF常数,这就是一个FLASH地址范围的填充形式。  

7 部分未使用地址空间填充为常数的设置  

这里表示从0x5000x600之间的地址空间中的未使用FLASH空间被填充为0x3333.

8 地址范围内未使用空间填充1  

可以看出,在0x500,到0x600FLASH地址范围内,未使用的空间变为0x3333,其中部分空间已经被代码占用。  

9地址范围内未使用空间填充2  

从图9来看,截止到0x600 Flash地址,未使用空间都被给填充为了0x3333,但是后面的更大的地址处的未使用空间,还是保持为默认的0x3FFF.

另外,值得一提的是,在FLASH MEMORY窗口,也可以右键直接更改Hex数据并进行填充,但是这里并未使用编译器选项。  

10 FLASH MEMORY窗口进行FLASH空间直接填充改写Hex  

11 FLASH MEMORY窗口进行FLASH空间直接填充改写Hex示例  

12 直接对Hex进行填充更改  

由上图12可知,指定范围内的FLASH空间被直接填充为0x0000,当然还有更多的操作方式,这里就不一一去说明,有兴趣的朋友可以去尝试。  

以上介绍了基于PIC16的单片机如何进行未使用的程序空间进行填充期望值的方法,如有更多问题,可文底评论。



来源:电源漫谈
电源
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-10-18
最近编辑:1年前
仿真秀32093466624
硕士 签名征集中
获赞 89粉丝 75文章 166课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈