找回密码
 立即注册
查看: 688|回复: 10

1ms的定时器中断函数返回的值有时候会不对

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-25 10:34:17
已绑定手机

5

主题

16

回帖

193

积分

注册会员

积分
193
发表于 2024-9-10 16:05:21 | 显示全部楼层 |阅读模式
我每次获取currenttime,极少数的情况,获取的currenttime值反而小于一开始获取的计数值,现在定时器中断调成10ms,这样的频率减少了,但是偶尔还是会有
截图202409101603313344.jpg
截图202409101603447047.jpg
截图202409101604088102.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-25 10:34:17
已绑定手机

5

主题

16

回帖

193

积分

注册会员

积分
193
发表于 2024-9-10 16:06:17 | 显示全部楼层
void Timer4_Isr(void) interrupt 20
{
    tim_runing_time++;
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-25 10:34:17
已绑定手机

5

主题

16

回帖

193

积分

注册会员

积分
193
发表于 2024-9-10 16:19:55 | 显示全部楼层
刚在论坛里也看到了同样的问题https://www.stcaimcu.com/forum.p ... amp;extra=#pid21673
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-9-10 17:08:39 | 显示全部楼层
你要在程序里写上,如果后读入的值小于前读入的值,后面的值要加上进制,这样,后面的值就会永远大于前面的值了。问题就是,变量是循环的,int型到了65535,再来一次就变成0了。我的办法就是在中断中看看次数到了30000吗,到了30000就清零,这样如果后面读到的数小于前面的数,直接加30000,总数也没有超过int的范围。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-9-10 17:21:47 | 显示全部楼层
盲猜你用的是8位单片机
8位机要避免同时在中断和主循环"运算"和"比较"多于8位的变量
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-25 10:34:17
已绑定手机

5

主题

16

回帖

193

积分

注册会员

积分
193
发表于 2024-9-10 17:33:01 | 显示全部楼层
liuzon*** 发表于 2024-9-10 17:08
你要在程序里写上,如果后读入的值小于前读入的值,后面的值要加上进制,这样,后面的值就会永远大于前面的 ...

我定义的uint32_t的值 ,也就是unsigned long,上限很大
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-25 10:34:17
已绑定手机

5

主题

16

回帖

193

积分

注册会员

积分
193
发表于 2024-9-10 17:33:28 | 显示全部楼层
Lkck*** 发表于 2024-9-10 17:21
盲猜你用的是8位单片机
8位机要避免同时在中断和主循环"运算"和"比较"多于8位的变量 ...

是8位的,8H8K,
回复 支持 反对

使用道具 举报 送花

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

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-9-10 19:14:43 | 显示全部楼层
Lkck*** 发表于 2024-9-10 17:21
盲猜你用的是8位单片机
8位机要避免同时在中断和主循环"运算"和"比较"多于8位的变量 ...

avr也是8位单片机啊。就可以,难道因为是risc吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-9-11 11:38:11 | 显示全部楼层
wnag*** 发表于 2024-9-11 07:33
这个不太理解,能详细说说吗?

主程序在处理32位的变量,
处理了其中的8位,
这个时候中断打断,
改写了整个32位,
这个时候返回主程序,
主程序继续处理剩下没处理的24位(这24位已经是新的数据了),
那么这个结果会错的离谱。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:294
  • 最近打卡:2025-03-06 09:25:41

8

主题

318

回帖

1835

积分

金牌会员

积分
1835
发表于 2024-9-11 11:39:30 | 显示全部楼层
so*** 发表于 2024-9-10 19:14
avr也是8位单片机啊。就可以,难道因为是risc吗?

这个不太清楚
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:22 , Processed in 0.126263 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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