打印

建议做为2008年1月的专题----软件抗干扰的方法研究

[复制链接]
楼主: emailli
手机看帖
扫描二维码
随时随地手机跟帖
21
谈的元| | 2008-1-1 14:26 | 只看该作者 回帖奖励 |倒序浏览

楼上对,0x21就是一个寄存器

使用特权

评论回复
22
jack.king| | 2008-1-2 09:27 | 只看该作者

用C写程序就不需要考虑什么问题了啊?

近来发现已经用汇编写的程序出现了乱跳的现象
 但是用C写后就没有问题了.
   程序实现的功能都是一样的.但是不知道为什么有这样的区别????

使用特权

评论回复
23
gyt| | 2008-1-2 11:52 | 只看该作者

22楼的问题

可能是有些变量在使用上没有考虑周到

也可能是进出子程序时没有做好

C的变量位置不是你指定的,所以不会有这种问题

使用特权

评论回复
24
一朝成名| | 2008-1-2 13:37 | 只看该作者

这个论题不错,俺一个菜鸟的看法

冗余就是NOP。。。。。现在基本用不到了 很多单片机都是单指令的啊

关于陷阱   看有没有必要了,不是特别紧要关头的话有看门狗就可以了

陷阱写不好反把自己陷进去了呵呵。。。。。

软件有很多纠错的方法这点学习下很有益处的,现在还没找到专门次类的书。

三重纠错,一些简单的验证算法 什么的还是常需要用的

RE12楼,写的是:“标准错误”的陷阱写法

关于次方面的内容建议看下周航慈的《单片机程序设计》





使用特权

评论回复
25
goothin| | 2008-1-3 15:02 | 只看该作者

关于C的软件陷阱

一般编译器会自动加上的

使用特权

评论回复
26
救火车| | 2008-1-3 17:49 | 只看该作者

寄存器和内存的数据要动态校验和刷新

所有的寄存器和内存都有可能被改。
关键数据要动态校验,关键寄存器也要有检查修正的方法。

使用特权

评论回复
27
Swd21ic| | 2008-1-3 20:45 | 只看该作者

!!!

...
软件抗不了干扰吧..

很难做实质性的东西,把容错性做好就不容易了..而且也会加大系统开销..

使用特权

评论回复
28
goothin| | 2008-1-4 08:31 | 只看该作者

re:18楼

如果不稳定时,如在芯片的工作电压上下时,肯定会出现在程序跑飞的现象。

使用特权

评论回复
29
emailli|  楼主 | 2008-1-4 10:42 | 只看该作者

RE 28楼

在芯片工作电压上下

你的复位电路干什么去了?

还不复位?

此时还要程序运行干什么?

使用特权

评论回复
30
救火车| | 2008-1-5 00:26 | 只看该作者

软件抗干扰很重要。

这点不用讨论吧。

使用特权

评论回复
31
emailli|  楼主 | 2008-1-5 13:52 | 只看该作者

看是抗哪方面的干扰了

比如电压已经低于单片机正常工作的电压了

此时的软件抗干扰就没有任何意义了

应该改进你的硬件电路

比如 设置合理的 低电压复位 门限值

如果连供电都保证不了了。软件抗干扰有用么?

使用特权

评论回复
32
dld2| | 2008-1-5 13:56 | 只看该作者

首先要把现象和原因了解清楚,然后才谈得上解决

使用特权

评论回复
33
mugenwon| | 2008-1-6 00:04 | 只看该作者

我也插嘴说说

程序一大,特别是那种有通讯,然后一大堆状态的的时候,本人就因为这个问题想了很久结果不了了之。

比如说,2个CPU用SPI来通讯,然后又有令一个CPU与他们当中一个用UART通讯,而这个时候要自己写通讯协议的话,那就麻烦了。很多时候发送数据包,发送途中因为种种无法预料的原因,数据包缓冲区被改了,于是发送的东西就变得模棱两可。这应该算是一种所谓的软件干扰吧?

处理只能这样:发送时不准更新数据缓冲区。更新时不准发送。
但又会有问题:假如某些数据是不能等的,收到一定要保存,有些又一定要按时发送,这就麻烦了,只好把收到的或者要发的排列起队伍来!发完一个下一个,但是,你能保证存放数据的缓冲区足够吗?是放多一个,还是2个,还是多少个?另外如果状态改变了,这队列里面的数据还能不能用等.

这样就越来越复杂,我没研究过windows的消息指令队列,我看这种情况要用那种消息处理机制才能完美解决了。

使用特权

评论回复
34
双壳蜗牛| | 2008-1-6 17:23 | 只看该作者

陷井程序

隅而可以用到的程序,拿出来和大家讨论一下,和12楼的差不多,但更详细一些ORG 0000H
       LJMP MAIN
       ORG 0003H
       LJMP PGINT0
       NOP
       NOP
       LJMP ERR
       ORG 000BH
       LJMP PGT0
       NOP
       NOP
       LJMP ERR
       ORG 0013H
       LJMP ERR              ;未使用
       NOP
       NOP
       LJMP ERR
       ORG OO1BH
       LJMP ERR            ;未使用
       NOP 
       NOP
       LJMP ERR
       ORG 0023H
       LJMP ERR        ;未使用
       NOP
       NOP
       LJMP ERR
  MAIM:
  ERR:nop
    nop
    push    00h
    push    00h
    reti 

使用特权

评论回复
35
sz_kd| | 2008-1-6 18:03 | 只看该作者

呵呵,期待好的方法出现

使用特权

评论回复
36
谈的元| | 2008-1-6 18:13 | 只看该作者

呵呵,与火车还是有共同的认识

使用特权

评论回复
37
mohanwei| | 2008-1-6 20:30 | 只看该作者

软件抗干扰?有没有搞错……硬件抗干扰才是硬道理


当然了我这里说的干扰是致命的那种……

使用特权

评论回复
38
农民讲习所| | 2008-1-7 15:41 | 只看该作者

软件抗干扰,是误区

大家说的,都是软件结构差的问题,比如接收个串口数据或发生什么事件,软件死机,这和干扰什么的没关系,和设计理论有关。

只要软件发生BUG,软件就是不可靠的!,即使你想用软件来修复软件:软件陷阱什么的.保证好良好的程序结构,能及时响应复位请求,才对。

骗人的方式俺小时候经常这样做:电机启动,MCU死机,不想改硬件,拼命在软件上做**,只要出去没表现出来就行。俺做过这档事,长大后就转成白道了。这是不是和卖白菜的类似:有化肥的白菜,洒上点水,显得光溜溜的。又或者把大米用白腊熏熏,只要能卖出去,

使用特权

评论回复
39
yewuyi| | 2008-1-7 16:06 | 只看该作者

俺在8楼就发现走错门了~~

软件抗干扰其实叫着软件的容错性或完整性更正确一点,例如代码不对数据越界判断这个问题,你说是抗干扰问题还是完整性问题呢?

你的板子在那不停的RST,你再牛的代码也跑不了……

加陷阱,加冗余,加拆分等都只是辅助看门狗能唤醒‘植物人’的,如果说那是抗干扰到也有点道理,但个人感觉不太完整把。

个人认为,硬件是保证你的产品在实际使用环境中可靠运行的保证,这个实际使用环境当然不能指个体,而是指一种类型,人们为此发明了测试标准,在某一类产品中,通过这些测试标准就可以视为可以满足在实际使用环境中可靠运行,但因为测试标准中的干扰强度是不能无穷增长的,所以超过这个测试标准的干扰因为没有测试设备确定它是否可以承受,所以此时就需要增加看家的狗来应对或尽量解决这个问题,诸如屏蔽、隔离等手段均可视为辅助的可靠手段,但前提就是你的硬件在可测试的使用环境中能可靠运行。

否则就是:硬件被干扰的不停RST,你再牛的代码也是‘寸步难行’

当然,这都是俺片面理解,上次HOTPOWER和那个OS的牛人可能就不太同意俺的观点,不过俺个人认为,能做到俺理解的这几点,做个合格的电子工程师应该问题不大,也许他们的境界更高的原因把,就持续思考中把……

使用特权

评论回复
40
一朝成名| | 2008-1-8 10:55 | 只看该作者

俺的小小看法

一方面:程序整个架构和算法的合理性。
        在做程序的时候要保证函数的健壮、透明。
        不给其他的函数和结构产生不良影响,做好清洁工作。
        
另一方面:在跟硬件接口的程序可以加一些纠错或者验证代码
          例如E2,在实时要求不高的情况下加一些代码也不碍什么事,比较简单的方法采取多读,多写,读/写在不同位置,读完以后可以比较和验证,这样下来最起码可以提高一点抗干扰能力。如果有一些更高级的算法那是更好的了。

      在做完硬件抗干扰后,软件上也要做到尽可能的提高可靠性。
          


使用特权

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

本版积分规则