STM32CubeIDE(CUBE-MX)----快速移植FreeRTOS实战

news2024/9/23 5:31:06

文章目录

  • 前言
  • 一、Freertos可视化配置
  • 二、生成代码
  • 三、实验现象
  • 总结


前言

FreeRTOS(Real-Time Operating System)是一个开源的实时操作系统内核,专注于嵌入式系统。它提供了一套用于管理任务、调度器、内存管理等的实时操作系统功能,为嵌入式应用程序提供了强大的任务管理和资源管理能力。 CubeMX集成了许多中间件和库,包括FreeRTOS。通过简单的选择,用户可以轻松地启用和配置FreeRTOS,而不需要手动整合和调整。


一、Freertos可视化配置

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
配置外部高速时钟在这里插入图片描述
根据芯片手册配置外部晶振,使用外部晶振作为系统时钟源,频率更准确
在这里插入图片描述在这里插入图片描述
配置FreeRTOS
在这里插入图片描述

生成.c和.h文件对
在这里插入图片描述

生成代码时出现警告,原因是FreeRTOS将systick作为时钟源,因此需要设置另外一个定时器作为HAL库的时钟源在这里插入图片描述
动态创建两个任务
在这里插入图片描述

一些基本参数的设置
在这里插入图片描述

二、生成代码

项目代码框架介绍
在这里插入图片描述

生成的创建进程的代码

const osThreadAttr_t Task_LED0_attributes = {
  .name = "Task_LED0",
  .priority = (osPriority_t) osPriorityNormal,
  .stack_size = 128 * 4
};
/* Definitions for Task_LED1 */
osThreadId_t Task_LED1Handle;
const osThreadAttr_t Task_LED1_attributes = {
  .name = "Task_LED1",
  .priority = (osPriority_t) osPriorityNormal,
  .stack_size = 128 * 4
};
void MX_FREERTOS_Init(void) {
  /* creation of Task_LED0 */
  Task_LED0Handle = osThreadNew(AppTask_LED0, NULL, &Task_LED0_attributes);

  /* creation of Task_LED1 */
  Task_LED1Handle = osThreadNew(AppTask_LED1, NULL, &Task_LED1_attributes);



}

在任务函数中实现让两个LED灯分别每隔500ms和1s进行亮灭的反转

/* USER CODE END Header_AppTask_LED0 */
void AppTask_LED0(void *argument)
{
  /* USER CODE BEGIN AppTask_LED0 */
  /* Infinite loop */
  for(;;)
  {
	  	HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
	    HAL_Delay(500);
  }
  /* USER CODE END AppTask_LED0 */
}

/* USER CODE BEGIN Header_AppTask_LED1 */
/**
* @brief Function implementing the Task_LED1 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_AppTask_LED1 */
void AppTask_LED1(void *argument)
{
  /* USER CODE BEGIN AppTask_LED1 */
  /* Infinite loop */
  for(;;)
  {
	  HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
	  HAL_Delay(1000);
  }
  /* USER CODE END AppTask_LED1 */
}

三、实验现象

具有相同优先级时,利用时间片调度算法,每个任务都能得到CPU的使用权。LED0和LED1轮流执行,LED0和LED1实现不同频率的闪烁。
在这里插入图片描述
当设置LED1任务优先级降低时由于Task_LED0任务优先级大于Task_LED1,HAL_Delay(500)是执行空语句实现的因此不会实现任务的切换。Task_LED0一直占用CPU的使用权。现象如下图所示。
在这里插入图片描述
在这里插入图片描述
当代码HAL_Delay(1000)改为osDelay(1000);两个小灯又可以同时执行任务,因为osDelay(1000)会将任务变为阻塞状态交出CPU的使用权。

void AppTask_LED0(void *argument)
{
  /* USER CODE BEGIN AppTask_LED0 */
  /* Infinite loop */
  for(;;)
  {
	  	HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
	    osDelay(1000);
  }
  /* USER CODE END AppTask_LED0 */
}

在这里插入图片描述

总结

本文介绍了如何利用CUBEMX快速开发FreeRTOS。本文介绍了如何创建任务,并通过实验说明了HAL_Delay()函数和osDelay()函数的区别。如果你在一个裸机环境中,没有使用RTOS,那么使用 HAL_Delay 是合适的。如果你在使用RTOS,那么应该使用RTOS提供的 osDelay 来确保任务调度器正常工作,而不会因为延时而阻塞其他任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1272732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OSG编程指南<十七>:OSG光照与材质

1、OSG光照 OSG 全面支持 OpenGL 的光照特性,包括材质属性(material property)、光照属性(light property)和光照模型(lighting model)。与 OpenGL 相似,OSG 中的光源也是不可见的&a…

MSUSB30模拟开关可Pin to Pin兼容FSUSB30/SGM7222

MSUSB30/MSUSB30N 是一款高速、低功耗双刀双掷 USB 模拟开关芯片,其工作电压范围是1.8V 至5.5V。可Pin to Pin兼容FSUSB30/SGM7222。其具有低码间偏移、高通道噪声隔离度、宽带宽的特性。 MSUSB30/MSUSB30N 主要应用范围包括:具有 USB2.0 接口的手持设备…

天眼销:超有用的企业获客工具

天眼销是资深数据团队开发的一个客户资源查询平台,可以通过多重筛选:企业名称/信用代码,所在地区,行业,注册资本,年限,是否在营/有电话/邮箱等。 天眼销和某查查有什么区别? 天*查/…

python高级练习题库实验1(A)部分

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目4代码实验结果题目总结题目1 输入一个整数,用于控制输出*的个数,输入日期,按照特定格式输出 研究下面的例子,并编写一个与这些例子完全相同的程序。 代码 import datetime# ask user for length of b…

STC15-串口通信打印输出数据printf函数与sprintf函数

STC15-串口通信打印输出数据printf函数与sprintf函数 1.打印输出数据有二种printf函数与sprintf函数,不同之处有:(1)函数的声明不同(2)函数的功能不同(3)用法举例 该问题引用百度知道…

记i18n ally工具检测语言失败的一则思路

情况 只有某个文件检测不到汉字,其余都可以检测出来,困扰许久,发个博客记一下思路 解决方法: 1、肯定不是i18n ally工具的问题,因为其他的vue都能检测成功 2、是这个文件的问题 采用排除法 先删掉所有代码&#…

建文工程项目管理软件 SQL 注入漏洞复现

0x01 产品简介 建文工程管理软件是一个适用于工程投资领域的综合型的多方协作平台。 0x02 漏洞概述 建文工程项目管理软件BusinessManger.ashx、Desktop.ashx等接口处存在SQL注入漏洞,攻击者可通过该漏洞获取数据库中的信息(例如,管理员后台…

禁奥义·SQL秘籍

sql secret scripts sql 语法顺序、执行顺序、执行过程、要点解析、优化技巧。 1、语法顺序 如上图所示,为 sql 语法顺序与执行顺序对照图。其具体含义如下: 0、select: 用于从数据库中选取数据,即表示从数据库中查询到的数据的…

ESP32-Web-Server编程- 通过文本框向 Web 提交数据

ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据,通过网页上的按钮控制 ESP32 的行为。从本节开始,我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…

Wish防关联是什么?Wish要怎样避免违规封店?

四大跨境电商平台之一wish,做跨境电商的很多人可能都听过wish。随着wish不断完善平台制度,对于多账号运营的卖家要求越来越严厉,wish和亚马逊、eBay等其它跨境电商平台一样,不支持一个卖家开设多个账号多家店铺。 但是对于各位卖家…

centos7配置tomcat

简介 Tomcat是一个使用Java编写的开源Web应用服务器,是由Apache Software Foundation管理的一个项目。它是一个轻量级的应用服务器,可以下载、安装和使用,而且还提供了许多高级功能,例如支持Java Servlet、JavaServer Pages (JSP)和JavaServer Faces (JSF) 等JavaEE技术,…

【网络BSP开发经验】网络流量应用识别技术

文章目录 网络流量应用识别技术背景应用识别基本原理应用识别主流技术方向特征识别技术单报文解析流特征解析 关联识别技术DNS关联识别 行为识别技术 应用识别框架介绍应用特征提取经验tcpdump 抓包方式默认启动监视指定网络接口的数据包监视指定主机的数据包 禁用特征提取加速…

VUE2+THREE.JS项目搭建

THREE项目搭建 简介学习文档推荐搭建1.下载three.js2.新建3DWorkShop.vue文件3.创建utils/three/tool.js4.创建components/three/draw.vue[重点]4.1 引入文件4.2 初始化场景4.3 初始化渲染器4.4 初始化光源4.5 初始化相机(人眼模式)4.6 初始化控制器4.7 初始化动画4.8 添加全局…

TZOJ 1389 人见人爱A^B

答案&#xff1a; #include <stdio.h> int pow(int a, int b) //定义一个a的b次方函数 {int m 1;int i 0;for (i 0; i < b; i) //b次方{m (m * a) % 1000; // %1000用来控制最后输出为后三位&#xff0c;同时每次乘法结果取模&#xff0c;避免溢出 }retu…

Andrioid T 实现充电动画(2)

Andrioid T 实现充电动画&#xff08;2&#xff09; 以MTK平台为例&#xff0c;实现充电动画 效果图 资源包 修改文件清单 system/vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/prize_charge_layout.xmlsystem/vendor/mediatek/proprietary/packages/ap…

iptables防火墙之SNAT与DNET

NAT 1.SNAT&#xff1a;让内网可以访问外网 2.DNAT&#xff1a;让外网可以访问到内网的机器 网关服务器&#xff0c;要开启路由功能 内核功能&#xff1a; sysctl -a 列出所有参数 内核参数&#xff0c;然后grep可以查看到默认的内核参数 内核参数配置文件 /etc/sysctl.…

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测

时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测 目录 时序预测 | Python实现GA-TCN-LSTM遗传算法-时间卷积神经网络-长短期记忆网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 使用先进的机器学习技术和优化算法…

window10家庭版中文转专业版流程

1.确认当前为家庭中文版 2.用管理员权限打开cmd窗口 3.输入 dism /online /get-targeteditions &#xff0c;查询当前支持的升级的版本 4.专业版密钥&#xff1a;VK7JG-NPHTM-C97JM-9MPGT-3V66T 5.changepk.exe /productkey VK7JG-NPHTM-C97JM-9MPGT-3V66T

微服务--07--Seata 分布式事务

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 分布式事务1.认识Seata2.部署TC服务2.1.准备数据库表2.2.准备配置文件2.3.Docker部署 3.微服务集成Seata3.1.引入依赖3.2.改造配置3.3.添加数据库表3.4.测试 分布式…

事务级 REST API 在网络管理中的应用

什么是REST API&#xff1f; REST&#xff08;Representational State Transfer&#xff0c;也称RESTful&#xff09;API是一种架构风格&#xff0c;用于构建网络应用程序和服务之间的通信&#xff0c;是基于HTTP协议的一种应用程序接口。它提供了一组规范和约定&#xff0c;使…