gpt4 book ai didi

c - 与 while(1) 并行运行时中断计时器卡住

转载 作者:行者123 更新时间:2023-11-30 15:55:15 27 4
gpt4 key购买 nike

第一个代码:

//------------------------------------------------------------------------------
/// Interrupt handlers for TC interrupts. Toggles the state of LEDs
//------------------------------------------------------------------------------
char token = 0;
void TC0_IrqHandler(void) {
volatile unsigned int dummy;
dummy = AT91C_BASE_TC0->TC_SR;
if(token == 1) {
PIO_Clear(&leds[0]);
PIO_Set(&leds[1]);
token = 0;
}
else {
PIO_Set(&leds[0]);
PIO_Clear(&leds[1]);
token = 1;
}
}
//------------------------------------------------------------------------------
/// Configure Timer Counter 0 to generate an interrupt every 250ms.
//------------------------------------------------------------------------------
void ConfigureTc(void) {
unsigned int div;
unsigned int tcclks;
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TC0; // Enable peripheral clock
TC_FindMckDivisor(1, BOARD_MCK, &div, &tcclks); // Configure TC for a 4Hz frequency and trigger on RC compare
TC_Configure(AT91C_BASE_TC0, tcclks | AT91C_TC_CPCTRG);
AT91C_BASE_TC0->TC_RC = (BOARD_MCK / div) / 1; // timerFreq / desiredFreq
IRQ_ConfigureIT(AT91C_ID_TC0, 0, TC0_IrqHandler); // Configure and enable interrupt on RC compare
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;
IRQ_EnableIT(AT91C_ID_TC0);
printf(" -- timer has started \n\r");
TC_Start(AT91C_BASE_TC0);
}

这只是中断计时器和事件(处理程序),但是当我运行一些

while(1) {
// action

ConfigureTc()之后,循环和中断定时器都被卡住...为什么会这样?我应该添加另一个计时器并避免 while(1) 吗?

while(1) {
printf("hello");
}

-- 这会中断(卡住)循环(是的,如果我不使用计时器,它就会按其必须的方式工作)

最佳答案

我将在这里冒险给出一个实际的答案。 IME,99% 的情况下,我的主板“熄灭”,对任何输入都没有响应,低优先级“闪烁”线程也没有“心跳”LED 闪烁,CPU 已飞向预取或数据中止处理程序。这些处理程序是通过中断进入的,大多数库定义的默认处理程序不会重新启用中断,因此会塞满整个系统。通常,它们只是无限循环,并且禁用中断后,故事就结束了:(

我已经更改了我的默认处理程序,以将合适的“严重错误”消息输出到 UART(通过轮询它 - 操作系统/中断很糟糕!)。

关于c - 与 while(1) 并行运行时中断计时器卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12404674/

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