一、简介
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为10.3.1版。
二、创建多任务
注:由于本次实验所用开发板为野火指南者103,所以使用代码均为野火官方提供。
2.1 在野火提供的文件中找到所需要的
2.2 打开框选的工程文件
2.3 由于该文件为官方所给的例程(链接见最后参考资料部分),所以已经进行了移植操作,可以看到所需freertos文件已经被添加成功。
2.4 野火提供的代码中创建了如下任务,为了缩短时间,我们把实验内容一的任务一同创建。
修改后代码如下:
/* 创建任务句柄*/
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED任务句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;
/* hello任务句柄 */
static TaskHandle_t hello_Task_Handle = NULL;
/* AHT20任务句柄 */
static TaskHandle_t AHT_Task_Handle = NULL;
三、烧录及运行
3.1 编译运行
可以看到指定位置成功生成了hex文件。
3.2 烧录到STM32开发板中
注:此处电脑及开发板之间采用串口连接。操作过程参考《零死角玩转STM32—F103指南者》
3.2.1 安装USB 转串口驱动—CH340 版本。
注:请右键使用管理员身份安装,否则可能会失败。
安装成功后可以在计算机-管理-设备管理器-端口中查看。
3.2.2 安装mcuisp软件。
3.2.3 用usb链接电脑和开发板(USB转串口接口),并打开开发板开关。
3.2.4 打开 mcuisp 软件进行如下配置:
①搜索串口,设置波特率 115200;
②选择要下载的 HEX 文件;
③校验、编程后执行;
④DTR 低电平复位,RTS 高电平进入bootloader;
⑤开始编程。
注:如果出现一直连接的情况,按一下开发板的复位键即可。
/**
*********************************************************************
* @file main.c
* @author fire
* @version V1.0
* @date 2018-xx-xx
* @brief FreeRTOS v9.0.0 + STM32 LED
*********************************************************************
* @attention
*
* ʵÑéƽ̨:Ò°»ð STM32ȫϵÁпª·¢°å
* ÂÛ̳ :http://www.firebbs.cn
* ÌÔ±¦ :https://fire-stm32.taobao.com
*
**********************************************************************
*/
/*
*************************************************************************
* °üº¬µÄÍ·Îļþ
*************************************************************************
*/
/* FreeRTOSÍ·Îļþ */
#include "FreeRTOS.h"
#include "task.h"
/* ¿ª·¢°åÓ²¼þbspÍ·Îļþ */
#include "bsp_led.h"
#include "bsp_usart.h"
/**************************** ÈÎÎñ¾ä±ú ********************************/
/*
* ÈÎÎñ¾ä±úÊÇÒ»¸öÖ¸Õ룬ÓÃÓÚÖ¸ÏòÒ»¸öÈÎÎñ£¬µ±ÈÎÎñ´´½¨ºÃÖ®ºó£¬Ëü¾Í¾ßÓÐÁËÒ»¸öÈÎÎñ¾ä±ú
* ÒÔºóÎÒÃÇÒªÏë²Ù×÷Õâ¸öÈÎÎñ¶¼ÐèҪͨ¹ýÕâ¸öÈÎÎñ¾ä±ú£¬Èç¹ûÊÇ×ÔÉíµÄÈÎÎñ²Ù×÷×Ô¼º£¬ÄÇô
* Õâ¸ö¾ä±ú¿ÉÒÔΪNULL¡£
*/