STM32移植FreeRTOS无法启动任务的解决方法
在实验过程中将FreeRTOS源码全部包含在了STM32F103的项目中,但是在实验的过程发现创建的任务无法启动,任务创建程序如下:
#define TEST1_TASK_PRIO 2
#define TEST1_STK_SIZE 50
TaskHandle_t Task1_Handler;
void Test_task1(void *pvParameters);
#define TEST2_TASK_PRIO 3
#define TEST2_STK_SIZE 50
TaskHandle_t Task2_Handler;
void Test_task2(void *pvParameters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
delay_init();
uart_init(115200);
printf("StartUp\r\n");
taskENTER_CRITICAL();
xTaskCreate((TaskFunction_t )Test_task1,
(const char* )"Test_task1",
(uint16_t )TEST1_STK_SIZE,
(void* )NULL,
(UBaseType_t )TEST1_TASK_PRIO,
(TaskHandle_t* )&Task1_Handler);
xTaskCreate((TaskFunction_t )Test_task2,
(const char* )"Test_task2",
(uint16_t )TEST2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TEST2_TASK_PRIO,
(TaskHandle_t* )&Task2_Handler);
taskEXIT_CRITICAL();
vTaskStartScheduler();
}
void Test_task1(void *pvParameters)
{
int i;
while(1)
{
for(i=0;i<100;i++)
{
printf("Task[1]: %d\r\n",i);
vTaskDelay(120);
}
}
}
void Test_task2(void *pvParameters)
{
int i;
while(1)
{
for(i=0;i<100;i++)
{
printf("Task[2]: %d\r\n",i);
vTaskDelay(120);
}
}
}
上列代码在任务创建流程没有发现太大问题,百度搜了一下,说是受堆栈大小影响,但试了没有效果,于是在检查"FreeRTOSConfig.h"配置的过程中发现里面没有包含下列宏定义:
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
在"FreeRTOSConfig.h"里面复制这两行宏定义之后,任务开始正常执行。
解决办法:
将上列两行宏定义代码复制到"FreeRTOSConfig.h"头文件当中即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)