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

STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

STM32 CubeMX


STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

  • STM32 CubeMX
  • 一、STM32 CubeMX设置
    • 时钟配置
    • HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)
    • 使用STM32 CubeMX 库,配置Freertos
    • 使能定时器,计时0.1中断
    • 使能宏定义
  • 二、实验一,CPU使用率
    • 配置代码
    • 任务代码
    • 实验现象


学习使用Freertos第四步
在 FreeRTOS 中,中断管理和软件定时:

  1. ·taskENTER_CRITICAL()·; 是一个函数在 FreeRTOS 中使用的,用于进入临界区(critical section)。在临界区内,中断会被禁用,这样可以确保在多任务环境下共享资源的安全性。你可以在需要保护共享资源的代码段中使用
  2. · taskENTER_CRITICAL()·; 来禁用中断,然后在临界区结束时使用 taskEXIT_CRITICAL();
    来重新启用中断。这样可以防止多个任务同时访问共享资源而导致的竞态条件。

一、STM32 CubeMX设置

时钟配置

在这里插入图片描述

HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)

在这里插入图片描述

使用STM32 CubeMX 库,配置Freertos

选择CMISS_V1接口就可以满足Freertos接口;且代码量比CMISS_V2小(CMISS_V2支持更多的RTOS接口,所以代码量比CMISS_V1多)
在这里插入图片描述

使能定时器,计时0.1中断

在这里插入图片描述

使能宏定义

在这里插入图片描述

二、实验一,CPU使用率

设置时基
在这里插入图片描述

配置代码

__weak void configureTimerForRunTimeStats(void)
{g_osRuntimeCounter=0;
}__weak unsigned long getRunTimeCounterValue(void)
{
return g_osRuntimeCounter;
}

任务代码

void StartDefaultTask1(void const * argument)
{/* USER CODE BEGIN StartDefaultTask1 *//* Infinite loop */for(;;){printf("Task01 \r\n");		// printf输出字符串osDelay(1000);}/* USER CODE END StartDefaultTask1 */
}/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the Task02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){printf("Task02 \r\n");		// printf输出字符串osDelay(1000);}/* USER CODE END StartTask02 */
}/* USER CODE BEGIN Header_CpuStartTask03 */
/**
* @brief Function implementing the CpuTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_CpuStartTask03 */uint8_t CPU_RunInfo[400];		            //保存任务运行时间信息
void CpuStartTask03(void const * argument)
{/* Infinite loop */for(;;){printf("  B:阻塞  R:就绪  D:删除  S:暂停  X:运行 \r\n");memset(CPU_RunInfo,0,400);				//信息缓冲区清零osThreadList(CPU_RunInfo);              //获取任务运行时间信息printf("---------------------------------------------\r\n");printf("Task      Task_Status Priority  Remaining_Stack Task_No\r\n");printf("%s", CPU_RunInfo);printf("---------------------------------------------\r\n");//    memset(CPU_RunInfo,0,400);				//信息缓冲区清零
//    
//    vTaskGetRunTimeStats((char *)&CPU_RunInfo);
//    
//    printf("Task       Running_Count        Utilization\r\n");
//    printf("%s", CPU_RunInfo);
//    printf("---------------------------------------------\r\n\n");osDelay(1000);}}

实验现象

在这里插入图片描述

相关文章:

STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

STM32 CubeMX STM32 CubeMX (第四步Freertos内存管理和CPU使用率) STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)使用STM32 CubeMX 库,配置Fr…...

题解 | #1012.Equalize the Array# 2023杭电暑期多校10

1012.Equalize the Array 签到 题目大意 定义一个数组的 m o d e mode mode 是其中出现次数最多的数字(可不唯一) 给定一个数组 a a a ,每次操作可以选定其一个 m o d e mode mode 并使数组中所有与之相等的元素 1 1 1 问任意次操作后…...

UE4/5C++多线程插件制作(二十一、使用)

目录 DemoPawn.h DemoPawn.cpp 会出现的bug 插件 相关的插件制作在上一节已经完成了。 具体的使用方式在第0章已经写了,get之后去绑定即可。 而后笔者做了一个接口,具体的绑定方式也就在这个接口里面。 接下来最重要的是进行使用,对此我做了一个与蓝图相关的接口,里…...

【C#】关于?的用法

1、可空类型修饰符(?) 如: int? x null;//可空类型默认值都是null,而值类型如int默认值为0、bool默认值为false等 bool? result true;2、三目运算符(?:) 如: bool…...

linux——mysql的高可用MHA

目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager 一、概述 一、概念 MHA(MasterHigh Availability&a…...

【学习日记】【FreeRTOS】空闲任务与阻塞延时

写在前面 本文是基于野火 RTOS 教程对空闲任务和阻塞延时的详解。 一、什么是任务中的阻塞延时 说到阻塞延时,笔者的第一反应就是在单片机的 while 循环中,使用一个 for 循环不断递减一个大数,通过 CPU 不断执行一条指令的耗时进行延时。这…...

衣服材质等整理(时常更新)

参考文章&图片来源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纤维 01. 化学纤维 02. 聚酯纤维(即,涤纶) 一种由有机二元酸和二元醇通过化学缩聚制成的合成纤维。具有出色的抗皱性和保形性,所制衣物在穿着过程中不容…...

电子商务环境下旅游价值链

迈克尔 ・ 波特(Michael E. Porter)在其《竞争优势》一书中提出了“价值链” 的概念,并认为一家企业最核心的竞争优势在于对价值链的设计。虽然迈克尔 ・ 波 特提出的价值链主要是针对企业内部的价值链,但他视价值链为一系列连续完成的 活动&#xff…...

spring源码分析bean的生命周期(下)

doGetBean()执行过程 createBean()执行过程 一、DependsOn注解 spring创建对象之前会判断类上是否加了DependsOn注解,加了会遍历然后会添加到一个map中,spring会先创建DependsOn注解指定的类 二、spring类加载器 在合并BeanDefinition,确定…...

完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)

问题阐述 最近在Github上提交PR后,遇到了这么一个问题:golangci-lint运行失败,具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint: golangci-lint 是Go语言社区中常用的代码质量检查工具,它可以…...

pytorch3d成功安装

一、pytorch3d是什么? PyTorch3D的目标是帮助加速深度学习和3D交叉点的研究。3D数据比2D图像更复杂,在从事Mesh R-CNN和C3DPO等项目时,我们遇到了一些挑战,包括3D数据表示、批处理和速度。我们开发了许多有用的算子和抽象&#xf…...

【vue3】同个页面引入多个图表组件实现自适应的方法

首先说明,此方案仅针对vue3项目在同一个页面引入了多个图表组件,因为我发现不能框架不同的引入,resize的写法还不同 window.addEventListener("resize", function() {...// 在此处重新调用即可 }以下是具体写法: 循环…...

一文了解汽车芯片的分类及用途介绍

汽车芯片按其功能可分为控制类(MCU和AI芯片)、功率类、传感器和其他(如存储器)四种类型。市场基本被国际巨头所垄断。人们常说的汽车芯片是指汽车里的计算芯片,按集成规模可分为MCU芯片和AI芯片(SoC芯片&am…...

Linux0.11内核源码解析-truncate.c

truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0,并释放占用的设备空间。 索引节点的逻辑块连接方式 释放一次间接块 static void free_ind(int dev,int block) {…...

LED驱动型IC芯片的原理介绍

一、LED驱动器是什么 LED驱动器(LED Driver),是指驱动LED发光或LED模块组件正常工作的电源调整电子器件。由于LED PN结的导通特性决定,它能适应的电源电压和电流变动范围十分狭窄,稍许偏离就可能无法点亮LED或者发光效…...

VLAN实验

实验题目如下: 实验拓扑如下: 实验要求如下: 【1】PC1/3的接口均为access模式,且属于van2,在同一网段 【2】PC2/4/5/6的IP地址在同一网段,与PC1/3不在同一网段 【3】PC2可以访问4/5/6,PC4不能…...

Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit

一、前言 QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...

三维可视化平台有哪些?Sovit3D可视化平台怎么样?

随着社会经济的发展和数字技术的进步,互联网行业发展迅速。为了适应新时代社会发展的需要,大数据在这个社会经济发展过程中随着技术的进步而显得尤为重要。同时,大数据技术的快速发展进程也推动了可视化技术的飞速发展,国内外各类…...

Xxl-job安装部署以及SpringBoot集成Xxl-job使用

1、安装Xxl-job: 可以使用docker拉取镜像部署和源码编译两种方式,这里选择源码编译安装。 代码拉取地址: https://github.com/xuxueli/xxl-job/tree/2.1.2 官方开发文档: https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%…...

【【超声波避障小车代码】】

超声波避障小车代码 #include <reg51.h> //通用51头文件 #include <intrins.h> //使用了_nop()_函数#define uchar unsigned char //用 uchar 表示 unsigned char 类型 #define uint unsigned int //用 uint 表示 unsigned int 类型sbit EN…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...