Example #1
0
void  OSStart (void)
{
    INT8U y;
    INT8U x;
#ifdef __DEBUG__
	INT8U debug_num[] = {'0','x','0','0','0','0','0','0','0','0',0};
#endif

    if (OSRunning == FALSE) {
        y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
        x             = OSUnMapTbl[OSRdyTbl[y]];
        OSPrioHighRdy = (INT8U)((y << 3) + x);
        OSPrioCur     = OSPrioHighRdy;
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
        OSTCBCur      = OSTCBHighRdy;
#ifdef __DEBUG__
	putc_string("\n\r");
	putc_string("OSStartHighRdy() enter");
	putc_string("\n\r");
	putc_string("OSPrioHighRdy:  ");
	num_to_char(OSPrioHighRdy,debug_num);
	putc_string(debug_num);
#endif
        OSStartHighRdy();                            /* Execute target specific code to start task     */
    }
}
Example #2
0
void  OSStart (void)
{
       if (OSRunning == OS_FALSE) 
        {
        OS_SchedNew();                               /* Find highest priority's task priority number   */
        OSPrioCur     = OSPrioHighRdy;
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
        OSTCBCur      = OSTCBHighRdy;
        OSStartHighRdy();                            /* Execute target specific code to start task     */
       }
}
Example #3
0
//启动多个任务 START MULTITASKING
//描述: 当调用OSStart()时,OSStart()从任务就绪表中找出那个用户建立的优先级最高任务的任务控制
//		块。然后,OSStart()调用高优先级就绪任务启动函数OSStartHighRdy(),(见汇编语言文件
//		OS_CPU_A.ASM),这个文件与选择的微处理器有关。实质上,函数OSStartHighRdy()是将任务栈中
//		保存的值弹回到CPU寄存器中,然后执行一条中断返回指令,中断返回指令强制执行该任务代码。
//		高优先级就绪任务启动函数OSStartHighRdy()。
//参数: 无
//返回: 无
//注意: OSStartHighRdy() 必须:
//		a) OSRunning为真,指出多任务已经开始
//		b) 启动uC/OS-II之前,至少必须建立一个应用任务
//	    c) OSStartHighRdy()将永远不返回到OSStart()
void  OSStart (void)
{
    INT8U y;
    INT8U x;
    if (OSRunning == FALSE) {//OSRunning已设为"真",指出多任务已经开始
        y             = OSUnMapTbl[OSRdyGrp];        //查找最高优先级别任务号码
        x             = OSUnMapTbl[OSRdyTbl[y]];
        OSPrioHighRdy = (INT8U)((y << 3) + x);		 //找出就绪态最高级任务控制块
        OSPrioCur     = OSPrioHighRdy;				 //OSPrioCur和OSPrioHighRdy存放的是用户应用任务的优先级
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
        OSTCBCur      = OSTCBHighRdy;
        OSStartHighRdy();                            //调用高优先级就绪任务启动函数
    }
}
Example #4
0
void  OSStart (void)
{
    INT8U y;
    INT8U x;


    if (OSRunning == FALSE) {
        y             = OSUnMapTbl[OSRdyGrp];        /* Find highest priority's task priority number   */
        x             = OSUnMapTbl[OSRdyTbl[y]];
        OSPrioHighRdy = (INT8U)((y << 3) + x);
        OSPrioCur     = OSPrioHighRdy;
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
        OSTCBCur      = OSTCBHighRdy;
        OSStartHighRdy();                            /* Execute target specific code to start task     */
    }
}