移植μC/OS-Ⅱ
OSTaskCreateExt()建立任务的,因为它希望在任务OS_TCB中
有.OSTCBExtPtr域,该域包含了指向浮点寄存器的指针。
VoidOSTaskCreateHook(OS_TCB*ptcb)
{
if(ptcb->OSTCBExtPtr!=(void*)0){
/* 储存浮点寄存器的内容到..*/
/*..TCB扩展域中 */
}
}
当用户通过调用OSTaskDel()来删除任务时都会调用该函数。这样用户就可以处理OSTaskCreateHook()所分配的内存。 OSTaskDelHook()就在TCB从TCB链中被移除前被调用。
用户还可以通过使用OSTaskDelHook()来触发示波器或逻辑分析仪,以及设置断点。
参数
ptcb是指向所创建任务的任务控制块的指针。
返回值
无
注意事项
该函数在被调用的时候中断是禁止的。 因此用户应尽量减少该函数中的代码以缩短中断
的响应时间。
范例
voidOSTaskDelHook(OS_TCB*ptcb)
{
/* 输出信号触发示波器 */
}
当执行任务切换时都会调用该函数。全局变量OSTCBHighRdy指向得到CPU的任务的TCB,而OSTCBCur指向被切换出去的任务的TCB。OSTaskSwHook()在保存好了任务的寄存器和保存好了指向当前任务TCB的堆栈指针后马上被调用。 用户可以用该函数来保存或恢复浮点寄存器或MMU寄存器的内容,来得到任务执行时间的轨迹以及任务被切换进来的次数等等。
参数
无
返回值
无
注意事项
该函数在被调用的时候中断是禁止的。 因此用户应尽量减少该函数中的代码以缩短中断的响应时间。
范例
voidOSTaskSwHook(void)
{
/* 将浮点寄存器的内容储存在当前任务的TCB扩展域中。 */
/* 用新任务的TCB扩展域中的值更新浮点寄存器的内容。 */
}
该函数每秒钟都会被μC/OS-Ⅱ的统计任务调用。OSTaskStatHook()允许用户加入自己的统计功能。
参数
无
返回值
无
注意事项
统计任务大概在调用OSStart()后再过5秒开始执行。注意,当OS_TASK_STAT_EN或者
OS_TASK_CREATE_EXT_EN被置为0时,该函数不会被调用。
范例
voidOSTaskStatHook(void)
{
/* 计算所有任务执行的总时间 */
/* 计算每个任务的执行时间在总时间内所占的百分比 */
}
只要发生时钟节拍,该函数就会被OSTimeTick()调用。一旦进入OSTimeTick()就会马上调用OSTimeTickHook()以允许执行用户的应用程序中的与时间密切相关的代码。用户还可以通过使用该函数触发示波器或逻辑分析仪来调试,或者为仿真器设置断点。
参数
无
返回值
无
注意事项
OSTimeTick()通常是被ISR调用的, 所以时钟节拍ISR的执行时间会因为用户在该函数
中提供的代码而增加。当OSTimeTick()被调用的时候,中断可以是禁止的也可以是允许的,
这主要取决于该处理器上的移植是怎样进行的。如果中断是禁止的,该函数将会影响到中断
响应时间。
范例
voidOSTimeTickHook(void)
{
/* 触发示波器 */
}
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
