admin管理员组文章数量:1568726
一、在中断中处理太多的操作是非常危险的,对中断的及时响应有很大的影响,在linux中我们经常会用到INIT_DELAYED_WORK,仔细看里面会有个定时器,用队列的形式来处理中断下半部分需要响应的操作。
二、函数原型kernel\include\linux\workqueue.h
三、相关函数
1、定义一个新的数据结构delayed_work用于处理延迟执行:
struct delayed_work {
struct work_struct work;
struct timer_list timer;
};
2、在工作队列中被调用的函数原形如下:
typedef void (*work_func_t)(struct work_struct *work);
3、初始化数据结构
INIT_DELAYED_WORK(struct delayed_work *work, work_func_t func)
4、提交任务到工作队列
int schedule_delayed_work(struct delayed_work *work, unsigned long delay);
5、删除提交到工作队列的任务
int cancel_delayed_work(strcut delayed_work *work);
6、刷新默认工作队列(常跟cancle_delayed_work一起使用)
void flush_schedlue_work(void);
四、简单的demo
struct xxx_t {
spinlock_t lock;
void __iomem *base;
struct platform_device *pdev;
struct delayed_work xxx_delayed_work;
struct workqueue_struct xxx_workqueue;
unsigned long timeout;
};
static void xxx_mond(struct work_struct *work)
{
struct xxx_t *xxx = container_of(work, struct xxx_t, xxx_delayed_work.work);
........
schedule_delayed_work(&xxx->xxx_delayed_work, msecs_to_jifies(xxx->timeout*HZ));
}
static int __devinit xxx_probe(struct platform_device *pdev)
{
struct xxx_t *xxx = container_of(pdev, struct xxx_t, pdev);
......
INIT_DELAYED_WORK(&xxx->xxx_delayed_work, xxx_mond);
schedule_delayed_work(&xxx->xxx_delayed_work, 0);
}
五、在ethernet中的应用,定时通过MIIM接口read PHY寄存器,MII接口是MAC与PHY连接的标准接口.因为各厂家采用了同样的接口,用户可以根据所需的性能、价格,采用不同型号,甚至不同公司的phy芯片.需要发送的数据通过MII接口中的收发两组总线实现.而对PHY芯片寄存器的配置信息,则通过MII总的一组串口总线实现,即MIIM(MII Management).
1、
2、
3、
4、
六、参考文章:
https://wwwblogs/yyg-cn/p/17163455.html
https://wwwblogs/youngerchina/archive/2011/12/23/5624642.html
Linux内核工作队列(workqueue)详解_linux 工作队列_咸鱼弟的博客-CSDN博客
INIT_DELAYED_WORK()的分析及使用_5念since的博客-CSDN博客
https://blog.csdn/peijian1998/article/details/8717490?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
本文标签: 队列scheduleworkINITDELAYEDWORKLinux
版权声明:本文标题:2021-06-09 Linux INIT_DELAYED_WORK schedule_work 延时队列使用学习 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725782396a1042345.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论