一、为什么要学习 RTOS
在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环里面实现。现实生活中的很多中小型的电子产品用的都是裸机系统,而且也能够满足需求。但是为什么还要学习 RTOS编程,偏偏还要整个操作系统进来。一是项目需要,随着产品要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,我们可以考虑引入 RTOS 实现多任务管理,这是使用RTOS 的最大优势。
二、MDK下移植FreeRTOS
由于我使用的是野火的指南者F103,给了源码所以直接用,在这个框架下进行一些修改。
task1:每间隔500ms闪烁(变化)一次LED。
task2:每间隔2000ms,向串口发送一次指令数据“helloworld!"。
task3:每间隔5000ms,从AHT20采集一次温湿度数据。
由于给的源代码是执行2个点灯任务,所以需要在源码的基础上修改增加,只需修改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;/* LED1任务句柄 */
static TaskHandle_t hello_Task_Handle = NULL;/* PRINT任务句柄 */
static TaskHandle_t AHT_Task_Handle = NULL;/* AHT任务句柄 */
static void AppTaskCreate(void);/* 用于创建任务 */
static void LED1_Task(void* pvParameters);/* LED1_Task任务实现 */
static void hello_Task(void* pvParameters);/* PRIN_Task任务实现 */
static void AHT_Task(void* pvParameters);/* AHT20_Task任务实现 */
static void BSP_Init(void);<