CubeMX配置FreeRTOS

2023-05-16

01、说在前面

       RTOS为了提高任务调度效率一般都包含汇编程序,因此移植起来需要一些汇编知识,就算网上肯定有移植教程,初次搞起来还是挺费劲的。初学时对RTOS代码不熟悉,一开始就打击了积极性可不好。因此本篇不讲怎么移植,介绍使用ST“懒人神器”CubeMX来快速移植配置FreeRTOS。

02、RTOS介绍

        目前嵌入式主流RTOS有uCOS、FreeRTOS,之所以很多第三方库都有在FreeRTOS上的应用Demo,是因为FreeRTOS免费。不要钱是真的厉害呀!然而说实话,论源码规范,我还是喜欢uCOS。FreeRTOS的匈牙利命名法真是让我难受呀~~~

 

03、配置CubeMX

          设计实验:配置CubeMX移植FreeRTOS,建立两个任务,一个让LED0以500ms亮灭,一个让LED1以200ms亮灭。

第一步

 

首先如1处勾选使用FreeRTOS的enable。然后将HAL库的1ms定时中断采用的定时器改为TIM1,因为Systick要用作FreeRTOS的时基定时。第三步配置IO口。忘记怎么配置的温故《STM32CubeMX入门教程(一)》。

第二步

配置FreeRTOS。点击FREERTOS按钮。

 

配置界面如下,通过配置界面可以实现操作系统的配置、任务的配置、队列、信号量及内存管理的配置。

 

ConfigParameters:配置操作系统功能,就像手动移植时修改Config文件一样,基本上可以按默认值。具体每个配置的功能,可以点击该条目,底部会有相关介绍。

IncludeParameters:配置操作系统API,一些API不常用可以不使能编译,减小系统大小。这个也对应与移植时的Config文件。例如删除任务函数vTaskDelete()是否使能就在此配置。具体如下图:

 

UserConstants:添加一些用户使用的常量,很少用。

TaskAndQueues:任务及队列的配置。首先说任务配置,点击ADD,弹出配置对话框。TaskName是任务名称,一个字符串而已。下面是优先级配置,再往下是任务堆栈大小。EntryFunction是任务函数名。CodeGenerationOption是选择自动生成代码是否声明成weak。Allocation是配置内存是否动态分配,此处CUbeMX默认动态分配不给更改。

 

之后再看一下队列的创建。如下图,点击ADD,弹出配置对话框。首先是队列名称。QueueSize是队列长度,即包含的队列项个数。ItemSIze是队列项类型。

 

TimersAndSemaphores:即软件定时器及信号量的配置,界面如下图。Timer处的ADD按钮不能点击,因为我们在配置时未使能软件定时器功能。从上到下依次是:软件定时器、互斥信号量、递归信号量、二值信号量、计数信号量。

 

最后看一下堆栈及内存管理。

FreeRTOS Heap Usage:界面如下,这里会根据前面配置显示出动态内存使用情况。用户可配置内存管理大小,但不能比已配置使用了的小。所谓操作系统的内存管理,就是它自己先定义一个超大的数组,把内存坑全占了。你在应用开发时要拉屎,你要用哪个坑你说的不算,你告诉操作系统,“我这边四个哥们,给我来四个坑”,操作系统会找到一个连续的四个坑,并把首地址以指针的方式告诉你,如果没坑了,就反馈申请内存失败。当然,拉完要释放内存~之所以用FreeRTOS内存管理,是因为该操作系统提供5种内存管理方案,有内存碎片回收功能,很强大。

 

04、编程

配置完后生成代码,打开freertos.c文件,编写任务函数代码。

osDelay()函数并不是FreeRTOS的原版API函数,而是加上了CMSIS-RTOS封装后的函数。

05、CMSIS-RTOS

我们知道,大多数RTOS的原理都差不多的,都是任务调度、延时函数、信号量、队列等等东西。Keil有自己的RTX操作系统。后来ARM收购了Keil。CMSIS-RTOS相当于将不同厂家的RTOS封装一下,形成了一个标准的API函数库。FreeRTOS的匈牙利命名法实在让我难受,我更喜欢用这个封装库。有时候想输入一个函数,知道是Task的API,就因为想不起来前面匈牙利缩写是什么,硬是敲不出来,编辑器也不提醒,因为函数开头就不知道是啥~~~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CubeMX配置FreeRTOS 的相关文章

  • FreeRTOS 软件定时器的使用

    FreeRTOS中加入了软件定时器这个功能组件 是一个可选的 不属于freeRTOS内核的功能 由定时器服务任务 其实就是一个定时器任务 来提供 软件定时器是当设定一个定时时间 当达到设定的时间之后就会执行指定的功能函数 而这个功能函数就叫
  • FreeRTOS简述和移植文档

    FreeRTOS简述和移植文档 文章目录 FreeRTOS简述和移植文档 1 前言 2 FreeRTOS简述 1 概述 2 实现 3 主要特色 4 支持平台 3 移植FreeRTOS 4 最后 1 前言 目前由于IOT的飞速发展 针对单片机
  • 一文教你学会keil软件仿真

    仿真在我们调试代码中是非常重要的 通过仿真 我们可以快速定位到错误代码 或者错误逻辑的地方 这里我就以上一篇博客为例 教大家如何软件仿真 软件仿真不需要单片机 直接通过keil软件进行代码调试 一 打开工具 二 选择软件仿真 三 开始仿真
  • FreeRTOS系列

    本文主要介绍如何在任务或中断中向队列发送消息或者从队列中接收消息 使用STM32CubeMX将FreeRTOS移植到工程中 创建两个任务以及两个消息队列 并开启两个中断 两个任务 Keyscan Task 读取按键的键值 并将键值发送到队列
  • Freertos中vTaskDelay()是怎么用的

    1 常见的使用场景 void vLED Task void pvParameters while 1 Heartbeat LED vTaskDelay 1000 portTICK RATE MS 说明 上面这段代码的意思是 led翻转后经过
  • FreeRTOS记录(九、一个裸机工程转FreeRTOS的实例)

    记录一下一个实际项目由裸机程序改成FreeRTOS 以前产品的平台还是C8051单片机上面的程序 硬件平台改成了STM32L051 同时使用STM32CubeMX生成的工程 使用FreeRTOS系统 EEPROM数据存储读取函数修改更新 2
  • 【FreeRTOS(三)】任务状态

    文章目录 任务状态 任务挂起 vTaskSuspend 取消任务挂起 vTaskResume 挂起任务调度器 vTaskSuspendAll 取消挂起任务调度器 xTaskResumeAll 代码示例 任务挂起 取消任务挂起 代码示例 挂起
  • FreeRTOS基础五:软件定时器

    软件定时器简介 软件定时器的作用 在指定的时间到来时执行指定的函数 或者以某个频率周期性地执行某个函数 被执行的函数叫做软件定时器回调函数 软件定时器由FreeRTOS内核实现 不需要硬件支持 软件定时器只有在软件定时器回调函数被调用时才需
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • stm32f103zet6移植标准库的sdio驱动

    sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现 但一是文件结构有点复杂 二是相比于国内正点原子和野火的板子也有点不同 因此还是需要移植下才能使用 当然也可以直接使用正点原子或野火提供的实例 但为了熟悉下sdio
  • FreeRTOS学习(三)开关中断

    声明及感谢 跟随正点原子资料学习 在此作为学习的记录和总结 环境 keil stm32f103 背景知识 Cotex M3的NVIC最多支持240个IRQ 中断请求 1个不可屏蔽 NMI 1个Systick 滴答定时器 Cortex M处理
  • FreeRTOS之事件

    FreeRTOS之事件 声明 本人按照正点原子的FreeRTOS例程进行学习的 欢迎各位大佬指责和批评 谢谢 一 事件定义 事件 事件集 与高数上的集合意义差不多 事件啊 其实是实现任务间通信的机制 主要用于实现多任务间的同步 但是事件类型
  • Arduino IDE将FreeRTOS用于STM32

    介绍 适用于STM32F103C8的FreeRTOS STM32F103C是一种能够使用FreeRTOS的ARM Cortex M3处理器 我们直接在Arduino IDE中开始使用STM32F103C8的FreeRTOS 我们也可以使用K
  • RT-Thread记录(五、RT-Thread 临界区保护与FreeRTOS的比较)

    本文聊聊临界区 以及RT Thread对临界区的处理 通过源码分析一下 RT Thread 对临界区保护的实现以及与 FreeRTOS 处理的不同 目录 前言 一 临界区 1 1 什么是临界区 1 2 RTOS中的临界区 二 RT Thre
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • FreeRTOS之系统配置

    1 FreeRTOS的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS的裁剪和配置 在官方的demo中 每个工程都有一个该文件 2 先说一下 INCLUDE 开始的宏 使用 INCLUDE 开头的宏用来
  • 当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

    我正在研究 freeRtos 并且我有一个名为 x 的变量 现在 每秒只有一个任务正在写入该变量 而其他任务正在读取该变量值 我需要用互斥锁来保护变量吗 如果变量为 32 位或更小 并且其值是独立的并且不与任何其他变量一起解释 则不需要互斥
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https

随机推荐

  • TVM在Windows10下编译安装

    本教程记录了Windows端安装tvm的过程 xff0c 欢迎交流 教程参考 TVM Windows下全功能编译方法 xff1a 从入门到劝退 https blog csdn net znsoft article details 11503
  • V4L2视频驱动框架---v4l2_device管理模块简述

    v4l2框架由4个主要的部分 数据结构 组成 xff1a v4l2 devices 包括v4l2 subdev xff1a v4l2 device管理所有的设备 media device xff1a meida device框架管理运行时的
  • Pixhawk uORB通信

    Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixhawk 把之前的IMU进行了完整的重构 xff0c 最新版本是2 4 3 而对应的Pixhawk 1 x版本与2
  • 深入了解C++linux工程师的技术需求,为你以后的职业发展定方向

    一 C 43 43 服务器程序员 xff08 流媒体后台 xff0c 游戏后台 xff0c 高性能服务器后台 xff09 1 精通C 43 43 xff0c STL xff0c Linux等 xff0c 熟悉设计模式 xff1b 2 熟练掌
  • C/C++ Linux后台服务器开发高级架构师学习知识点路线总结(2021架构师篇完整版)

    C C 43 43 Linux后台服务器开发高级架构师学习知识点路线总结 xff08 2021架构师篇完整版 xff09 前言 xff1a 小编之前有跟大家分享过一篇架构师体系知识点总结的文章 xff0c 今天在原来的基础上有所改变更新 x
  • (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一 xff1a 多人互动架构方案 xff08 一 xff09 WebRTC回顾 xff0c 两层含义 xff1a 1 WebRTC是google开源的流媒体客户端 xff0c 可以进行实时通讯 xff0c 主要应用于浏览器之间进行实时通讯
  • Linux C/C++后台开发高级架构师进阶指南-剑指腾讯T9

    C 43 43 后台开发是一个庞杂的技术栈 xff0c 因为没有统一的开发框架并且应用行业非常广泛 所有涉猎广泛 xff0c 这里就把C C 43 43 43 43 后台开发的技术点进行整理总结 xff0c 看完以后 xff0c 不会让你失
  • 如何让shell脚本变成可执行文件

    导读在本教程中介绍创建bash脚本并使用chmod命令使脚本可执行 xff0c 无需脚本前面加上sh或bash命令就可以运行它 创建脚本文件 第一步是使用以下命令创建一个扩展名为 sh的新文件 xff1a root 64 localhost
  • Fast-RTPS

    Fast RTPS是eprosima对于RTPS的C 43 43 实现 xff0c 是一个免费开源软件 xff0c 遵循Apache License 2 0 Fast RTPS现在被称为Fast DDS xff0c 作为ROS2的默认中间件
  • 如何使你的直流电机闭环?(PID讲解)

    前言 xff1a 看了看很多大佬写的PID讲解很全面也很复杂 xff0c 实在是不适合很多萌新入坑 xff0c 所以想按自己的理解写一篇通俗易懂的PID算法讲解 一 xff1a PID的基本定义 PID xff0c 就是 比例 xff08
  • Linux内核深度解析之中断、异常和系统调用——系统调用

    系统调用 系统调用是内核给用户程序提供的编程接口 用户程序调用系统调用 xff0c 通常使用glibc库针对单个系统调用封装的函数 如果glibc库没有针对某个系统调用封装的函数 xff0c 用户程序可以使用通用的封装函数syscall x
  • 面试题(嵌入式经典)

    1 用预处理指令 define声明一个常数 xff0c 用以表明1年中有多少秒 xff08 忽略闰年问题 xff09 define SECONDS PER YEAR 60 60 24 365 UL 2 写一个 标准 宏MIN xff0c 这
  • 择业面对选择,嵌入式 or 互联网,该进哪个?

    这个话题可能是不少电子相关专业的毕业生面临的困惑 xff0c 怎么选择 xff0c 可以听听别人的意见来作为参考 xff0c 但最终还是要由自己的兴趣和爱好决定 知乎上有这样一个提问 xff1a 本人大一开始玩各种单片机 FPGA DSP
  • 大疆无人机-图传技术

    大疆无人机 xff08 航拍器 xff09 遥控连接电脑驱动解决方案 http mini eastday com mobile 160722051432373 html 无人机系列之图传技术https blog csdn net ad360
  • 【2】uC/OS-III应用开发————>启动流程(STM32F767)

    简述 xff1a 上电启动 xff0c 分为三个阶段 CPU内核的初始化 xff0c ARM公司编写 xff0c 所用CPU的 s文件外设模块的初始化OS相关操作的初始化 启动 调度等等系统的启动 上电执行启动文件里面的复位函数Reset
  • Windows11原版镜像

    Windows 11 xff08 企业版 xff09 版本 22H2 xff08 2023年02月发布 xff09 64 位简体中文 文件 xff1a zh cn windows 11 business editions version 2
  • 树莓派操作系统

    树莓派操作系统 树莓派操作系统 介绍更新和升级树莓派操作系统 使用 APT使用 rpi 更新播放音频和视频 OMXPlayer 应用程序如何播放音频如何播放视频播放期间的选项在后台播放使用 USB 网络摄像头 基本用法自动化图像捕获延时拍摄
  • ARM平台FS6818/s5p6818开发板实验7 —— 通过I2C读取MMA8451三轴加速度传感器芯片实现计步器功能的实验

    实验目的 掌握I2C协议的内容 xff0c 了解I2C接口的特点 了解陀螺仪MMA8451的用途及数据采集过程 熟悉s5p6818处理器的I2C配置 xff0c 完成通过I2C读取MMA8451三轴加速度传感器芯片和加速度的改变实现计步功能
  • uC/OS-II 一些细节问题

    最高和最低优先级的任务最好不要使用 xff0c 而用户使用的任务多达56个 xff0c 0表示最高优先级 建立任务的函数有两个 OSTaskCreate OSTaskCreateExt xff08 可设置更多任务细节 xff09 OSSta
  • CubeMX配置FreeRTOS

    01 说在前面 RTOS为了提高任务调度效率一般都包含汇编程序 xff0c 因此移植起来需要一些汇编知识 xff0c 就算网上肯定有移植教程 xff0c 初次搞起来还是挺费劲的 初学时对RTOS代码不熟悉 xff0c 一开始就打击了积极性可