380091044 发表于 2024-11-7 09:33:12

定时器中断中打印变量值,一直打印是0?

这是1ms进入一次中断,自增变量的打印结果一直是0,是啥问题?


/*********定时器T1中断函数********/
void Time1_isr() interrupt 3 using 1
{       
        Key_scan();       
        ++interrupt_cnt;
        printf("interrupt_cnt=%bd\r\n");//打印一直是0,程序运行指示灯异常;
        if(interrupt_cnt>=300)
        {       
                interrupt_cnt=0;
                Flag_Second=1;
        }
}

bkeuqoaq 发表于 2024-11-7 09:50:07

printf("interrupt_cnt=%u\r\n", interrupt_cnt);

soma 发表于 2024-11-7 10:00:10

变量没在printf里面

380091044 发表于 2024-11-7 10:13:41

bkeuqoaq 发表于 2024-11-7 09:50
printf("interrupt_cnt=%u\r\n", interrupt_cnt);

感谢,我测试一下,
printf("interrupt_cnt=%bd\r\n");//打印一直是0,程序运行指示灯异常;
printf("interrupt_cnt=%bd\r\n",interrupt_cnt);//打印数字有正负且带d,
printf("interrupt_cnt=%ud\r\n",interrupt_cnt);//打印数字带d,
printf("interrupt_cnt=%u\r\n",interrupt_cnt);//打印数字对的,程序运行指示灯异常;

王昱顺 发表于 2024-11-7 10:21:43

380091044 发表于 2024-11-7 10:13
感谢,我测试一下,
printf("interrupt_cnt=%bd\r\n");//打印一直是0,程序运行指示灯异常;
printf("int ...

printf("interrupt_cnt=%d\r\n", (unsigned int)interrupt_cnt);

xxkj2010 发表于 2024-11-7 10:30:01

打印的变量默认为16位,8位变量得强制成16位的。
但是没有强制成16位,也不至少一直都打印成0的

王昱顺 发表于 2024-11-7 10:53:20

xxkj2010 发表于 2024-11-7 10:30
打印的变量默认为16位,8位变量得强制成16位的。
但是没有强制成16位,也不至少一直都打印成0的 ...
是因为printf内部的内存对齐机制问题,所以最好的解决方法还是对类型进行强制转换来指定

xxkj2010 发表于 2024-11-7 10:59:52

王昱顺 发表于 2024-11-7 10:53
是因为printf内部的内存对齐机制问题,所以最好的解决方法还是对类型进行强制转换来指定 ...

我记得以前也有时候没有强制转换,打印出来的是杂乱的数据,没有一直都是0的

hsrzq 发表于 2024-11-7 11:10:31

xxkj2010 发表于 2024-11-7 10:59
我记得以前也有时候没有强制转换,打印出来的是杂乱的数据,没有一直都是0的 ...

printf("interrupt_cnt=%bd\r\n");
你仔细看他这一句呀,根本没把变量带进去,当然一直是0了……

xxkj2010 发表于 2024-11-7 11:12:13

hsrzq 发表于 2024-11-7 11:10
你仔细看他这一句呀,根本没把变量带进去,当然一直是0了……

是的,是的,还是你细心!
页: [1] 2
查看完整版本: 定时器中断中打印变量值,一直打印是0?