FreeRTOS简介
在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。
FreeRTOS是一个迷你操作系统内核的小型嵌入式系统。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。
MDK下移植FreeRTOS
- 从官网上下载最新的FreeRTOS源码,目前官方提供的最新版本是v9.0.0,FreeRTOS源码在解压目录下的路径为
FreeRTOS_V9.0.0rc2\FreeRTOS\Source
。 - 参考FreeRTOS移植到STM32F103步骤与注意事项
整理下好的源码。 - 下载野火提供的资料包,里面有官方提供的工程可以直接使用
- 下载地址:https://pan.baidu.com/s/1QK0H-iq3kg2deouulal-8A
- 提取码:0375
- 打开14-3,SRAM动态创建多任务
- 选择Projiect进去打开工程Fire_FreeRTOS
- 打开工程后我们需要修改stm32f10x_it.c文件
修改stm32f10x_it.c文件是因为FreeRTOS对这几个中断的名称做了自己的定义,因此必须要重定义这几个函数才能正常进入中断,但这么做又会跟ST提供的stm32f10x_it.c文件当中定义的中断相冲突,因此必须将stm32f10x_it.c下对应的几个中断服务函数屏蔽掉,否则编译会提示函数重定义
- 然后创建led等闪烁要求任务
/* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* 创建LED1句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;//task1,每间隔500ms闪烁(变化)一次LED;
/* 创建hello句柄 */
static TaskHandle_t hello_Task_Handle = NULL;//task2,每间隔2000ms,向串口发送一次指令数据“helloworld!";
/* 创建AHT20句柄 */
static TaskHandle_t AHT_Task_Handle = NULL;//task3,每间隔5000ms,从AHT20采集一次温湿度数据(不考虑硬件情况,仅写出整个多任务框架模拟代码)。
- 修改主函数main.c如下
#include "FreeRTOS.h"
#include "task.h"
#include "bsp_led.h"
#include "bsp_usart.h"
static TaskHandle_t AppTaskCreate_Handle = NULL;
static TaskHandle_t LED1_Task_Handle = NULL;
static TaskHandle_t hello_Task_Handle = NULL;
static TaskHandle_t AHT_Task_Handle = NULL