gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:31:51 25 4
gpt4 key购买 nike

我需要一个嵌入式设备在一个函数中停留半秒,以允许另一个设备 catch 。我使用了 1 毫秒计时器(用于瑞萨 IAR IDE 的 r_cg_cmt.c),并有一个静态 volatile int 延迟时间,每 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. 计时器未正确配置/启用。
  2. 定时器中断未正确启用。
  3. 中断处理程序未正确注册。
  4. while 循环已经过优化,gen-c->count 不会在每次迭代时重新读取,因为它未声明为 volatile。

gen_ Purpose_1ms_couter 中是否遇到过断​​点?如果不是,则定时器或中断设置不正确。

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

关于c - 如何在嵌入式 C while 循环中继续接收定时中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60043415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com