实时嵌入式操作系统μC/OS-II在MPC555上的移植
3 任务切换
μC/OS-II中的任务调度由函数OSSched( )完成。在Intel 80x86系统上,OSSched( )在获得当前新的最高优先级的任务指针后,调用CPU软中断完成任务切换。
在MPC555上,可以用系统调用异常处理程序"System Call Exception"代替软中断。该异常处理程序如图3所示,完成以下三个步骤:①在prologue( )中将当前任务运行环境保存到当前任务的堆栈中;②调用任务级调度函数OSCtxSw( ),将新的高优先级就绪态任务调整为当前任务;③从新任务堆栈中弹出所有寄存器的值,恢复中断,完成任务切换。其中①、③两部分代码与中断管理程序相同,不需要重新编写,只需编写函数OSCtxSw( )完成任务指针的切换工作。
任务切换过程不可以被打断,所以,上述过程中始终不能打开中断。
4 时钟管理
μC/OS-II需要在系统初始化后,开始一个系统时钟节拍,它是OS系统的时间基准。该时钟节拍一般由时间中断产生。 MPC555中可产生时间节拍的模块有很多,本次移植选用DEC异常。因为它与外部中断使用不同的异常向量,便于对异常事件的管理,有利于提高OS的稳定性。
DEC时钟同步于TMBCLK,其频率可选,本次移植设置为2.5MHz。代码在时钟初始化和每次进入DEC异常时,将DEC计数器设置为2.5M/OS_TICKS_PER_SEC,这样,可使OS每秒种产生OS_TICKS_PER_SEC个时钟节拍。
5 应用方法
在使用移植后的OS时,用户需要编写自己的主程序main( ),其流程如图4。在适当的初始化后即可启动OS。
另外,用户需在TaskStart任务中启动时钟节拍,调用OSStatInit( )函数初始化统计任务,创建所需的其他任务,最后调用OSTaskDel( )函数删除TaskStart任务自己。OS在该函数调用结束后,会自动允许异常和中断,OS正常运转,不断调度任务,响应中断。
- 支持网络传感器的嵌入式操作系统设计(11-10)
- 嵌入式操作系统WinCE(02-20)
- μC/OS-Ⅱ在MSP430F149上的移植(03-01)
- 嵌入式操作系统uClinux和eCos的比较(03-01)
- 基于μc os ii的农田信息采集系统设计(03-16)
- 基于关键点控制的网络嵌入式设备在线升级的实现(04-24)