找回密码
 立即注册
查看: 448|回复: 14

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:497
  • 最近打卡:2025-04-30 20:48:13
已绑定手机

151

主题

589

回帖

1196

积分

金牌会员

积分
1196
发表于 2024-11-7 09:33:12 | 显示全部楼层 |阅读模式
这是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;
        }
}

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-7 09:50:07 | 显示全部楼层
printf("interrupt_cnt=%u\r\n", interrupt_cnt);
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-11-7 10:00:10 来自手机 | 显示全部楼层
变量没在printf里面
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:497
  • 最近打卡:2025-04-30 20:48:13
已绑定手机

151

主题

589

回帖

1196

积分

金牌会员

积分
1196
发表于 2024-11-7 10:13:41 | 显示全部楼层
bkeu*** 发表于 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);//打印数字对的,程序运行指示灯异常;

点评

printf("interrupt_cnt=%d\r\n", (unsigned int)interrupt_cnt);  详情 回复 发表于 2024-11-7 10:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-7 10:21:43 | 显示全部楼层
38009*** 发表于 2024-11-7 10:13
感谢,我测试一下,
printf("interrupt_cnt=%bd\r\n");//打印一直是0,程序运行指示灯异常;
printf("int ...

printf("interrupt_cnt=%d\r\n", (unsigned int)interrupt_cnt);
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-11-7 10:30:01 | 显示全部楼层
打印的变量默认为16位,8位变量得强制成16位的。
但是没有强制成16位,也不至少一直都打印成0的

点评

是因为内部的内存对齐机制,所以最好的解决方法还是对类型进行强制转换来指定  详情 回复 发表于 2024-11-7 10:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-11-7 10:53:20 | 显示全部楼层
xxkj*** 发表于 2024-11-7 10:30
打印的变量默认为16位,8位变量得强制成16位的。
但是没有强制成16位,也不至少一直都打印成0的 ...

是因为printf内部的内存对齐机制问题,所以最好的解决方法还是对类型进行强制转换来指定
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-11-7 10:59:52 | 显示全部楼层
王*** 发表于 2024-11-7 10:53
是因为printf内部的内存对齐机制问题,所以最好的解决方法还是对类型进行强制转换来指定 ...

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-05-01 08:13:06
已绑定手机

27

主题

341

回帖

1687

积分

金牌会员

机长

积分
1687
发表于 2024-11-7 11:10:31 | 显示全部楼层
xxkj*** 发表于 2024-11-7 10:59
我记得以前也有时候没有强制转换,打印出来的是杂乱的数据,没有一直都是0的 ...
  1. printf("interrupt_cnt=%bd\r\n");
复制代码

你仔细看他这一句呀,根本没把变量带进去,当然一直是0了……
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-11-7 11:12:13 | 显示全部楼层
hsr*** 发表于 2024-11-7 11:10
你仔细看他这一句呀,根本没把变量带进去,当然一直是0了……

是的,是的,还是你细心!
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:46 , Processed in 0.154213 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表