关于OSInit、OSStart、OSTaskCreate函数的理解 ucosiii ostaskcreate

关于OSInit、OSStart、OSTaskCreate函数的理解

在uC/OSII中,OSInit();是一个重要的函数,它在OS应用中的voidmain();函数中首先被调用,是OS运行--的第一个函数。它完成各初始变量的初始化,建立任务空闲键表OSTCBFreeList,建立事件空闲键表OSEventFreeList.创建一个空闲任务OS_TaskIdle等。

OSInit ( );

原形如下:VoidOSInit(void)

{

OS_InitMisc( );//完成一般变量初始化

OS_InitRdyList();//就绪列表初始化

OS_InitTCBList();//空闲任务键表OSTCBFreeList建立

OS_InitEventList();//事件空闲键表OSEventFreeList建立。

OS_FlagInit( );//其它相关功能参数初始化。

OS_MemInit( );

OS_QInit( );

OS_InitTaskIdle();//创建空闲任务OS_TaskIdle.

OS_InitTaskStat( );

OSInitHookEnd( );

}

OSTaskCreate()是创建任务的一种函数,另外一种是OSTaskCreateExt(),可以创建扩展的任务。OSTaskCreate()有4个参数,第一个:要创建的任务函数,第二个:传递给任务的指针,第三个:任务堆栈的栈顶的指针,第四个:任务的优先级.这四个参数是创建普通任务所必须的。调用成功OSTaskCreate()后,将返回OS_NO_ERR。

INT8UOSTaskCreate (

void(*task)(void*pd),指向任务的指针;
void*pdata,传递给任务的参数;
OS_STK *ptos,指向任务堆栈栈顶的指针;
INT8U prio 任务的优先级

);

在调用启动任务函数OSStart(),必须已经创建了一个任务,任务可在调用函数OSStart(),启动任务之前来创建,也可在任务中来创建。OSStart()函数是uC/OS-II任务调度的引导函数,它调用更底层的函数OSStartHighRdy()来完成最初的任务切换。

voidOSStart (void)
{
INT8Uy;
INT8Ux;
if(OSRunning == FALSE) {
y= OSUnMapTbl[OSRdyGrp];
x= OSUnMapTbl[OSRdyTbl[y]];
OSPrioHighRdy = (INT8U)((y << 3) +x);
OSPrioCur= OSPrioHighRdy;
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
OSTCBCur= OSTCBHighRdy;
关于OSInit、OSStart、OSTaskCreate函数的理解 ucosiii ostaskcreate
OSStartHighRdy();
}
}

OSStartHighRdy()函数需要用户移植实现,是由汇编来完成,主要的工作是:OSRunning= TRUE;调用OSTaskSwHook()函数;设置处理器的堆栈指针寄存器为 OSTCBHighRdy->OSTCBStkPtr;恢复所有处理器的寄存器内容(不包括堆栈指针寄存器和PC寄存器);恢复PC寄存器并开始执行PC指向的指令。OSTCBHighRdy是一个指向处于就绪状态的优先级最高的任务的TCB的指针。OSTCBStkPtr是指向当前任务堆栈栈顶的指针。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/258284.html

更多阅读

left函数的使用方法 sumif函数的使用方法

left函数的使用方法——简介在excel中left函数可以给我们提供很多方便,平时也经常用到。该函数相对而言比较简单,本文就介绍下left函数怎么用。left函数的使用方法——工具/原料office excelleft函数的使用方法——方法/步骤left函

转载 辨伪影视小说中关于雍正蒸人、炸人的问题 瓷器辨伪

我真的很想对那些乱评乱写雍正的人说评价历史人物也同样要个客观公正同样是要凭良心负责任的励精图治一世不容易雍正狠是狠但雍正那是对官狠几时见他对百姓狠过?看看雍正的悦心集就能知道他为人处世的准则了个人认为二月河笔下的雍正

声明:《关于OSInit、OSStart、OSTaskCreate函数的理解 ucosiii ostaskcreate》为网友那道傷疤分享!如侵犯到您的合法权益请联系我们删除