如何在嵌入式 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 循环中而不执行任何定时中断。任何人都可以解释我如何在给定的时间内停留在一个函数中吗?
您没有提供完整的示例,但以下是您的代码未按预期工作的几个可能原因。
- 定时器 configured/enabled 不正确。
- 定时器中断未正确启用。
- 中断处理程序未正确注册。
- while 循环已经过优化,
gen-c->count
不会在每次迭代时重新读取,因为它没有声明为 volatile。
gen_purpose_1ms_couter
中的断点是否命中?如果不是,则定时器或中断设置不正确。
如果禁用优化,您的代码是否开始工作?如果是这样,那么 genc->count
需要声明为 volatile。
我需要一个嵌入式设备在一个功能中停留半秒,让另一个设备赶上。我使用了 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 循环中而不执行任何定时中断。任何人都可以解释我如何在给定的时间内停留在一个函数中吗?
您没有提供完整的示例,但以下是您的代码未按预期工作的几个可能原因。
- 定时器 configured/enabled 不正确。
- 定时器中断未正确启用。
- 中断处理程序未正确注册。
- while 循环已经过优化,
gen-c->count
不会在每次迭代时重新读取,因为它没有声明为 volatile。
gen_purpose_1ms_couter
中的断点是否命中?如果不是,则定时器或中断设置不正确。
如果禁用优化,您的代码是否开始工作?如果是这样,那么 genc->count
需要声明为 volatile。