繁体   English   中英

当条件仍然为真时,while 循环停止

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM