保护中断中的关键部分

时间:2018-03-20 19:36:01

标签: c interrupt critical-section

我想要解决这个问题,而不是在执行条件时禁用中断。我正在写pic16f877a。并希望非常简单和基本的解决方案。

static int counter=0;
void main()
{
  while(1)
 {
   if(counter)
   {
    counter--;
    //code 
    }
  }


InterruptSerial()
{
 counter++;
 //code
}

执行counter--;它被翻译成

 load    counter value 
 decrement  loaded value 
 assign     new value in counter register 

如果在到达assign指令之前执行此代码时发生中断,则会导致错误行为。

正常解决方案

void main()
{
  while(1)
 {
   if(counter)
   {
    disableInterrupts();
    counter--;
     //code
     enableInterrupts(); 
   }
}

如何解决这个问题而不禁用中断?

0 个答案:

没有答案