[英]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? 是不稳定的问题?? 我一直在阅读有关如何使用 volatile vars 的内容,但如果这是问题的一部分,我无法解决。
请询问是否需要更多信息。 谢谢。
编辑:idk 如果它有帮助但是当它们失败时,3 和 4 总是 512(256 * 2) 和 768(256*3)
EDIT2:解决方案原来是:
uint16_t tock; while((tock = TMR3_GetTick()) < minimum);
在此评论中向我的男人 Weather Vane 大喊大叫。
替换:
while(TMR3_GetTick() < minimum);
和:
uint16_t tock; while((tock = TMR3_GetTick()) < minimum);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.