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 */ } }
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 */ } }
//启动多个任务 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(); //调用高优先级就绪任务启动函数 } }
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 */ } }