当前位置: 首页 > news >正文

FreeRTos学习记录--1.工程创建与源码概述

1.工程创建与源码概述

1.1 工程创建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用STM32CubeMX,可以手工添加任务、队列、信号量、互斥锁、定时器等等。但是本课程不想严重依赖STM32CubeMX,所以不会使用STM32CubeMX来添加这些对象,而是手写代码来使用这些对象。

使用STM32CubeMX时,有一个默认任务,此任务无法删除,只能修改其名称和函数类型,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里工程创建设计rtos后的特别之处就这些,其他部分与正常的裸机工程一样。

STM32CubeMX只是帮我们初始化了所配置的硬件模块,你要实现什么功能,需要自己添加代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面分析几个问题:

1.在嵌入式开中经常遇到的CMSIS是什么?

2.在STM32CubeMX里面配置工程,经常说的中间件是啥?

上面其实是分立的问题,那么我们这参考佬的讲解:

Keil MDK5软件包的组成、Cortex微控制器软件接口标准CMSIS,重点介绍CMSIS-CORE的组成和使用_mdk软件中器件支持包的组成以及子文件夹的作用-CSDN博客


嵌入式系统的应用开发需要基于目标机-宿主机的交叉编译系统,在集成开发环境的支持下进行,应用程序通常采用高级编程语言C/C++进行编写。使用MDK开发工具进行STM32微控制器的应用开发需要安装软件包,软件包包括:

设备驱动程序库STM32F1XXX_DFP.XXX.pack(对于Keil MDK5而言是根据开发设备的不同选择性安装,MDK4之前的版本都是默认全部安装)Cortex微控制器软件接口标准CMSIS库(默认安装)中间件Middleware(默认安装)以及代码模板、示例等,如下图所示。


CMSIS(Cortex Microcontroller Software Interface Standard)是ARM公司为其Cortex-M系列微控制器定义的一套软件接口标准,旨在简化微控制器的软件开发,使得开发者可以更容易地开发跨不同Cortex-M处理器系列和供应商的嵌入式应用程序。

CMSIS pack主要由以下几部分组成:

  • CMSIS-CORE提供了Cortex-M处理器的核心功能接口,**包括NVIC、SysTick、处理器的寄存器访问、中断向量和中断函数名称。**从软件开发角度看,CMSIS-CORE进行了一系列标准化工作:标准化处理器外设定义、标准化处理器特性的访问函数、标准化系统异常处理程序的函数名等。用户的应用程序既可以通过CMSIS层提供的函数(包括设备厂商提供的外设驱动程序)访问微控制器硬件,也可以利用CMSIS的标准化定义直接对外设编程,控制底层的设备。如果移植了实时操作系统,用户应用程序也可以调用操作系统函数。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • CMSIS-DSP是一个为Cortex-M处理器优化的数字信号处理库,提供了丰富的DSP函数,如FFT、滤波器、矩阵运算等。

  • CMSIS-RTOS为实时操作系统提供了一个标准的API接口,使得开发者可以轻松地在不同的RTOS之间切换。

对于STM32 MCU,我们只需要关心 CMSIS-RTOS,因为在STM32 代码中只有 FreeRTOS提供了cmsis 接口,驱动层还是要使用 HAL库。CMSIS是ARM为Cortex-M系列MCU提供的标准API,而各个使用该内核的芯片厂商(比如NXP、ST、intel),通常会在这些接口的基础上进一步开发适用于自家芯片的开发库,比如ST的HAL、LL、SPL库。


在STM32CubeMX中,“Middleware and Software Packs”(中间件和软件包)部分用于配置和管理与STM32微控制器相关的软件组件。这些组件可以包括文件系统、操作系统、通信协议等,你可以选择需要的组件,并进行相应的配置,如设置文件系统参数、配置任务优先级等。这些配置会生成相应的代码,集成到你的项目中,从而简化开发过程。

常见的中间件和软件包包括:

  1. FATFS:这是一个通用的文件系统模块,支持FAT文件系统,允许在嵌入式系统中读写文件。
  2. FreeRTOS:这是一个实时操作系统内核,适用于需要多任务处理的嵌入式系统。它提供了任务管理、同步机制、内存管理等功能。
  3. USB_DEVICE:这是一个USB设备栈,用于实现STM32微控制器作为USB设备的功能,支持USB通信和设备模式。

中间件的作用:

  • 抽象硬件细节:中间件提供了一层抽象,使得开发者可以不必深入了解硬件的具体实现细节,从而简化开发过程。
  • 提高代码复用性:通过使用中间件,开发者可以重用已有的代码库,减少重复开发的工作量。
  • 增强功能:中间件通常提供了一些高级功能,如网络通信、文件系统支持等,这些功能对于嵌入式系统来说可能难以自行实现。
  • 简化开发:中间件简化了复杂功能的实现,使得开发者可以更专注于应用逻辑的开发。

1.2 源码概述

移植时涉及的文件

移植FreeRTOS时涉及的文件放在 FreeRTOS/Source/portable/[compiler]/[architecture] 目录下,比如:RVDS/ARM_CM3,这表示cortexM3架构在RVDS或Keil工具上的移植文件。 里面有2个文件:

  • port.c
  • portmacro.h

核心文件

FreeRTOS的最核心文件只有2个:

  • FreeRTOS/Source/tasks.c

  • FreeRTOS/Source/list.c

    其他文件的作用也一起列表如下:

头文件

内存管理

文件在Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang下,它也是放在“portable”目录下,表示你可以提供自己的函数。源码中默认提供了5个文件,对应内存管理的5种方法。

入口函数

在Core\Src\main.c的main函数里,初始化了FreeRTOS环境、创建了任务,然后启动调度器。源码如下:

/* Init scheduler */osKernelInitialize();  /* 初始化FreeRTOS运行环境 */MX_FREERTOS_Init();    /* 创建任务 *//* Start scheduler */osKernelStart();       /* 启动调度器 */
  1. osKernelInitialize():这个函数初始化FreeRTOS的内核环境。它设置了一些基本的内核参数,如时间片、任务优先级等,为后续的任务创建和调度做准备。
  2. MX_FREERTOS_Init():这个函数通常是由STM32CubeMX工具自动生成的,用于创建和管理FreeRTOS任务。它可能会初始化任务堆栈、设置任务优先级、创建任务等。
  3. osKernelStart():这个函数启动FreeRTOS的调度器,开始任务调度。一旦调用这个函数,FreeRTOS将接管CPU的控制权,开始按照任务优先级和调度策略执行任务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其实就是各种初始化,然后启动调度器,进入第一个任务。我们之前设计的RVOS,上电后首先运行的是Bootloader。Bootloader负责初始化硬件环境,包括设置时钟、配置内存等,确保系统环境适合RTOS的运行。一旦系统环境准备就绪,Bootloader将控制权转移给 main 函数。

参考:

https://rtos.100ask.net/zh/FreeRTOS/DShanMCU-F103/chapter6.html

Keil MDK5软件包的组成、Cortex微控制器软件接口标准CMSIS,重点介绍CMSIS-CORE的组成和使用_mdk软件中器件支持包的组成以及子文件夹的作用-CSDN博客

[STM32 固件库与 CMSIS 标准如何理解? - 一郎哥哥 - 博客园]

相关文章:

  • 深度学习预训练和微调
  • WWW2025 快手最新论文 T2Diff 解读:生成式扩散模型+混合注意力打造高效推荐
  • Synopsys:printvar命令和puts/echo命令的区别
  • Vue3---(9)组件间通信
  • 【基于WSAAsyncSelec模型的通信程序设计】
  • 每天学一个 Linux 命令(29):tail
  • JavaScript 中的单例模式
  • 单例模式(线程安全)
  • Uniapp 自定义TabBar + 动态菜单实现教程(Vuex状态管理详解)
  • Nginx详细使用
  • 乐家桌面安卓版2025下载-乐家桌面软件纯净版安装分享码大全
  • buildadmin 自定义单元格渲染
  • AOSP Android14 Launcher3——点击桌面图标启动应用动画流程
  • Docker安装beef-xss
  • Python3网络爬虫开发--爬虫基础
  • 多语言商城系统开发流程
  • 【Easylive】consumes = MediaType.MULTIPART_FORM_DATA_VALUE 与 @RequestPart
  • 【英语语法】词法---连词
  • Spring是如何实现资源文件的加载
  • LX5-STM32F103C8T6引脚分布与定义
  • ESG领跑者|每一步都向前,李宁要让可持续发展成为可持续之事
  • 广发基金刘格崧一季报:首次买入广东宏大、分众传媒,减仓亿纬锂能
  • 王毅同印尼外长苏吉约诺会谈
  • 最高法报告点名“夜郎古酒”商标侵权案:促成当事人握手言和
  • 中央民族乐团团长赵聪已任文旅部艺术司司长
  • 马上评|与其争论董宇辉该不该获奖,不如多关心文学