在原子的例程《扩展实验14 UCOSII多任务运行LED+KEY+LCD+触摸画笔》中,
在建立一个开始任务后,启动这个开始任务。在这个开始任务中仅仅只是建立了4个
子任务,然后将这个任务挂起。那4个子任务是如何的启动的呢???
int main(void)
{
SystemInit(); //系统初始化 72M
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);//串口初始化,波特率9600
LED_Init(); //LED0,LED1端口初始化
KEY_Init(); //KEY端口初始化
LCD_Init(); //LCD显示初始化
SPI_Flash_Init();
AT24CXX_Init(); //IIC初始化
Touch_Init(); //触摸屏初始化
delay_ms(500);
Load_Drow_Dialog();
POINT_COLOR=RED;
OSInit();
OSTaskCreate( TaskStart, //task pointer
(void *)0, //parameter
(OS_STK *)&TASK_START_STK[START_STK_SIZE-1], //task stack top pointer
START_TASK_Prio ); //task priority
OSStart();
return 0;
}
//开始任务
void TaskStart(void * pdata)
{
pdata = pdata; //
OS_ENTER_CRITICAL();
OSTaskCreate(TaskLed, (void * )0, (OS_STK *)&TASK_LED_STK[LED_STK_SIZE-1], LED_TASK_Prio);
OSTaskCreate(TaskLed1, (void * )0, (OS_STK *)&TASK_LED1_STK[LED1_STK_SIZE-1], LED1_TASK_Prio);
OSTaskCreate(TaskLCD, (void * )0, (OS_STK *)&TASK_LCD_STK[LCD_STK_SIZE-1], LCD_TASK_Prio);
OSTaskCreate(TaskKey, (void * )0, (OS_STK *)&TASK_KEY_STK[KEY_STK_SIZE-1], KEY_TASK_Prio);
OSTaskCreate(TaskTouch, (void * )0, (OS_STK *)&TASK_TOUCH_STK[TOUCH_STK_SIZE-1], TOUCH_TASK_Prio);
OSTaskSuspend(START_TASK_Prio); //suspend but not delete
OS_EXIT_CRITICAL();
}
就算能启动,那么根据优先级顺序,就会执行任务void TaskKey(void *pdata),在这个任务中调用
延时函数 OSTimeDlyHMSM() ,当时间到期时,就会在就绪表中选择一个最高优先级的任务执行,
但是最高优先级的任务还是
void TaskKey(void *pdata) 啊??? 那难道不会出不来这个任务吗???
其他的任务就没机会执行了啊????
|