FreeRTOS学习笔记(三)Freertos的移植实验


前言

  本节是在前章任务学习之后进行的移植实验,其目标是将原有的串口代码改写成带有rtos系统的,所使用的mcu为stm32f103。


一、移植Freertos

  首先将Freertos的文件夹移植到程序的文件夹下,具体的文件可以选择公开资料提供的即可(笔者这里使用的是正点原子提供的,大家可以去其官方自行下载)。
在这里插入图片描述
  创建在工程中创建FreeRTOS_CORE 和 FreeRTOS_PORTABLE两个新分组,并分别按下图在新分组中添加文件,位置均在刚刚放入的FreeRTOS文件夹中,值得注意的是图2的五个heap文件任性一个即可。

在这里插入图片描述

在这里插入图片描述
  最后的分组是这样的,大家可以自己检查一下有没有缺少文件。
在这里插入图片描述
  之后添加路径。
在这里插入图片描述
  修改sys.h头文件,将#define SYSTEM_SUPPORT_OS 1//定义系统文件夹是否支持OS置为1。
  除此之外还需要修改usart.c,delay.c及stm32f10x_it.c,内容太多笔者就不一一展示了,这里粘一下正点原子的视频链接,大家可以自行查阅。

二、程序修改

2.1 修改配置文件

  上节已经提到了,我们如果使用动态创建的方法,需要设置该宏,如下图所示。
在这里插入图片描述

2.2 入口参数的实现

  根据上章内容,我们可以知道在创建任务时需要设定其优先级、句柄、堆栈大小以及任务函数。

// 示例
#define START_TASK_PRIO 1 			 //任务优先级 (1)
#define START_STK_SIZE 128 			 //任务堆栈大小 (2)
TaskHandle_t Task1_Handler; 	     //任务句柄 (3)
void task1_task(void *pvParameters); //任务函数 (4)

void task1_task(void *pvParameters){
	...
	for(;;){
		...
	}
	...
	vTaskDelay(xxx);				// 这里需要使用其自带的延时函数,用于切换任务
}

  上面所提供的示例为通用的任务框架,但如需要创建“开始任务”(作为入口去创建相对应的任务),此时就不能使用死循环for(;;)了,这是由于你无法重复创建相同的任务。

2.3 任务的创建

  这部分内容主要使用前章的xTaskCreate( )函数,我们根据上小节自定义的信息进行填充即可。

//创建TASK1任务
    xTaskCreate((TaskFunction_t )task1_task,             
                (const char*    )"task1_task",           
                (uint16_t       )TASK1_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )TASK1_TASK_PRIO,        
                (TaskHandle_t*  )&Task1Task_Handler);

2.4 主函数的修改

  不同于以往的所有操作均放置于大循环while(1)中,freertos的while(1)是很闲的,其中什么都不用加。我们只需要在各部分模块定义之后进行任务的创建以及调度,然后将原来写在大循环里的内容移动到对应的任务中的小循环即可(PS:启动函数除外,仅启动一次即可)。

int main(void)
{
	...							   // 各种各样的初始化函数
	xTaskCreate((TaskFunction_t )task1_task,             
                (const char*    )"task1_task",           
                (uint16_t       )TASK1_STK_SIZE,        
                (void*          )NULL,                  
                (UBaseType_t    )TASK1_TASK_PRIO,        
                (TaskHandle_t*  )&Task1Task_Handler);
    vTaskStartScheduler();          // 开启任务调度
	while(1);
}

  在做完以上操作,我们的FreeRTOS 移植程序程序基本上就是完成了,需要注意的是本实验使用的是动态创建的方法。实际上,我们可以将有关一个任务的东西我们的放到一个.h 头文件里面去,比如任务堆栈、任务句柄、任务函数声明等,这样方便修改。
免责声明:本文参考了网上公开资料,仅用于学习交流,若有错误或侵权请联系笔者。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值