简体   繁体   English

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

[英]while loop stops when condition is still true

I have the following code:我有以下代码:

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();
    
}

with the following output: (don't know how to make blockquote work with line breaks)具有以下输出:(不知道如何使 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

relevant code in tmr3.c: tmr3.c 中的相关代码:

static volatile uint16_t msTick;//incremented using ISR
uint16_t TMR3_GetTick(void)
{
    return msTick;
}

Why is this causing problems when mult == 3 |为什么当 mult == 3 | 时这会导致问题? 4? 4? is volatile the problem??是不稳定的问题?? I've been reading on how to work with volatile vars and haven't been able to work out if this is part of the problem.我一直在阅读有关如何使用 volatile vars 的内容,但如果这是问题的一部分,我无法解决。

Please ask if more info is required.请询问是否需要更多信息。 Thanks.谢谢。

EDIT: idk if it's helpful but when they fail, 3 and 4 are always 512(256 * 2) and 768(256*3)编辑:idk 如果它有帮助但是当它们失败时,3 和 4 总是 512(256 * 2) 和 768(256*3)

EDIT2: the solution turned out to be: EDIT2:解决方案原来是:

uint16_t tock; while((tock = TMR3_GetTick()) < minimum);

shoutout to my man Weather Vane in the comments for this one.在此评论中向我的男人 Weather Vane 大喊大叫。

replaced:替换:

 while(TMR3_GetTick() < minimum);

with:和:

uint16_t tock; while((tock = TMR3_GetTick()) < minimum);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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