实时操作体系RTOS(Real Time Operating System)由于具有调度的实时性、呼应时间的可确认性、体系高度的可靠性等特色,被越来越多地运用在嵌入式体系中,如:航空航天、工业操控、轿车电子和核电站建造等很多范畴。
传统上,RTOS内核是加在运用程序中的软件,它不只增加了ROM(代码空间)和RAM(数据空间)的开支,并且增加了运用程序的额定负荷,即便在规划较好的运用体系中内核仍占用2%~5%的CPU负荷[1]。在实时性较强的场合,若无法得到及时的呼应,将会引起严重后果。因而,下降RTOS内核的体系开支及进步其实时性非常重要。
关于下降RTOS占用运用程序处理器开支的研讨,大多数会集在改善调度算法[2]和进步处理器的处理才干[3],可是依托改善调度算法已不能使其实时性有更大的进步,经过进步处理器速度也达不到抱负的效果。跟着EDA技能的开展及硬件芯片造价的下降,“软件硬件化”的趋势正在成为一个研讨的新热门。选用硬件芯片完结RTOS的功用模块极大地发挥了体系处理的并行特性,使硬件RTOS的处理速度达到了传统软件RTOS的6~50倍[4]。可是,RTOS的硬件化非常复杂、繁琐,大多由软件完结的数据结构不合适硬件的并行完结,需求从头修正、规划。
本文就详细的实时操作体系μC/OS-II的使命办理进行了硬件规划,完结了使命办理模块体系调用的硬件电路和依据组合电路的硬件使命调度器。
1 硬件RTOS总体规划
硬件RTOS由软件和硬件两部分组成,如图1所示。软件部分担任运用程序与硬件RTOS的交互,首要完结2点功用:向运用程序供给拜访硬件函数的接口;向硬件逻辑供给回来处理成果的中止处理函数和使命切换的中止处理函数。硬件部分将以往由底层软件函数完结的作业,选用硬件函数完结。
硬件RTOS依然是以体系调用的方式为运用程序服务,所不同的是由调用硬件函数代替了以往的软件函数。软件函数和硬件函数的差异[5]在于:它们被处理时地点的器材不同,软件函数编译成一条条指令在处理器上履行,硬件函数把参数经过数据总线发送到了指定硬件单元电路的寄存器中,再由硬件逻辑电路进行相应的处理。硬件电路与处理器能够并行作业,节约的处理器时间用于履行其他使命,进步了体系的可调度性。
图1中,硬件部分由输入输出寄存器、中止操控器、操控器和RTOS首要功用模块等组成。
(1)输入输出寄存器。输入寄存器接纳由接口函数传递的功用代码和参数,输出寄存器将履行成果回来给接口函数。
(2)中止操控器。接纳外部事情中止,中止操控器 运用FPGA的I/O(输入/输出)管脚,每个管脚对应一个外部中止,一个或许多个外部中止对应一个中止处理使命[6]。当外部中止到来时,相应的事情标志位被置位,中止使命被置为安排妥当态。
(3)操控器。从事情操控块和信号量操控块获悉使命的状况,结合体系调用的功用代码和参数信息,确认行将履行的操作并宣布操控信号。每个硬件单元都经过CPU宣布的操控信号进行作业。
RTOS首要功用模块包含:事情标志组办理、信号量办理、使命办理及时钟办理。
(1)事情标志组办理。事情标志组是一个数据结构,选用FPGA的片内寄存器完结,每
个事情占1 bit。使命或中止服务能够将某一方位位或复位。当使命所需求的事情产生时,则将相应的事情方位位;当使命所等候的事情都产生时,则应向操控器提出改动使命状况的相应恳求,一起将使命的ID号送给使命办理模块。
(2)信号量办理。信号量由2部分组成:16 bit的无符号整型的计数值(0~65535);等候该信号量的使命组成的等候使命表。选用可预置的双向计数器(up/down)完结计数值部分,选用FPGA片内的寄存器完结该信号量的等候使命表。寄存器的位数对应体系中的使命数,每个使命占1 bit,且初始值为0(表明没有使命等候该信号量)。等候该信号量的使命将寄存器的相应方位1,开释该信号量的使命唤醒优先级较高的等候使命,将寄存器的相应方位0。每产生一次置位或复位操作,也必须向操控器提出改动使命状况的相应恳求,一起将相应使命的ID号送给使命办理模块。
(3)使命办理。担任各种使命状况的切换和使命调度。使命办理模块接纳从输入寄存器、事情标志组办理模块或信号量办理模块传递来的使命ID号,在操控器的相应操控信号效果下,履行使命状况的切换。调度器以使命的状况为灵敏信号,当使命的状况产生改动时,触发调度器履行一次使命调度,找出当时优先级最高的安排妥当态使命。若其优先级高于当时正在运转的使命的优先级,则向CPU宣布硬件中止处理信号。
(4)定时器办理。首要完结使命的延时,当设置的延时时间到且使命没有等候其他资源时,将使命的状况置为安排妥当。
由图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,则调度器中的数据处理流程如图5所示。
2.3 仿真及试验成果
整个规划选用VHDL硬件言语描绘。为了验证该硬件完结的正确性和高效性,运用 ISE 8.2软件进行时序仿真验证。使命办理硬件完结的功用仿真如图6所示。
(1)树立使命。顺次树立3个使命,优先级与ID号相同别离为7、1和6。若体系中只需优先级为7的使命处于安排妥当态,则Next_task_id为7;当树立了优先级为1的使命时,高优先级使命掠夺低优先级使命的CPU运用权,Next_task_id为1,直到有更高优先级的使命到来,或使命本身删去,优先级为1的使命将一向履行。
(2)查询使命。处理器经过查询使命这个体系调用取得使命本身或其他运用使命的信息,查询行将TCB的内容输出。
(3)挂起使命。挂起优先级为1的使命,则优先级为6的使命开端履行。挂起的使命处于等候状况,只需经过调用使命康复函数才干康复。
(4)树立使命。树立优先级别离为5、2和4的3个使命。优先级为5的使命掠夺优先级为6的使命的CPU运用权,优先级为2的使命又掠夺优先级为5的使命的CPU运用权开端履行,优先级为4的使命等候。
(5)删去使命。删去了优先级为2的使命,此时体系中优先级为4的使命开端履行。
(6)康复使命。康复优先级为1的使命,优先级为1的使命掠夺优先级为4的使命的CPU运用权又从头开端履行。
从图6能够看出,硬件完结能够高效完结操作体系使命办理的体系调用的功用。树立使命和删去使命需求3个时钟节拍,挂起使命、康复使命和查询使命的状况需求1个时钟节拍。使命调度是实时的,只需使命的状况或优先级有一个产生改动,就马上从头调度。该规划所耗费的逻辑资源较少,下降了开发本钱,使其集成组件成为或许。
本文针对传统实时操作体系内核占用体系资源、影响体系实时性的问题,提出了用独自的硬件电路完结实时操作体系中的体系调用和使命调度器的计划。要点给出了选用FPGA完结μC/OS-Ⅱ使命办理模块的进程。仿真成果表明,使命办理的硬件完结坚持了体系调用的正确性,一起减少了体系调用的履行时间、下降了处理器体系开支。因而,硬件RTOS的完结,具有必定研讨和运用价值。