提问人:Wesley Kienhuis 提问时间:7/21/2022 最后编辑:Wesley Kienhuis 更新时间:7/21/2022 访问量:116
当条件仍为 true 时,循环停止
while loop stops when condition is still true
问:
我有以下代码:
void EXTI_Main(uint8_t mult)//range 1-4(inclusive)
{
uint16_t minimum = 200 * mult;
while(TMR3_GetTick() < minimum);
printf("mult:%hhu\ttick:%hu\tminimum:%hu\r\n", mult, TMR3_GetTick(), minimum);
//RF_Main();
LCD_Read();
}
输出如下:(不知道如何使 blockquote 与换行符一起使用)
mult:0 tick:0 minimum:0
mult:1 tick:414 minimum:200
mult:2 tick:453 minimum:400
mult:3 tick:600 minimum:600
mult:4 tick:800 minimum:800
mult:0 tick:0 minimum:0
mult:1 tick:414 minimum:200
mult:2 tick:453 minimum:400
mult:3 tick:600 minimum:600
mult:4 tick:768 minimum:800
mult:0 tick:0 minimum:0
mult:1 tick:414 minimum:200
mult:2 tick:453 minimum:400
mult:3 tick:512 minimum:600
mult:4 tick:768 minimum:800
mult:0 tick:0 minimum:0
TMR3.C 中的相关代码:
static volatile uint16_t msTick;//incremented using ISR
uint16_t TMR3_GetTick(void)
{
return msTick;
}
为什么这会导致问题 mult == 3 |4? 挥发性是问题吗??我一直在阅读有关如何使用易失性变量的信息,但无法确定这是否是问题的一部分。
请询问是否需要更多信息。 谢谢。
编辑:idk,如果它有帮助,但是当它们失败时,3和4始终是512(256 * 2)和768(256 * 3)
EDIT2:解决方案原来是:
uint16_t tock; while((tock = TMR3_GetTick()) < minimum);
答:
2赞
Wesley Kienhuis
7/21/2022
#1
在评论中向我的男人 Weather Vane 大喊大叫。
取代:
while(TMR3_GetTick() < minimum);
跟:
uint16_t tock; while((tock = TMR3_GetTick()) < minimum);
评论
TMR3_GetTick()
uint16_t tock; while((tock = TMR3_GetTick()) < minimum);
tock
msTick
TMR3_GetTick()
EXTI_Main()
TMR3_GetTick()
msTick
while