金牌会员
- 积分
- 1180
- 金钱
- 1180
- 注册时间
- 2018-9-11
- 在线时间
- 132 小时
|
100金钱
移植了FreeRTOS到STM32F4开发板上,一共创建了4个任务
一个开始任务 三个运行任务 开始任务用来创建其它三个任务
第一个任务
void start_location_task(void *pvParameters)
{
taskENTER_CRITICAL();
while(runOnce)
{
send_start_Location();
runOnce = false;
}
vTaskDelete(START_LOCATIONTask_Handler);
taskEXIT_CRITICAL();
}
第二个任务
void analyze_task(void *pvParameters)
{
u8 buf;
while(1)
{
printf("111111111111\r\n");
vTaskDelay(10);
}
}
第三个任务
void data_task(void *pvParameters)
{
while(1)
{
printf("222222222\r\n");
vTaskDelay(1000);
}
}
第一个任务运行一次后就删除了,剩下第二和第三个任务运行。
问题是,如果我在第三个任务中调用vTaskDelay()函数,
程序运行起来后,第二和第三个任务就运行一次,然后卡在了 configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); 这个函数上,
把第三个任务的vTaskDelay()函数注释掉后,第二和第三个任务就能持续运行,这是为啥?
有没有大佬指点一下的!!
附上任务优先级配置:
#define START_TASK_PRIO 1
#define START_STK_SIZE 128
TaskHandle_t StartTask_Handler;
void start_task(void *pvParameters);
#define ANALYZE_TASK_PRIO 4
#define ANALYZE_STK_SIZE 256
TaskHandle_t ANALYZETask_Handler;
void analyze_task(void *pvParameters);
#define START_LOCATION_TASK_PRIO 2
#define START_LOCATION_STK_SIZE 128
TaskHandle_t START_LOCATIONTask_Handler;
void start_location_task(void *pvParameters);
#define DATA_TASK_PRIO 3
#define DATA_STK_SIZE 512
TaskHandle_t DATATask_Handler;
void data_task(void *pvParameters);
|
|