加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux上的I2C并发访问,互斥

发布时间:2020-12-14 02:03:25 所属栏目:Linux 来源:网络整理
导读:我正在嵌入式 Linux中编写一个多线程C程序,从用户空间访问许多I2C设备(从设备).此外,我从多个线程访问相同的I2C设备.我正在使用SMBUS函数(i2c_smbus_write_byte_data,i2c_smbus_read_byte_data,i2c_smbus_read_i2c_block_data,…). 是否有内置并发访问的保护
我正在嵌入式 Linux中编写一个多线程C程序,从用户空间访问许多I2C设备(从设备).此外,我从多个线程访问相同的I2C设备.我正在使用SMBUS函数(i2c_smbus_write_byte_data,i2c_smbus_read_byte_data,i2c_smbus_read_i2c_block_data,…).

是否有内置并发访问的保护或我是否需要自己添加互斥?

例如:我有一个读取功能,通过I2C读取一个传感器的数据.但是也可以从另一个线程调用相同的函数,从而导致可能的并发访问.我是否必须在该函数中使用某些静态互斥锁,或者它是否已经在I2C访问函数中?

解决方法

I2C是具有多个设备的共享总线,可以从多个进程和线程访问.因此,Linux I2C驱动程序代码使用互斥锁来管理对每个I2C总线的访问.

有关SMBus函数,请参阅i2c-core-smbus.c中的Linux内核函数i2c_smbus_xfer().在开始传输之前,它会获得I2C适配器的锁定(查看源代码,并查看对i2c_lock_adapter()的调用).所有SMBus事务都基于该功能.

有关I2C函数,请参阅i2c-core-base.c中的Linux内核函数i2c_transfer().在开始传输之前,它会锁定I2C适配器.所有I2C事务都基于该功能.

所以,是的,内置并发访问的保护.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读