中级会员
 
- 积分
- 451
- 金钱
- 451
- 注册时间
- 2012-4-11
- 在线时间
- 1 小时
|
一下是截取的原子哥的控制小灯的程序,我最近看了关于操作系统的那本书还是有很多疑问请看一下下面的程序
疑问:程序先创建了TaskStart然后在TaskStart里面创建了TaskLed和TaskLed1,我想问的是他们三个任务的执行顺序是怎么样的啊??第一个肯定是TaskStart这个我知道,那么
TaskLed和TaskLed1是怎么来回切换的那????都是死循环啊!!
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
SysTick_Configuration();
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);
OSTaskSuspend(START_TASK_Prio); //suspend but not delete
OS_EXIT_CRITICAL();
}
//任务1
//控制DS0的亮灭.
void TaskLed(void *pdata)
{
while(1)
{
LED0=!LED0;
OSTimeDlyHMSM(0,0,0,500);
}
}
//任务2
//控制DS1的亮灭.
void TaskLed1(void *pdata)
{
while(1)
{
LED1=!LED1;
OSTimeDlyHMSM(0,0,0,200);
}
} |
|