实验环境
开发板子:ATS2851
开发环境:ubuntu
工作队列概念
工作队列的关键属性:
• 队列:包含若干已经被添加、且还未被处理(译注:在本节后面叫做“挂起的”)工作项。
• 线程:用于处理队列中的工作项。该线程的优先级是可配置的,既可以是协作式也可以是抢占式。
工作队列必须先初始化再使用。初始化时会清空该队列,并创建一个工作队列线程。
工作项的关键属性:
• 处理函数:当工作项被处理时,工作队列线程会执行该函数。该函数接收一个参数——工作项自身的地址。
• 挂起标志:内核使用该标志表示该工作项当前是否是一个工作队列的队列中的一个成员。
• 队列链接:内核使用该链接将其链接到工作队列的队列中的下一个工作项
工作项必须先初始化再使用。初始化时会记录该工作项的处理函数,并将其标记为非挂起
ISR 或者线程可以将某个工作项提交到某个工作队列中。提交工作项时,会将其追加到工作队列的队列中去。当工作队列的线程处理完它队列里面的所有工作项后,该线程会移除一个挂起工作项,并调用该工作项的处理函数。一个挂起的工作项可能很快就会被处理,也可能会在队列中保留一段时间,这依赖于工作队列线程的调度优先级和队列中其它项的工作需求。
处理函数可以利用任何可用的内核API。不过,使用可能引起阻塞的操作(例如拿取一个信号量)时一定要当心,因为工作队列在它的上一个处理函数完成前不能处理其队列中的其它工作项。