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

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部

5

主题

44

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部