初步完成FreeRTOS的多任务程序

本文介绍了FreeRTOS的基本概念,并对比了裸机系统与多任务系统的差异。通过实际操作,详细阐述了如何在STM32上基于FreeRTOS实现一个多任务程序,包括创建任务、设置任务周期以及中断响应。实验中,任务包括LED闪烁、串口发送和模拟温湿度数据采集,展示了FreeRTOS在简化复杂应用设计和提高系统响应效率方面的优势。
摘要由CSDN通过智能技术生成

一、了解FreeRTOS

  • FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
  • 在操作系统的控制下,每个正在执行的程序就是一个任务[task]。如果一个操作系统能够以这种方法执行多个任务,这就叫做多任务[multitasking].
    多任务操作系统的使用可以简化应用程序的设计:
    1. 操作系统的多任务和任务间通信的机制允许复杂的应用程序被分成一系列更小的和更多的可以管理的任务。
    2. (程序的)划分(partitioning)让软件测试更容易, 团队工作分解(work breakdown within teams),也有利于代码复用。
    3. 复杂的定时和先后顺序的细节 可以从应用程序代码中 删除。(因为)这成为操作系统的职责。

二、裸机系统和多任务系统

1.裸机系统

裸机系统通常分成轮询系统和前后台系统。

  • 轮询系统
    在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。

  • 前后台系统
    在轮询系统的基础上加入了中断。外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为前台,main 函数里面的无限循环我们称为后台。

2.多任务系统

多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中,任务跟中断一样,也具有优先级,优先级高的任务会被优先执行。当一个紧急的事件在中断被标记之后,如果事件对应的任务的优先级足够高,就会立马得到响应。多任务系统与前后台系统的区别在于对于事件的处理位置不同。

3.系统对比

模型 事件响应 事件处理 特点
轮询系统 主程序 主程序 轮询响应事件,轮询处理事件
前后台系统 中断 任务 实时响应事件,轮询处理事件
多任务系统 中断 任务 实时响应事件,实时处理事件

三、基于FreeRTOS的多任务程序实现

1.工程模板下载:链接.

2.解压之后打开: Project —> RVMDK(uv5)—> Fire_FreeRTOS.uvprojx
在这里插入图片描述

3.将main.c中的内容修改为:

/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"
/* 开发板硬件bsp头文件 */
#include "bsp_led.h"
#include "bsp_usart.h"


 /* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED1任务句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;
/* LED2任务句柄 */
static TaskHandle_t LED2_Task_Handle = NULL;
/* USART1任务句柄 */
static TaskHandle_t USART1_Task_Handle = NULL;
/* AHT20任务句柄 */
static TaskHandle_t AHT20_Task_Handle = NULL;





/*************************************************************************
                             函数声明
*************************************************************************/

static void AppTaskCreate(void);/* 用于创建任务 */
static void LED1_Task(void* pvParameters);/* LED1_Task任务实现 */
static void LED2_Task(void* pvParameters);/* LED2_Task任务实现 */
static void USART1_Task(void* pvParameters);/* USART1_Task任务实现 */
static void AHT20_Task(void
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值