在Android的kernel的TP和Camera驱动中使用定时器对I2C做了一些操作,结果都使系统挂掉了,使用work_struct可解决此问题,使用方法如下:
static struct work_struct my_work;//定义
static void my_work_func(struct work_struct *work)//函数实现
{
//把定时器中做的事情(如:读写I2C)放在此处
}
schedule_work(&my_work);//在定时器调用的函数中添加此句
INIT_WORK(&my_work, my_work_func);//初始化
原因:据说是timer里面不能延时,但读写I2C的函数里面会调用延时函数,改到工作队列即可。