硬汉嵌入式论坛

 找回密码
 立即注册
查看: 541|回复: 2
收起左侧

[技术讨论] 进入中断函数读取寄存器值存储到局部变量出错

[复制链接]

69

主题

172

回帖

379

积分

高级会员

积分
379
发表于 2025-1-14 14:24:30 | 显示全部楼层 |阅读模式
调试CAN通信,进入CAN中断函数后会读取中断状态保存到局部变量,后发现中断执行有错误,然后调试发现下面奇怪的现象:

1、如果断点停在 tmp = CAN->ISR处,单步往下执行,tmp值和CAN->ISR值一样,是正确的。
2、如果断点停在 tmp = CAN->ISR下一个语句,tmp值就不是CAN->ISR值,比如CAN->ISR值为0x2f0094f4,tmp值却是0x2f0080f5。

出现这样的现象很疑惑,这个会是什么原因造成的?



void CAN_IRQHandler(void)
{
    __IO uint32_t tmp;

   tmp = CAN->ISR;

if(判断tmp值)
   {
   处理。。。。
}
}



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2025-1-14 14:56:12 | 显示全部楼层
感觉是调试的问题,虽然你停在了这里,但是CAN外设ISR还是继续更新的。
回复

使用道具 举报

69

主题

172

回帖

379

积分

高级会员

积分
379
 楼主| 发表于 2025-1-14 16:13:43 | 显示全部楼层
eric2013 发表于 2025-1-14 14:56
感觉是调试的问题,虽然你停在了这里,但是CAN外设ISR还是继续更新的。

中断函数里设了两个断点,理论上这两处的代码都要执行的,但是就只停在一个断点处,然后单步调试才发现的
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 03:32 , Processed in 0.207410 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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