|
发表于 2010-3-28 15:00:40
|
显示全部楼层
马老师可能理解错了,对51来说PC收到干扰后PC时任意数,不管PC等于多少,PC指向的数据是指令,到底按3字节指令运行还按1字节或2字节运行,要看PC指向的第一个字节,如果3个NOP连着,这个位置只要被PC命中次位置,那么PC就归位了,最起码会判断第4字节数据了, 下面指令是跳转也好,是调用也好,只要程序编写严密,里面包含参数检查,状态判断等,程序发现运行异常的可能性是很大的
软件抗干扰是可以解决一些问题的,但不是几个NOP就可以解决的
我曾经提过,我可以做一个绝对不死机的小系统,到今天还有人不相信
我讲讲我的方法,给某些人一些启发,我的方法是让单片机不停复位,然后以单片机复位频率做系统事件Tick, 每个Tick单片机干一件事或几件事
单片机上电复位后,单片机再次复位,不管看门狗,外部复位等等,内部RAM内容基本不变,那就把单片机工作步骤和状态保存到RAM,必须加状态校验,最好是CRC,这样能防止单片机收到干扰后发生RAM位翻转,CRC可以发现重要的RAM区有bit干扰了,那就启动默认参数运行
我做的系统一般是单片机1秒中复位4次,最快也不超过10次, 这样的系统需要硬件稍作配合,单片机复位期间,继电器不可以跳变,LCD不可以闪动,LED不可以闪动,蜂鸣器不可以叫等等, 这都可以通过一些电阻电容等处理
根据单片机不同,单片机复位时间不等,有的只需要几个us,有的需要几毫秒,几us的最好用,我们的AVR复位时间是可以调到1ms(上电复位除外),可以将就用
在复位器件单片机不会执行任何代码,所有控制会放开自然状态,这时候要通过硬件保持控制不乱,复位后直接处理控制IO,然后处理Tick事物,处理谁要根据保存到RAM的状态来判断了,处理完后安排下一个Tick的事物,要不直接复位,要不等待复位
复位源,可以是内部看门狗,要不是外部触发器==
以AVR为例,把看门狗调节到250ms左右,硬件打开看门狗,你的软件里不要有任何喂狗程序,那么单片机的复位Tick就是1/4秒了 |
|