打印

单片机I2C作为从机,从机处理服务都在中断中,怎么保证多字节读取时数据一致性

[复制链接]
1305|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heqiaosheng|  楼主 | 2015-11-22 14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例如:
单片机作为从机,并使用硬件I2C从模式。
主函数中定义u32 a,a随时会被改变。
在中断处理中,主机i2c来读取a的值,从机处理过程都在中断服务程序中完成。
时序:Start+物理地址【写】+寄存器地址+Start+物理地址【读】+(a>>24)+(a>>16)+(a>>8)+(a)+End。
怎么保证a在被读取过程中不被修改呢?
如开始读取时a=0x00112233,后在主程序中被修改为0x44556677,那么程序会有可能读取到0x00116677。

相关帖子

沙发
heqiaosheng|  楼主 | 2015-11-22 15:12 | 只看该作者
我目前的想法是在写寄存器地址处理时中断中static u32 b,b=a;之后的读取为(b>>24)+(b>>16)+(b>>8)+(b)。
主程序中修改a时之前关闭全局中断(会影响中断应答响应时间)。

使用特权

评论回复
板凳
ayb_ice| | 2015-11-22 16:21 | 只看该作者
这就是临界代码的问题

通过信号量解决,

关中断是最有效的方法

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
heqiaosheng + 3 很给力!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

44

帖子

0

粉丝