打印
[技术手册]

单片机可靠性差?可以弄个软件陷阱!

[复制链接]
292|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
robincotton|  楼主 | 2025-2-23 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、软件陷阱是什么?

软件陷阱是一种用于捕获并处理单片机程序“跑飞”现象的技术,当程序执行过程中因干扰而偏离正常轨道时,软件陷阱可及时发现并将程序拉回正常执行路径。

2、软件陷阱如何构建?
①未使用ERROM空间的填充
在程序存储器中未使用的EPROM空间,首先填入窄操作指令NOP(无操作指令)。
在NOP指令后,填入一条跳转指令LJMP,跳转到预设的跑飞处理程序(如FLY)。
若未使用空间较大,可均匀分布NOP指令和LJMP指令,形成“软件陷阱”。
②数据表及子程序间的陷阱设置
在数据表的结尾处设置软件陷阱,确保程序跑飞到数据区时能及时转入正轨。
若数据表较大,可在中间位置也设置软件陷阱。
在每两个子程序之间设置一个软件陷阱,以捕获可能的程序跑飞。
③中断服务程序中的陷阱
当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱。
这样能够及时捕获错误的中断,避免程序进一步失控。

3、代码示例

; 假设FLY为跑飞处理子程序的标签
FLY:
    ; 跑飞处理代码(如复位、重新初始化等)
    ; ...
    ; 跳转到正常程序执行起点
    LJMP START

; 未使用EPROM空间填充示例
NOP
NOP
LJMP FLY

; 数据表及子程序间陷阱设置示例
DATA_TABLE_END:
    NOP
    NOP
    LJMP FLY

SUB_PROGRAM1_END:
    NOP
    NOP
    LJMP FLY

SUB_PROGRAM2_START:
    ; 子程序2的代码
    ; ...

4、注意事项

软件陷阱的数量应根据实际干扰情况和程序存储器容量来确定。
陷阱的设置应尽可能均匀分布,以提高捕获程序跑飞的效率。
跑飞处理子程序应包含必要的复位或重新初始化操作,以确保程序能够恢复正常执行。

使用特权

评论回复
沙发
LOVEEVER| | 2025-2-23 21:49 | 只看该作者
软件陷阱是一种用于捕获并处理单片机程序“跑飞”现象的技术

使用特权

评论回复
板凳
小小蚂蚁举千斤| | 2025-2-23 22:16 | 只看该作者
数据表及子程序间的陷阱设置

使用特权

评论回复
地板
pe66ak| | 2025-3-7 13:48 | 只看该作者
其实MCU来说没必要,直接优化等级打开,再编译看看程序是否有问题就可以了

使用特权

评论回复
5
suiziq| | 2025-3-7 15:12 | 只看该作者
你可以考虑使用看门狗,试试,也许会有改善

使用特权

评论回复
6
miltk| | 2025-3-7 16:26 | 只看该作者
你这种软件陷阱确实给我提出了一个很好的创意

使用特权

评论回复
7
nuan11nuan| | 2025-3-7 17:39 | 只看该作者
一般来说,这种软件陷阱对MCU来说不合适,MCU本身的容量就不大的

使用特权

评论回复
8
清芯芯清| | 2025-3-7 18:51 | 只看该作者
你说的怎么有点像看门狗呢?

使用特权

评论回复
9
yuliangren| | 2025-3-7 20:01 | 只看该作者
这种可靠性差的话确实用看门狗就行了,但是你说的是程序防止跑飞的技术是么

使用特权

评论回复
10
teaccch| | 2025-3-7 22:28 | 只看该作者
建议就是用个外置看门狗,稳得很啊

使用特权

评论回复
11
gongqijuns| | 2025-3-8 09:34 | 只看该作者
就用看门狗吧,解决死机或者会重启的操作

使用特权

评论回复
12
canfeil| | 2025-3-8 12:09 | 只看该作者
不是很懂这句话“在程序存储器中未使用的EPROM空间,首先填入窄操作指令NOP(无操作指令)。在NOP指令后,填入一条跳转指令LJMP,跳转到预设的跑飞处理程序(如FLY)。若未使用空间较大,可均匀分布NOP指令和LJMP指令,形成“软件陷阱”。”

使用特权

评论回复
13
hhdhy| | 2025-3-8 13:47 | 只看该作者
就是开启看门狗吧,解决跑飞问题,然后配合芯片加密,更加稳定可靠

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

1405

帖子

1

粉丝