基于FPGA的μC/OS-II任务管理硬件设计
来源:电子工程世界 作者:—— 时间:2010-04-28 09:45
2.2 任务调度器的硬件设计
μC/OS-II进行任务调度的思想是,每时每刻总是让优先级最高的就绪任务处于运行状态。为了实现高效的调度算法,采用组合电路实现硬件调度器,如图3所示。以优先级为选择条件,将TCB中的状态寄存器直接与调度器相连接。这样,只要任务的优先级或任务的状态有一个发生改变,就会立刻引发一次任务的的重新调度。
图3中,数据分配器与TCB寄存器中的状态寄存器RDY输出端直连,使用优先级PRI作为选择条件,将RDY的就绪态(RDY=‘1’)分配到不同的输出通道上。寄存器REG_X接收数据分配器输出通道的输出值并按位存储。将所有的REG_X寄存器按位进行或运算,结果送寄存器PRI_REG。如图4所示,优先级寄存器PRI_REG的位数对应系统中任务的个数,寄存器PRI_REG某位为1就表示相应优先级的任务处于就绪态,且低位的优先级依次高于高位的优先级。译码器从寄存器读取PRI_REG的值进行译码,送出处于就绪态且优先级最高的任务。比较器PRI_COMP以任务的ID号为索引,任务的优先级PRI为比较内容。将每个任务的优先级与译码找到的就绪态的最高优先级相比较,若相同,则输出任务的ID号,否则输出0。最后将所有比较器PRI_COMP的输出做或运算,即得到处于就绪态的优先级最高任务的ID号。
假设在某一时刻,系统中优先级PRI为1、2、3、6和7的任务处于就绪态,对应任务的ID号分别是010、100、001、110和111,则调度器中的数据处理流程如图5所示。