|
我创建了两个led的任务
- #define LED0_TASK_PRIORITY 10 //led0任务优先级
- #define LED1_TASK_PRIORITY 11 //led1任务优先级
- #define LED_TASK_STACK_SIZE 256 //led任务栈空间大小
- PORT_STACK led0_stack[LED_TASK_STACK_SIZE] = {0}; //led0 任务栈空间
- PORT_STACK led1_stack[LED_TASK_STACK_SIZE] = {0}; //led1 任务栈空间
- RAW_TASK_OBJ led0_task_obj; //led0任务结构体
- RAW_TASK_OBJ led1_task_obj; //led1任务结构体
- void Led_0_test(void *par)
- {
- RAW_TASK_OBJ *local = (RAW_TASK_OBJ *)par;
- //在最高优先级任务中启动定时器
- Timer2_Init(100, 7200);//TIM2的时钟频率为72M/7200 = 10KHz, 重装载值为100,10ms中断一次
- while(1)
- {
- Led_TurnOn();
- printf("Task %s is running\n", local->task_name);
-
- raw_sleep(100); //睡眠100ticks = 100 * 10 = 1s
- }
- }
- void Led_1_test(void *par)
- {
- RAW_TASK_OBJ *local = (RAW_TASK_OBJ *)par;
-
- while(1)
- {
- Led_TurnOff();
- printf("Task %s is running\n", local->task_name);
- raw_sleep(100);
- }
- }
- RAW_U8 led_task_test(void)
- {
- raw_task_create(&led0_task_obj, "Led_0_task", (RAW_VOID *)&led0_task_obj, LED0_TASK_PRIORITY, 0, &led0_stack[0], LED_TASK_STACK_SIZE, Led_0_test, 1);
- raw_task_create(&led1_task_obj, "Led_1_task", (RAW_VOID *)&led1_task_obj, LED1_TASK_PRIORITY, 0, &led1_stack[0], LED_TASK_STACK_SIZE, Led_1_test, 1);
- return 1;
- }
复制代码
在调用Led_0_test()中的sleep时,运行sleep中的RAW_CRITICAL_EXIT()会进行任务切换,从而运行Led_1_test()。
我不明白的是怎么进行的任务切换,这其中到底经过了一个怎样的过程。
麻烦大家帮忙解答下。
|
|