微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的μC/OS-II任务管理硬件设计

基于FPGA的μC/OS-II任务管理硬件设计

时间:02-17 来源:互联网 点击:

资源时,将任务的状态置为就绪。

由图1可知,硬件RTOS的工作过程如下:

  (1)在应用程序中调用系统服务。

  (2)系统调用的接口函数将功能代码和参数传给硬件部分的输入寄存器。

  (3)硬件部分执行系统调用。

  (4)在硬件逻辑执行系统调用的过程中,可以接收外部事件的异步请求,因此,硬件部分执行系统调用过程中可能转向以下不同的处理过程:

  ①若外部事件请求使中断任务就绪,则向处理器发出要求任务切换的硬件中断请求。

  ②若系统调用使高优先级的任务就绪,则硬件部分向处理器发出要求任务切换的硬件中断请求。

  ③硬件部分完成系统调用功能,则采用中断形式通知处理器并回送处理结果。

  (5)中断处理函数完成任务切换。

  (6)处理器执行新任务。

2 μC/OS-II任务管理硬件设计

任务管理是RTOS的核心,本文首先对μC/OS-II任务管理模块进行了硬件设计,其他的模块可以依托任务管理展开。μC/OS-II任务管理主要包括建立任务、删除任务、挂起任务、恢复任务、查询任务和任务调度等。其中建立任务、删除任务、挂起任务、恢复任务和查询任务是通过系统调用形式交给用户调用的;而任务调度是交给系统函数调用的,用户不能直接调用它。因此,本文将任务管理分成系统调用函数的硬件实现和任务调度器硬件实现2部分。

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的数据结构全部采用片内的寄存器资源实现,从而节省了链表的查找时间,提高了系统调用的执行效率。

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,则调度器中的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top