一种高效实时多任务操作系统内核的制作方法

文档序号:6577127阅读:405来源:国知局
专利名称:一种高效实时多任务操作系统内核的制作方法
技术领域
本发明涉及计算机技术,特别是嵌入式单片机技术。
背景技术
在电力电子应用中,电源控制一般在10KHz-50KHz电压电流闭环;电机调速一般 在ΙΚΗζ-ΙΟΚΗζ闭环。速度闭环一般在50-500HZ闭环。另外还有I/O处理,通讯,界面等不 同速度等级的任务。采用常规的顺序执行加中断的方法,一般都要采用DSP才能达到要求。 本发明基于对8051结构的多组通用寄存器的资源分配,避免了任务调度时对通用寄存器 组的保护及恢复,从而实现了一个高效的实时多任务操作系统内核。在一个20MIPS的增强 型8051单片机上,本内核执行速度仅为10 μ s。

发明内容
本发明针对实时多任务的工业控制要求,提出了一种基于8051的高效实时多任 务操作系统内核。其特征是,以通用寄存器组划分任务,每组通用寄存器组只供一个任务使 用;以中断或非中断驱动任务调度,在任务调度时只保存特殊寄存器内容(A,B,PSW,DPTR, PC);每个任务的特殊寄存器组有各自的内容映射区;每次调度任务时,先将该任务状态字 找出被调度的任务在内存映射区的偏移量,并将该任务的特殊寄存器恢复,即恢复该任务 的断点及断点处状态及特殊寄存器值;由于PSW包含了通用寄存器组的信息,且各个任务 只使用各自的通用寄存器组,故不需保护及恢复通用寄存器组,从而大大提高了执行速度。


图1为为各个任务所分配的通用寄存器组及特殊寄存器组的内存映射。由于资源 的限制,将RB3由Task3及中断共享,即Task3只能使用RB3的R0-R3,而中断只能使用RB3 的 R4-R7。图2为对应一个任务的特殊寄存器的内存映射区结构。图3为系统程序流程图。图4为每个任务的程序流程图。图5为中断处理中的任务调度流程图。具体实施方法如图1所示,将4组通用寄存分别分配给TaSkO,TaSkl,TaSk2,TaSk3。其中,由于资源限制,RB3由Task3及中断分享,即R0-R3给Task3,R4_R7给中断使用。图2给出了对 应于每一个任务的特殊寄存器内存映射的结构,由于PSW. 4及PSW. 3选择了通用寄存器组,故该两位也就决定了任务号。图3为系统程序结构图。我们看到,各个框图间没有直接联系。任务调度可以由中断完成,也可以在每个任务结束时完成。图4为一个任务的基本结构。除去常规的事件处理程序外,每个任务可以处理所有任务的状态位。我们规定 TaskSta. O, TaskSta. 1,TaskSta. 2,TaskSta. 3 分别表示 TaskO, Taskl, Task2, Task3的状态,“ 1 ”为激活,“O”为挂起,并且规定优先级为TaskO,Taskl, Task2, Task3递减。每次本任务结束时,即消除该状态位。图5为中断程序的任务调度流程图。将PSW. 4及PSW.3做为偏移量,即可找出当 前任务的内存映射区,并将当前任务的特殊寄存器内容保存。任务状态位则可以在中断中 处理,也可以在普通任务中处理。根据任务状态字,即可找出目前优先级最高的任务号;将 该任务的特殊寄存器从内存映射区中恢复,退出中断时该任务便自动从上次断点处原状态 执行。下面列出了一个典型的主程序和任务调度原码。可以看到,各个任务在程序结构 上完全解耦。CSEG AT 200HtaskO ;800Hzcall pwm_con0call tx_sub0call filterOINCA ModuleCntINCA StateCntmov DPTR, #task0inc TBaseOmov A, TBaseOanl A, #0FHENDT_NZ #0FEHorl TaskSta, #2;Taskl is activatedanl TaskSta, #0FEHDESP_TASKret;----------------------------------taskl ;50Hzcall load_monl;monitoring discharge ratecall clockmov DPTR, #tasklinc TBaselmov A, TBaselanl A, #07HENDT_NZ #0FDHorl T£iskSt£i,#04;activate Task2anl TaskSta, #0FDHDESP_TASKret
;--------------------------------------task2 ;6. 25Hzcall tx_sub2callled_sub2mov DPTR, #task2DECAS CntRev,RevOFanlTaskSta, #0FBHDESP_TASKret;---------------------------------------------------task3 mov DPTR, #task3DESP_TASKretDESP_TASK MACROlocal loopmov A, PSff;save the current PCanl A,#18Horl A, #TaskBuf+6;+6/7 for PCmovR0, A ;get the return address for current taskmov §R0, DPH;PCH(taskn)inc ROmov §R0, DPL;PCLmov A, TaskStamov R0, #0FFHloop inc ROrrc Ajnc loopmov A, ROrl Arl Arl A;PSff. 3/. 4 are the RS0/1anl A,#18Horl A, #TaskBuf+7;get buffer address of the chosen taskmov R0,Amov A, _;recoverypush ACC;PCL into stack
decROmo νA, @R0pushACC; PCHdecRO
mo νDPL,iRO; DPLdecROmovDPH, iRO;DPHdecROmovB, @R0;BdecROmovA, @R0;ApushACC;into stack as welldecROmovA, iRO;RO-not the current RO !pushACC;into stack as welldecROmovPSff, iRO;PSff-register bank changedpopACCmovRO,A;RO recoveredpopACC;A recoveredENDM
权利要求
一种基于8051的高效实时多任务操作系统内核。其特征是,以通用寄存器组划分任务,每组通用寄存器组只供一个任务使用;以中断或非中断驱动任务调度,在任务调度时只保存特殊寄存器内容;每个任务的特殊寄存器组有各自的内容映射区;每次调度任务时,先将该任务状态字找出被调度的任务在内存映射区的偏移量,并将该任务的特殊寄存器恢复,即恢复该任务的断点及断点处状态及特殊寄存器值。
2.如权利要求1所述的高效实时多任务操作系统内核,可以移植到任何具有多组通用 寄存器组的单片机上。
全文摘要
一种高效实时多任务操作系统内核。基于对8051结构的多组通用寄存器的资源分配,避免了任务调度时对通用寄存器组的保护及恢复,从而实现了一个高效的实时多任务操作系统内核。以通用寄存器组划分任务,每组通用寄存器组只供一个任务使用;以中断或非中断驱动任务调度,在任务调度时只保存特殊寄存器内容(A,B,PSW,DPTR,PC);每个任务的特殊寄存器组有各自的内容映射区;每次调度任务时,先将该任务状态字找出被调度的任务在内存映射区的偏移量,并将该任务的特殊寄存器恢复,即恢复该任务的断点及断点处状态及特殊寄存器值;由于PSW包含了通用寄存器组的信息,且各个任务只使用各自的通用寄存器组,故不需保护及恢复通用寄存器组,从而大大提高了执行速度。
文档编号G06F9/46GK101826032SQ200910127320
公开日2010年9月8日 申请日期2009年3月6日 优先权日2009年3月6日
发明者古俊银 申请人:英伟力新能源科技(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1