如何填充未使用的程序存储器

2020-02-08 09:26发布

怕程序跑飞,所以想把没使用的程序存储器空间填充,可是怎么填啊?高手指点!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
youmcu
1楼-- · 2020-02-09 09:38
fill   指定程序存储器填充值
    fill 伪指令可以将已知的数据强制连续自动填充到未用的程序存储器空间,被填充的可以是一个立即数,配合( )也可以是一条汇编指令。例:
    Fill    0x08,5                          ;从当前地址开始连续5个空间填为0x08数据
    Fill    (goto    main),.12      ;从当前地址开始连续12个空间填为goto  main指令
    源程序的长度一般不可能刚好与芯片的空间相等,所以都有一些程序空间没有被写上具体的指令代码(空白处),在单片机正常运行时这些地方是不会被执行到的。但在有干扰等的情况下程序跑飞正好落在这些非法指令处时,就有必要设置软件陷阱捕捉这些非法跳转,让程序恢复正常运行。例:
    Fill    (goto  $),NEXT-$        ;从当前地址开始到标号NEXT前所有程序空间填上goto $
    org     0x7f
    NEXT                            ;标号以下可继续写源程序
    Fill   (goto  $),1ff-$          ;从当前地址开始到1ff前所有程序空间填上goto $
    指令goto $是跳转到当前行的意思。一旦单片机执行到该指令即将进入死循环,直到看门狗复位程序从头开始执行,这是软件陷阱的最基本处理方法。软件陷阱的更多应用可参考单片机的抗干扰技术等资料。
hai198771
2楼-- · 2020-02-09 11:33
楼上的很专业,学习了
tt120834
3楼-- · 2020-02-09 14:43
 精彩回答 2  元偷偷看……
fsclub
4楼-- · 2020-02-09 16:35
一般是看机器指令跳到00地址的代码,把空白处FF全填成这个。
指令要短,太长了飞到半中腰也执行不了。
xfdr
5楼-- · 2020-02-09 22:28
回复【7楼】youmcu  
fill   指定程序存储器填充值
    fill 伪指令可以将已知的数据强制连续自动填充到未用的程序存储器空间,被填充的可以是一个立即数,配合( )也可以是一条汇编指令。例:
    fill    0x08,5                          ;从当前地址开始连续5个空间填为0x08数据
    fill    (goto    main),.12      ;从当前地址开始连续12个空间填为goto  main指令
    源程序的长度一般不可能刚好与芯片的空间相等,所以都有一些程序空间没有被写上具体的指令代码(空白处),在单片机正常运行时这些地方是不会被执行到的。但在有干扰等的情况下程序跑飞正好落在这些非法指令处时,就有必要设置软件陷阱捕捉这些非法跳转,让程序恢复正常运行。例:
    fill    (goto  $),next-$        ;从当前地址开始到标号ne......
-----------------------------------------------------------------------

回复【7楼】youmcu  
-----------------------------------------------------------------------
非常感谢,学习了。
abcabc2356
6楼-- · 2020-02-09 22:48
fill

一周热门 更多>