来讨论一下,I2C框架里面那个i2c_core.c里面i2c_core_lock这个锁是否可以丢掉

23 views
Skip to first unread message

nongxi...@gmail.com

unread,
Sep 2, 2014, 3:45:41 AM9/2/14
to rt-thread-cnusers
首先,为什么想要去掉这个呢?
主要是使用起来不方便,注册I2C驱动前需要去初始化这个锁,不然会出问题。而且在自动组件初始化中,这个初始化会在设备初始化的后面,这样会导致问题。
其次,这个锁只有在注册I2C设备时锁一下,其他情况下没有用到,使用到的代码如下:
rt_err_t rt_i2c_bus_device_register(struct rt_i2c_bus_device *bus,
const char *bus_name)
{
rt_err_t res = RT_EOK;

rt_mutex_init(&bus->lock, "i2c_bus_lock", RT_IPC_FLAG_FIFO);

rt_mutex_take(&i2c_core_lock, RT_WAITING_FOREVER);

if (bus->timeout == 0)
bus->timeout = RT_TICK_PER_SECOND;

res = rt_i2c_bus_device_device_init(bus, bus_name);

i2c_dbg("I2C bus [%s] registered\n", bus_name);

rt_mutex_release(&i2c_core_lock);

return res;
}
rt_err_t rt_i2c_bus_device_device_init(struct rt_i2c_bus_device *bus,
const char *name)
{
struct rt_device *device;
RT_ASSERT(bus != RT_NULL);

device = &bus->parent;

device->user_data = bus;

/* set device type */
device->type = RT_Device_Class_I2CBUS;
/* initialize device interface */
device->init = i2c_bus_device_init;
device->open = RT_NULL;
device->close = RT_NULL;
device->read = i2c_bus_device_read;
device->write = i2c_bus_device_write;
device->control = i2c_bus_device_control;

/* register to device manager */
rt_device_register(device, name, RT_DEVICE_FLAG_RDWR);

return RT_EOK;
}
这么个初始化是否可以不用去lock???

wuyangyong

unread,
Sep 2, 2014, 3:48:50 AM9/2/14
to rt-threa...@googlegroups.com
 好像也没锁住啥东西,
 device_register里面插入链表时有关中断了。
 
发件人: nongxi...@gmail.com
发送时间: 2014-09-02 15:45
收件人: rt-thread-cnusers
主题: 来讨论一下,I2C框架里面那个i2c_core.c里面i2c_core_lock这个锁是否可以丢掉
--
You received this message because you are subscribed to the Google Groups "rt-thread用户组" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rt-thread-cnus...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages