zephyr os 工作队列

本文介绍了Zephyr OS中的工作队列,包括其关键属性如队列和线程,工作项的属性,延迟工作队列的使用,以及工作队列的初始化和操作方法。工作队列线程可以是协作式或抢占式的,处理函数需要注意避免阻塞操作。延迟工作项允许设定延迟时间后再执行。系统工作队列在设备初始化时被创建,是协作式线程。
摘要由CSDN通过智能技术生成

实验环境

开发板子:ATS2851
开发环境:ubuntu

工作队列概念

工作队列的关键属性:

• 队列:包含若干已经被添加、且还未被处理(译注:在本节后面叫做“挂起的”)工作项。
• 线程:用于处理队列中的工作项。该线程的优先级是可配置的,既可以是协作式也可以是抢占式。
工作队列必须先初始化再使用。初始化时会清空该队列,并创建一个工作队列线程。

工作项的关键属性:

• 处理函数:当工作项被处理时,工作队列线程会执行该函数。该函数接收一个参数——工作项自身的地址。
• 挂起标志:内核使用该标志表示该工作项当前是否是一个工作队列的队列中的一个成员。
• 队列链接:内核使用该链接将其链接到工作队列的队列中的下一个工作项

工作项必须先初始化再使用。初始化时会记录该工作项的处理函数,并将其标记为非挂起

ISR 或者线程可以将某个工作项提交到某个工作队列中。提交工作项时,会将其追加到工作队列的队列中去。当工作队列的线程处理完它队列里面的所有工作项后,该线程会移除一个挂起工作项,并调用该工作项的处理函数。一个挂起的工作项可能很快就会被处理,也可能会在队列中保留一段时间,这依赖于工作队列线程的调度优先级和队列中其它项的工作需求。

处理函数可以利用任何可用的内核API。不过,使用可能引起阻塞的操作(例如拿取一个信号量)时一定要当心,因为工作队列在它的上一个处理函数完成前不能处理其队列中的其它工作项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个专研技术的小蜜蜂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值