初级会员
- 积分
- 101
- 金钱
- 101
- 注册时间
- 2020-11-5
- 在线时间
- 20 小时
|
1金钱
- void start_task(void* pvParameters)
- {
-
- xTaskCreate((TaskFunction_t) TASK1_task, //创建任务1
- (char* ) "TASK1_task",
- (uint16_t ) TASK1_STACK_SIZE,
- (void* ) NULL ,
- (UBaseType_t ) TASK1_TASK_PRIO,
- (TaskHandle_t* ) &TASK1_Handler );
- xTaskCreate((TaskFunction_t) TASK2_task, //创建任务2
- (char* ) "TASK2_task",
- (uint16_t ) TASK2_STACK_SIZE,
- (void* ) NULL ,
- (UBaseType_t ) TASK2_TASK_PRIO,
- (TaskHandle_t* ) &TASK2_Handler );
-
- <b>vTaskDelete(NULL); //删除start_task任务
- </b>}
- void TASK1_task(void* pvParameters)
- {
- for(;;)
- {
- delay_ms(1000);
- }
- }
- void TASK2_task(void* pvParameters)
- {
- char List[100];
- vTaskList(List);
- printf("%s",List);
- for(;;)
- {
- delay_ms(1000);
- }
-
- }
- 串口信息:
- TASK2_task R 3 438 5
- start_task R 1 86 1
- IDLE R 0 120 2
- TASK1_task B 2 104 4
- Tmr Svc S 31 236 3
- Q:
- 1.已经将start_task任务删除了,但是通过vtasklist()打印出来显示start_task还是运行态呢?
- 2.而且为什么TASK1_Task是阻塞态呢?
- 3.当我把Task1_task中的delay_ms删除后变为空循环,Task2_task中的串口就打印不出来了?(任务堆栈大小足够)
- (刚刚学习两天,谢谢大神们的耐心讲解)
复制代码
|
最佳答案
查看完整内容[请看2#楼]
缺少很重要的一个信息就是延时函数的实现
所以根据结果和上面的程序内容可以反推这个结果的原因
在delay_ms延时函数中使用的api函数
那么这个整个逻辑就是
系统开始运行,然后运行start_task
在start_task中先创建TASK1_task,然后TASK1_task抢占start_task任务开始运行(这时候TASK2_task还没出生呢)
TASK1_task运行延时函数中的api函数释放了cpu后(其实也就是TASK1_task阻塞态的原因)start_task继续运行开始创建TASK2_task
...
|