基于FPGA的μC/OS-II任务管理硬件设计
来源:电子工程世界 作者:—— 时间:2010-04-28 09:45
2.1 任务管理系统调用函数的硬件设计
μC/OS-II的任务由3部分组成:即任务程序代码、任务堆栈、任务控制块TCB(Task Control Block)。TCB把任务代码和任务堆栈进行关联而使三者成为一个整体。
任务管理系统调用的硬件实现电路如图2所示。参数1是建立任务时,写入TCB的任务代码段地址、任务优先级、任务的参数指针和分配给任务的堆栈栈顶指针等任务运行和管理的信息;参数2是分配给任务的ID号。每个任务依据任务的ID号对应一个TCB。
在图2中,任务管理系统调用的硬件实现电路主要由分配器、选择器和TCB寄存器组成。
(1)分配器。建立任务和删除任务时,分配器根据任务的ID号选择建立任务的信息送到对应的输出通道上,分配器的输出端与多路选择器的一路输入端直连,即参数1被送到了选择器的输入端,作为一路输入。挂起任务和恢复任务时,分配器根据任务的ID号,将任务的状态送到对应TCB的状态寄存器中。
(2)选择器。选择器的输入端分别是建立任务时要送给 TCB的数据(参数1)和删除任务时要送给TCB的数据(系统初始值),数据输出端与一个TCB块直连。建立信号有效时,选择参数1写入TCB,建立任务完成;否则,写入系统的初始值覆盖TCB信息,即任务被删除。挂起和恢复任务只需根据任务的ID号找到相应的TCB并修改其状态寄存器的值。二值选择器的输入端是0和1,可以分别表示任务的等待和就绪状态。
(3)TCB寄存器。在软件实现的RTOS中,空闲TCB块和已占用的TCB块分别以空闲任务链表和任务链表的形式常驻内存。但是基于链表的软件算法并不适合直接采用硬件高效实现,因为只有读取链表的前一个表项的内容后,才能获得后续表项的地址,限制了硬件并行的开发。因此,本文将TCB的数据结构全部采用片内的寄存器资源实现,从而节省了链表的查找时间,提高了系统调用的执行效率。