如何在嵌入式 C while 循环中继续接收定时中断?

How do I continue to receive timed interrupts in an embedded C while loop?

我需要一个嵌入式设备在一个功能中停留半秒,让另一个设备赶上。我使用了 1 毫秒定时器(r_cg_cmt.c for Renesas IAR IDE)并且有一个 static volatile int delay_time 每 1 毫秒定时中断递增一次。
使用代码:

//counter.c

 //on 1 mS timed interrupt
 gen_purpose_1ms_couter();

 void gen_purpose_1ms_couter_reset( void ){ 
   gen_c->count = 0;
  }


void gen_purpose_1ms_couter( void ){ 
  gen_c->count++;
 } 


//source_file.h

struct gen_counter {
  unsigned int count;
};

extern struct gen_counter *gen_c;

//source_file.c
#include "counter.h"

struct gen_counter *gen_c;

 gen_purpose_1ms_couter_reset();
 while(1){
   if(gen_c->count > 500){
      break;
   }
 }

但是这会导致处理器 (RX231) 停留在 while 循环中而不执行任何定时中断。任何人都可以解释我如何在给定的时间内停留在一个函数中吗?

您没有提供完整的示例,但以下是您的代码未按预期工作的几个可能原因。

  1. 定时器 configured/enabled 不正确。
  2. 定时器中断未正确启用。
  3. 中断处理程序未正确注册。
  4. while 循环已经过优化,gen-c->count 不会在每次迭代时重新读取,因为它没有声明为 volatile。

gen_purpose_1ms_couter 中的断点是否命中?如果不是,则定时器或中断设置不正确。

如果禁用优化,您的代码是否开始工作?如果是这样,那么 genc->count 需要声明为 volatile。