STM32下完成一个基于FreeRTOS的多任务程序

本文介绍了如何在STM32上移植和使用FreeRTOS实现多任务程序。首先,简述了FreeRTOS在嵌入式领域的应用和功能。接着,详细说明了在MDK环境下移植FreeRTOS的步骤,包括下载源码、修改中断服务函数、创建任务和烧录程序。最后,进行了实验总结,强调了实践中遇到的问题及解决方法。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值