STM32移植FreeRTOS无法启动任务的解决方法

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);	//设置系统中断优先级分组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();         					//开启任务调度
}	
//任务函数1
void Test_task1(void *pvParameters)
{
	int i;
	while(1)
	{
		for(i=0;i<100;i++)
		{
			printf("Task[1]: %d\r\n",i);
			vTaskDelay(120);
		}
	}
}
//任务函数2
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"头文件当中即可。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值