搜索
bottom↓
回复: 17

单片机FLASH空白区如何处理防止程序跑飞

[复制链接]

出0入0汤圆

发表于 2020-3-1 17:02:28 | 显示全部楼层 |阅读模式
各位大侠
        今天遇到一个问题,以前从来没想过,就是在使用单片机(MC9S08)的时候,如果程序指针由于故障跑到了FLASH的空白区,

一般空白区默认是0xff,这个时候程序故障,我认为看门狗就会动作重启单片机。
       
        但是请问有没有办法可以对空白区进行处理,而不需要看门狗就能回到正常工作状态,或者重启状态。
        或者请问大家一般是怎么处理这个问题的。
        谢谢

        (我所知道的就是我可以通过程序对flash的空白区直接写一写值进去,比如00或者其他值. 但是不知道MC9S08这个系列遇到这些值会怎么响应。)

出0入0汤圆

 楼主| 发表于 2020-3-1 17:12:10 | 显示全部楼层
这个是我刚才在网上找到的51的说明

不要用跳转指令填充空白区,因为跳转指令不是单字节指令,意外跑飞时,没法保证取指时取到哪个字节,会有什么效果。
通常51程序的空白部分保留为00就行,或者FF也行,00中NOP指令,FF是 MOV A, R7,注意,这两个指令都是单字节单周期的指令。
遇到程序跑飞的情况时,CPU可能会从空白区取指,取到NOP并执行,因为51的指令最多只有64K,顶多执行64K个周期,PC就会转回到复位地址0000处执行。

请问MC9S08是怎么运行的 ,有大侠知道吗?

出0入33汤圆

发表于 2020-3-1 17:29:07 来自手机 | 显示全部楼层
写满reset指令啊

出0入0汤圆

 楼主| 发表于 2020-3-1 17:33:03 | 显示全部楼层
vtte 发表于 2020-3-1 17:29
写满reset指令啊

有道理
正在找相应资料

出0入442汤圆

发表于 2020-3-1 17:38:53 来自手机 | 显示全部楼层
dongdaxing 发表于 2020-3-1 17:12
这个是我刚才在网上找到的51的说明

不要用跳转指令填充空白区,因为跳转指令不是单字节指令,意外跑飞时 ...

万一某些地址没有外设给响应就完蛋了。。会彻底卡住。我做fpga soc就出现过多次这种情况。固件代码得非常仔细的写。

出0入4汤圆

发表于 2020-3-1 17:39:36 | 显示全部楼层
写reset指令,其实芯片遇见处理不了的指令,都是会产生中断的

出0入0汤圆

 楼主| 发表于 2020-3-1 17:42:00 | 显示全部楼层
dongdaxing 发表于 2020-3-1 17:33
有道理
正在找相应资料

刚看了指令集和指令马集

填充 NOP 就可以了
0x9d

谢谢
解决了

出0入0汤圆

 楼主| 发表于 2020-3-1 17:44:28 | 显示全部楼层
vtte 发表于 2020-3-1 17:29
写满reset指令啊

rest 可能不行 应为没有单字节的这个指令 也许我没有找到
因为多字节指令的的话 第一次不知道跳到哪里(网上讲的我觉得是有道理的)
所以我觉得就填写NOP吧  

出0入0汤圆

 楼主| 发表于 2020-3-1 17:45:39 | 显示全部楼层
laujc 发表于 2020-3-1 17:39
写reset指令,其实芯片遇见处理不了的指令,都是会产生中断的

请问 一般单片机的话 会产生什么中断
能介绍点资料看看吗
自己以前从来没注意过这方面的问题
可能做得太少了

出0入0汤圆

发表于 2020-3-1 18:06:14 | 显示全部楼层
楼主想多了,你应该考虑如果不跑到空白区去。而不是跑到空白区再跳回来。
正如前面是硫酸池,进去如何救生,还不如考虑下怎么会跳进去,绝对避免。

出0入93汤圆

发表于 2020-3-1 18:28:14 | 显示全部楼层
dongdaxing 发表于 2020-3-1 17:42
刚看了指令集和指令马集

填充 NOP 就可以了

呵呵,依赖填充NOP具有巨大的隐患,此时中断还开着,NOP跑一圈重新开始后内存初始化完成后中断来了改了内存数据咋办?
你首先要想的是如何防止进入到空白区而不是去补救

出0入4汤圆

发表于 2020-3-1 18:44:09 | 显示全部楼层
dongdaxing 发表于 2020-3-1 17:45
请问 一般单片机的话 会产生什么中断
能介绍点资料看看吗
自己以前从来没注意过这方面的问题

不知道你使用的是哪种芯片,按道理处理方式应该是一样的。
以我比较熟悉的renesas芯片为例,见下表,指令错误是有专门中断入口的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-3-1 18:55:16 | 显示全部楼层
楼主你搞错了,不应该用NOP指令。我也比较熟悉瑞萨的芯片,下面说下我的经验:
1.空白区域写满非法指令,比如瑞萨的非法指令是0xff,当然空白也是0xff,刚好运行到空白区域会引起非法指令的复位。
2.开启低电压检测,电压再复位电平附近波动的时候最容易跑飞。开启低电压检测,电压波动到一定值就复位。
3.处理号reset电路。
4.电源,掉电是减少振荡。瑞萨的功耗比较低,有大电容时掉电非常慢,一定要设计好电路。
以上2,3,4都是碰到过实际问题的。程序跑飞严重的可能会擦掉内部Flash,内部有操作Flash的程序时。

出0入0汤圆

 楼主| 发表于 2020-3-1 19:19:13 | 显示全部楼层
takashiki 发表于 2020-3-1 18:28
呵呵,依赖填充NOP具有巨大的隐患,此时中断还开着,NOP跑一圈重新开始后内存初始化完成后中断来了改了内 ...

谢谢

我现在要解决的问题: 前提就是假设程序到了空白区 如何自救

出0入0汤圆

 楼主| 发表于 2020-3-1 19:20:46 | 显示全部楼层
夏日么么茶 发表于 2020-3-1 18:55
楼主你搞错了,不应该用NOP指令。我也比较熟悉瑞萨的芯片,下面说下我的经验:
1.空白区域写满非法指令,比 ...

谢谢 我去找下资料 看看 MC9S08 有没有非法指令复位这个功能
如果您知道的话 能够告知哪里可以找到相关资料 谢谢

出0入0汤圆

 楼主| 发表于 2020-3-1 19:22:05 | 显示全部楼层
takashiki 发表于 2020-3-1 18:28
呵呵,依赖填充NOP具有巨大的隐患,此时中断还开着,NOP跑一圈重新开始后内存初始化完成后中断来了改了内 ...

谢谢

你说的是对的 ,避免进入是一方面

但是我现在需要解决的问题是 进入空白区后怎么办

出0入0汤圆

发表于 2020-3-1 19:22:12 | 显示全部楼层
dongdaxing 发表于 2020-3-1 19:20
谢谢 我去找下资料 看看 MC9S08 有没有非法指令复位这个功能
如果您知道的话 能够告知哪里可以找到相关资 ...

看芯片的软件手册或者叫指令手册。

出0入0汤圆

发表于 2020-3-1 19:38:39 | 显示全部楼层
总感觉外置看门狗才比较可靠.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 06:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表