打印

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

[复制链接]
楼主: emailli
手机看帖
扫描二维码
随时随地手机跟帖
101
程序匠人| | 2008-1-22 11:25 | 只看该作者 回帖奖励 |倒序浏览

jjg 晚了一步,呵呵。匠人补偿你一下


给你推荐一个即将封顶的。200楼,天高云淡,谁抢归谁。
 
匠人DIY旋转时钟全程实播(2008-01-20最新进展:串口通讯调试成功(附心得体会)见179楼) 

使用特权

评论回复
102
5880527| | 2008-1-24 18:00 | 只看该作者

碰到牛人了哈

使用特权

评论回复
103
qingping| | 2008-1-27 08:38 | 只看该作者

都是要提高系统可靠性

无论是软件抗干扰还是硬件抗干扰,目的都是提高系统的可靠性。为了完成系统可靠性的目标,我们需要从软件和硬件两方面着手,穷尽所有手段。此处只有功能的实现是不够的,我们还需要处理大量的异常情况,如电压跌落、信号干扰变形、MCU失效等等等等,处理这些异常情况有的需要从硬件方面着手即叫硬件抗干扰,有的需要从软件方面着手即可以叫软件抗干扰。

名词并不重要,如果我们的产品要进入市场而不只是研究使用,我们就会用到这两种方式。

我们只需要系统的可靠性!

MYHOME:http://czl00czl.googlepages.com

使用特权

评论回复
104
liqimcu| | 2008-1-28 11:05 | 只看该作者

RE:16楼说的还是不太明白

16楼的意思是循环执行N次就把寄存器刷N次,而非在循环开始前只给寄存器赋值一次

使用特权

评论回复
105
ldy216| | 2008-1-29 11:39 | 只看该作者

建议大家看看我的帖子,我的结构可以解决你们所有的问题

  这些朋友都谈了自己的观点,很多朋友都是站在自己的结构上作了些技术处理而已,没有站到一个更高的高度来谈论软件本身的问题。他们确实做得也非常好。但若要推广到所有程序,显然是不行的。
  我发的两个贴子能绝大部分的解决你们说的问题。
  关于软件与硬件的结合问题,我会在后面继续发贴作补充,这必须要同时懂软件硬件的人才会真正明白。
 QQ:184324486

使用特权

评论回复
106
LastNew| | 2008-1-29 12:22 | 只看该作者

ls高人

所长、老hot来对手了,嘿嘿

使用特权

评论回复
107
luis.yun1| | 2008-1-30 20:52 | 只看该作者

越看越迷糊了

搞不懂啥是抗干扰,啥是容错了

使用特权

评论回复
108
yinmu| | 2008-2-2 10:20 | 只看该作者

请问怎样解决?

#include <iom48.h>
#include <inavr.h>

unsigned int count;
unsigned long sum;
unsigned long error;
unsigned char flag;

#pragma vector = TIMER1_COMPA_vect
__interrupt void my_interrupt_routine(void) //定时中断
{
    count++;        //count = 251~260
    
    if(count > 260)
    {
        count = 251;
    }
    
    flag = 1;
    
}

void tmr1_ini() ////定时中断初始化
{
    TCNT1  = 0x00;
    
    OCR1A  = 80;
    TIMSK1 = 0x02;
    
    TCCR1A = 0x00;
    TCCR1B = 0x09;
}

void main(void)
{
    count = 251;
    sum = 0;
    error = 0;
    
    tmr1_ini();
    __enable_interrupt();
    
    while(sum < 100000)
    {
        if(flag > 0)
        {
            sum++;
            flag = 0;
        }
        
        if(count > 250)         //count = 251~260
        {
            __delay_cycles(2);  //按理一定执行这句话
        }
        else
        {
            error++;            //但实际上有一定的机率会执行这句话
        }
    }
    
    
    while(1)                    //下断点,看error的数值
    {
        __delay_cycles(2);
        __delay_cycles(2);
        __delay_cycles(2);
    }
}


大家想这程序出问题的原因是什么
想想这个程序改进的方法是什么
想通了这个也许对大家有点帮助 

使用特权

评论回复
109
gong7350| | 2008-2-3 11:55 | 只看该作者

关注中,做个记号

使用特权

评论回复
110
HEFENGWEI| | 2008-2-12 13:41 | 只看该作者

我想问一句

  程序中中断的次数很多对程序的稳定性有没有影响.一秒钟要发生2000次中断也就是每500US就要中断一次.每次的中断服务程序的处理时间问200US.主程序的处理时间与中断的时间比例为3:2不知道这样能不能保证程序在高速的运行中稳定.

使用特权

评论回复
111
emailli|  楼主 | 2008-2-13 08:48 | 只看该作者

我觉得是有影响

除非你就只有这么一个中断源

否则,多个中断源的 情况下,500微秒的中断频率,很容易发生死机的情况的。

使用特权

评论回复
112
zenyin| | 2008-2-16 21:25 | 只看该作者

我一直采用的方法

当PC指针指向数据场后,运行轨迹不可跟踪将使系统导入一个不可预知的区域从而死机.
第一:如果所有的程序都是单字节的时候,飞跑从理论上不会产生
第二:如果数据区域永远也不能解释成,分支循环中断等非顺序运行指令时程序出错将只限于一个功能程序块内,这样我们完全可以加NOP NOP NOP LJMP "出错处理"这软件陷阱把它捕获到,而且其恶劣性可以局限在一个程序块内!
第三:那些数据可能被误翻译成"非顺序运行"呢?
1.01H 11H ......0F1H -----AJMP ACALL
2.02H 12H 22H 32H         LJMP LCALL RET RETI
3.10-20-------80H         JBC BIT,REL--------SJMP REL
4.0B4-0B5-0B6----------0BFH   CJNE A,# CJNE @RI,# CJNE RN,#
6.0D5H 0D8-------------0DFH   DJNZ 地址,REL DJNZ RN,REL
8.73H  JMP @A+DPTR
第四:怎么在上述程序中不产生上述"非法数字"
一个例子典型梦中人:MOV A,#02H 指令机器码 7402  如果指针指向02H将和后面的指令数据一起被翻译成跳转---LJMP "不知道什么地方"
我们这样用:MOV A,#03H DEC A  呵呵怎么样前面怎么运行都跑不出去,后面又是单字节
就到这里吧!

使用特权

评论回复
113
xushouxue| | 2008-2-21 09:44 | 只看该作者

路过 都是高手

使用特权

评论回复
114
stillywud| | 2008-2-21 22:22 | 只看该作者

重要

软件抗干扰应该是很重要的..

使用特权

评论回复
115
wayner| | 2008-2-24 20:04 | 只看该作者

关心的人很多

使用特权

评论回复
116
5_0_5| | 2008-2-24 20:11 | 只看该作者

楼还在长啊

使用特权

评论回复
117
luying7223| | 2008-2-27 09:00 | 只看该作者

见过程序跑飞现象

我们公司使用的产品中见过程序跑飞的现象,但不是很理解,最近单片机编程正在狂补中,望高手指教能够浅显易懂..........

使用特权

评论回复
118
ayl439| | 2008-2-28 00:14 | 只看该作者

学习了!~

学习了!~

使用特权

评论回复
119
hlgboy| | 2008-3-27 21:56 | 只看该作者

可不可以在烧写片子的时候把空白区写上跳转指令呢?

使用特权

评论回复
120
elec921| | 2012-4-19 21:53 | 只看该作者
mark

使用特权

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

本版积分规则