”变量的值被干扰改变“这种干扰的可能性大吗?

2020-01-10 19:40发布

问题的起因:有两块相同的板,STM32F103的,HEX程序是一样的,

一个接了变频器,一个是普通的电阻式温度传感器,运行的结果是,接了变频器的那块板运行一到二天就不通讯了,
象块砖一样,重启一下就OK。

但程序没有死,有看门狗设计,main程序中,控制了一个LED的闪烁,均正常,
串口收到信号,也能进中断。因为在串口中断中,会点亮一个LED,然后在一个100ms的定时中断中,这个LED会被关掉,这个LED的闪烁也正常。


接变频器板换过两次,问题依旧,项目在外地,一到二天出现一次,解决起来非常痛苦。想来想去,有没有这种可能性,比如某个值K1,
mail()
{
    K1=1;  
   while()
   {

  }
}

K1只是在起动初时赋值,也只有一次赋值,但经过长时间的运行,K1的值变成了其它数值,这种情况各位网友有无遇到过?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
36条回答
zhousun
1楼-- · 2020-01-14 00:59
觉得软件逻辑问题可能性大
wind2100
2楼-- · 2020-01-14 05:34
指针跑飞 或是溢出了 就会出现怪现像
rube
3楼-- · 2020-01-14 06:59
干扰了。。
popo_new
4楼-- · 2020-01-14 10:34
本帖最后由 popo_new 于 2018-6-4 08:09 编辑

等了一周,终于问题又出现了,这次的程序在原有的基础上加了LED的监控。
通过一个LED,我监控K1的值,只有K1的值为1,LED就亮,否则就灭,结果,即使出现故障时,K1依旧为1,且USART1,不再进入中断了
main
{
        USART1_Configuration();    //这个口是我的调试接口,看内部参数用的,通讯故障时,不再进入USART1的中断,对我来说,就变成砖了
   USART2_Configuration(); //类似modbus的从站,在现场和主机进行通读讯的,通讯故障时,会进入USART2的中断,但不再发送了。
               两种可能,一种是认为接收的信息不对,不生成发送帧,或生成了发送帧,但发送不了。
        DMA_Configuration();       
        ADC_Configuration();     
        while(1)
        {
    …………。
        }      
}

void USART1_IRQHandler(void)
{
        /处理接收到的数据
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)                         //RESET = 0 判断是否发生接收中断
                {
                        LED=ON;                //在另一个100ms的定时中断中,会无条件LED=OFF,只要闪烁就表示有接收
       ………………     
     }

因为这个条件实在是太弱,我能想到的原因:难道是初始化的参数被改变了,
因为USART1的初始化,只在程序起始时,配置了一次,这个可能性,也不应该大。
还有可能是什么原因。
whatcanitbe
5楼-- · 2020-01-14 14:14
 精彩回答 2  元偷偷看……
popo_new
6楼-- · 2020-01-14 18:46
本帖最后由 popo_new 于 2018-6-9 14:11 编辑

通过一个LED,我监控K1的值,只有K1的值为1,LED就亮,否则就灭,结果,即使出现故障时,K1依旧为1,且USART1,不再进入中断了
main
{
        RCC_Configuration();
        NVIC_Configuration();  //按以下顺序配置了各中断 USART1 USART2 RTC TIM6 TIM7
        RTC_Configuration();
        GPIO_Configuration();

  USART1_Configuration();    //这个口是我的调试接口,看内部参数用的,通讯故障时,不再进入USART1的中断,对我来说,就变成砖了
   USART2_Configuration(); //类似modbus的从站,在现场和主机进行通读讯的,通讯故障时,会进入USART2的中断,但不再发送了。
               两种可能,一种是认为接收的信息不对,不生成发送帧,或生成了发送帧,但发送不了。
        Tim6_Configuration();   
        Tim7_Configuration();   

        while(1)
        {
    …………。
        }      
}

现在发现,一旦出现问题:
1.串口1即使有接收到字符,也不进入中断;
2.串口2接收到字符,会进入中断;
3.不再进入RTC中断。

换句话说,RTC 和USART1的中断配置“变了”,如果是组组越界,改写的寄存器值,有没有好方法,找到这个越界的数组?(检查了几遍,暂时没有发现)

一周热门 更多>