gpt4 book ai didi

c - 在ARM嵌入式C编程中使用定时器

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:29 26 4
gpt4 key购买 nike

我正在用 C 编写一个 pong 类型的游戏,它将在 LCD 屏幕上的 ARM 板上运行。游戏的部分要求是所谓的“魔法时间”。

“魔术时间”周期以 5 到 10 秒之间的随机间隔出现 - 即,在最后一个“魔术时间”周期之后的 5 到 10 秒之间,并持续 2 到 10 秒的随机持续时间。

最佳答案

我不太明白你的问题(你是通过定时器中断每秒执行这段代码,还是?),但我第一眼看到了一些错误:

while (magicTime == true) {
magicTimeLength++;
magicTime == magicTimeLength;
}

最后一行 (magicTime == magicTimeLength;) 什么都不做 - 它只是评估 magicTime 是否等于 magicTimeLength,所以你会进入死循环。

我认为你想这样做:

  1. 用 5 到 10 之间的随机值初始化 magicTimeOccurence
  2. 初始化magicTimeLength,取2到10之间的随机值。
  3. 每秒,如果 magicTimeOccurence 大于 0,则减少它的值(value)加一。
  4. 一旦 magicTimeOccurence 达到 0,减少 magicTimeLength 值一个。
  5. 检查 magicTimeLength 是否大于 0。如果是,则为 magic时间段(因此,将 magicTime 标志设置为 true)。递减magicTimeLength.
  6. 如果magicTimeLength,将magicTime设置为false并转到步骤1。

你应该初始化你的 timer0 中断周期为 1s。我认为你用

完成了它
/* Set timer 0 period */
T0PR = 0;
T0MR0 = SYS_GetFpclk(TIMER0_PCLK_OFFSET)/(TIMER0_TICK_PER_SEC);

但要确保每秒触发一次。

这是示例代码,它应该向您展示我的意思。

/* In     void InitTimer0Interrupt() */

...
T0TCR_bit.CE = 1; /* Counting Enable */

magicTimeOccurence = 5+(rand()%5);
magicTimeLength = 2+(rand()%8);
magicTime = false;

__enable_interrupt();
}

/* In void Timer0IntrHandler (void) */

void Timer0IntrHandler (void) {


/* clear interrupt */
T0IR_bit.MR0INT = 1;
VICADDRESS = 0;
if(magicTimeOccurence > 0)
{
magicTimeOccurence--;
}
else if(magicTimeLength > 0){
magicTime = true;
magicTimeLenght--;
}
else{
magicTime = false;
magicTimeOccurence = 5+(rand()%5);
magicTimeLength = 2+(rand()%8);
}

/* take action on timer interrupt */
}

关于c - 在ARM嵌入式C编程中使用定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8743793/

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