Embedded 如何修复uint8_t变量ascii转换引起的错误

Embedded 如何修复uint8_t变量ascii转换引起的错误,embedded,microcontroller,stm32,Embedded,Microcontroller,Stm32,我正在尝试使用标志实现逻辑,这样标志变量的值将仅为0或1。所以我用0初始化了一个uint8\u t变量,但当我调试时发现它转换为0x30(这是0的ASCII值),所以我后面的逻辑失败 uint8_t flag_count = 0; if(flag_count == 0) { counter++; if(counter >= 1000) { counter = 0; flag_count = 1; } } if(flag_c

我正在尝试使用标志实现逻辑,这样标志变量的值将仅为0或1。所以我用0初始化了一个
uint8\u t
变量,但当我调试时发现它转换为0x30(这是0的ASCII值),所以我后面的逻辑失败

uint8_t flag_count = 0;

if(flag_count == 0)
{
    counter++;
    if(counter >= 1000)
    {
        counter = 0;
        flag_count = 1;
    }
}

if(flag_count == 1)
{
    //do something
    flag = 0;
}
所以当我运行程序标志时,计数值为0x30(ASCII值为“0”),因此计数器从不递增,所以逻辑失败

我试过了

uint8_t flag_count = 0x00; 

它仍然做同样的事情。

对于uint8\u t:compiler将其作为char,并因此将其转换为ascii


所以我需要使用uint32\u t或int使其工作:)

任何正常的编译器都不会这样做。这当然是代码中其他地方的内存损坏问题。您显示的代码中没有任何内容会导致这种行为。还发生了什么?
flag\u count
的范围是什么?我的假设是:您向我们展示的代码与引起问题的代码不同。你能显示准确的代码吗?还有反汇编(如果可用)。为什么不使用类型为
\u Bool
(或
Bool
,如果包含stdbool.h)?“当我调试时”-您到底是怎么做的?对我来说,这听起来像是有缺陷的调试——导致你得出错误的结论。