【发布时间】:2020-02-03 16:33:34
【问题描述】:
我需要一个嵌入式设备在一个函数中停留半秒,以允许另一个设备赶上。我使用了 1 毫秒计时器(用于 Renesas IAR IDE 的 r_cg_cmt.c)并有一个静态 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 循环中并且不执行任何定时中断。谁能解释我如何在一个函数中停留一段时间?
【问题讨论】:
-
您上周问了完全相同的问题,并让 cmets 指出问题的问题所在。为什么不修改就转发?
-
在几个人指出了一些错误之后,我发布了一个更新版本。
-
我不知道您正在使用的系统,但从我一直使用的嵌入式系统中,我似乎记得用作中断处理程序的函数应该用关键字“中断”标记。这是为了使编译器生成用于确认中断和重新启用中断的代码。不确定这是否有帮助。顺便说一句:
struct gen_counter是如何定义的? -
顺便说一句:这些行的目的是什么:` //on 1 ms timed interrupt gen_ purpose_1ms_couter();` 对我来说似乎很奇怪。这是一些
weak函数覆盖吗? -
OT:
couter-->counter?