小飞侠 发表于 2024-11-26 07:30:28

ercircle 发表于 2024-11-25 10:11
请问是中断的问题,那这里在变量定义时赋值又是什么问题?

变量定义时赋值应该没有问题,我在中断程序中有一些其他操作,暂时正常了,如果把其他操作都去掉,只保留变量的自加操作,还是会出现问题

社区闲人 发表于 2024-11-29 18:47:26

临界变量问题,要注意保护。

小飞侠 发表于 2024-12-9 08:26:22

VCC 发表于 2024-11-20 13:30
我虽然没点开楼主的程序,但是结合他的截图,和你的修改,我就知道问题出在哪里了

{:5_278:}


所以进行16位,32位的volatile变量访问时,一定要关闭中断!确保访问操作的原子性,关闭中断这确实是正解

axushilong 发表于 2024-12-10 17:59:07

void main(void)
{
      P_SW2 |= 0x80;
      Init_Timer_1ms();
      EA = 1;
      P3M1 = 0;P3M0 = 0x10;
      while(1)
      {
                uint16_t usTmp;

                EA = 0;
                usTmp = timer_ms;
                EA = 1;
                if(usTmp>=500)
                {//500ms任务
                        P34 ^= 1;
                        rf_buf=usTmp;
                        EA = 0;
                        timer_ms = 0;
                        EA = 1;
                        aa++;
                        if(aa>=28)
                        {
                              aa=0;
                        }
                }
      }
}
上面这样或者下面这样,但是要加volatile声明变量timer_ms,试试。void main(void)
{
      P_SW2 |= 0x80;
      Init_Timer_1ms();
      EA = 1;
      P3M1 = 0;P3M0 = 0x10;
      while(1)
      {
                uint16_t usTmp;

                while(usTmp != timer_ms){usTmp = timer_ms;};
                if(usTmp>=500)
                {//500ms任务
                        P34 ^= 1;
                        rf_buf=usTmp;
                        EA = 0;
                        timer_ms = 0;
                        EA = 1;
                        aa++;
                        if(aa>=28)
                        {
                              aa=0;
                        }
                }
      }
}

小飞侠 发表于 2024-12-10 22:12:27

axushilong 发表于 2024-12-10 17:59
上面这样或者下面这样,但是要加volatile声明变量timer_ms,试试。

上面的办法就挺好的

白水大虾2016 发表于 2024-12-14 09:25:44

<p>学习了!</p>

STC企鹅 发表于 2024-12-14 11:06:45

<p>学习到三个专业名词</p>

men007 发表于 2024-12-14 12:25:30

学习了{:4_187:}

jiananmeidi 发表于 2024-12-21 08:03:33

又懂一个知识点了

mcu 发表于 2024-12-21 09:27:00

<p>很好的例子,</p>
页: 1 2 3 [4] 5
查看完整版本: 发现一个bug不知道是单片机还是Keil的问题 | 是细节问题,大家必须看下,原子操作