stm32 rtx操作系统 堆(heap) 栈(stack) keil在线监测

STM32内存分为3块区域:全局/静态变量区、栈区、堆区
其中全局/静态变量区用于存放全局/静态变量(包括指针变量),
栈区用于存放当前运行的函数及其中定义的局部变量和程序指针等,
堆区用于存放动态申请的内存,即malloc的内存。

操作环境

Keil MDK 5.38a
Arm Compiler v6.16
cubemx 生成的工程文件
rtx操作系统
H743VIT6芯片

keil中的堆栈设置

修改启动文件,选择下面的Configuration选项卡
在这里插入图片描述
操作系统在生产线程时主要分配stack空间,所以这里stack要多留一点

操作系统线程的stack

在RTX_Config.h里面,定义了生成线程时默认的stack大小

//   <o>Default Thread Stack size [bytes] <96-1073741824:8>
//   <i> Defines stack size for threads with zero stack size specified.
//   <i> Default: 3072
#ifndef OS_STACK_SIZE
#define OS_STACK_SIZE               8192
#endif

生成线程时,要指定参数来初始化stack大小,否则就用上面默认值

/// Attributes structure for thread.
typedef struct {const char                   *name;   ///< name of the threaduint32_t                 attr_bits;   ///< attribute bitsvoid                      *cb_mem;    ///< memory for control blockuint32_t                   cb_size;   ///< size of provided memory for control blockvoid                   *stack_mem;    ///< memory for stackuint32_t                stack_size;   ///< size of stackosPriority_t              priority;   ///< initial thread priority (default: osPriorityNormal)TZ_ModuleId_t            tz_module;   ///< TrustZone module identifieruint32_t                  reserved;   ///< reserved (must be 0)
} osThreadAttr_t;

其中stack_size就是初始化的栈空间

线程变量在堆/栈中的区分

一般会写一个函数main_thread()来作为线程的主函数

如果在这个函数内定义了局部变量,就占用分配的stack栈空间;
如果在这个函数外,同一文件内写了变量,不占用这个函数的stack栈空间;
如果函数内写了个static并赋值,也不占用stack栈空间。

keil监视RTOS运行情况

进入调试模式
在这里插入图片描述
如果写两个极大的局部变量:
在这里插入图片描述
可以看到stack基本就满了
如果把一个拿出去声明,占用的是heap,就省去很多stack栈空间
在这里插入图片描述
如果不合理分配堆栈空间,可能会

  1. 线程根本跑不起来
  2. 线程跑起来了,里面的变量乱变(也可能初始化后是好的,放一会就变了)
  3. 根本编译不过去

有几篇文章写的挺好,参考了一下:
STM32 堆、栈、内存分配-精华详解
STM32堆栈的大小及内存四(五)区的分析
【方法齐全|原创】MDK使用CMSIS RTX5调试窗口提示 ‘os_Info‘: ‘osRtxInfo‘ not found 解决方法

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI在医学领域:使用生成式深度学习和信号处理技术增强心脏听诊信号

心血管疾病&#xff08;CVD&#xff09;是全球死亡的主要原因&#xff0c;占2019年所有全球死亡的30%以上。为了有效地治疗CVD&#xff0c;准确诊断和评估心脏状况至关重要。心脏听诊&#xff08;CA&#xff09;是一种非侵入性方法&#xff0c;通过听取心脏产生的声音来检测和监…

日语学习零基础生活日语口语柯桥外语学校|股票用日语怎么说?

在日语中&#xff0c;“股票”可以说&#xff1a; • 株&#xff08;かぶ&#xff09; 这是最常用的表达方式&#xff0c;直接表示“股票”。 例如&#xff1a; 株を買う - 买股票 株を売る - 卖股票 • 株式&#xff08;かぶしき&#xff09; 这个词也是“股票”的意…

【C语言刷力扣】1832.判断句子是否为全字母句

题目&#xff1a; 法一 bool checkIfPangram(char* sentence) {int str[256];memset(str, 0, sizeof(int));for (int i 0; i < strlen(sentence); i) {str[ sentence[i] ];}for (int j a; j < z; j) {if (!str[j]) return false;}return true; } 法二 动态分配 typ…

微课录制 “绊脚石”,电脑录屏时PPT 与画板冲突及解决全析

在教育数字化转型的浪潮中&#xff0c;微课录制成为教师传授知识的新方式。最近&#xff0c;一位用户在评论区提出了一个常见问题&#xff1a;在使用画板功能辅助标注时&#xff0c;PPT无法正常切换&#xff0c;影响了微课的流畅性。这是一个典型的技术冲突问题&#xff0c;关系…

安防综合管理系统EasyCVR视频汇聚平台Linux环境下如何测试UDP端口是否正常开启?

视频汇聚EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。平台灵活性强&#xff0c;支持国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大…

kernel32.dll下载地址:如何安全地恢复系统文件

关于从网络上寻找kernel32.dll的下载地址&#xff0c;这通常不是一个安全的做法&#xff0c;而且可能涉及到多种风险。kernel32.dll是Windows操作系统的核心组件之一&#xff0c;负责内存管理、进程和线程管理以及其他关键系统功能。因为kernel32.dll是系统的基础文件&#xff…

国家海洋环境预报中心李本霞:全国首个海浪智能预报系统已投入业务化运行,AI助力海浪预报多项突破

近日&#xff0c;在第 20 届 CCF HPC China 2024 大会中&#xff0c;第六届海洋数值预报与高性能计算论坛圆满举办。在本次大会上&#xff0c;国家海洋环境预报中心海浪预报室主任李本霞以「人工智能在海浪预报中的应用」为主题展开演讲&#xff0c; HyperAI超神经在不违原意的…

Leetcode—1188. 设计有限阻塞队列【中等】(多线程)

2024每日刷题&#xff08;183&#xff09; Leetcode—1188. 设计有限阻塞队列 C实现代码 class BoundedBlockingQueue { public:BoundedBlockingQueue(int capacity) {sem_init(&enSem, 0, capacity);sem_init(&deSem, 0, 0);}~BoundedBlockingQueue() {sem_destroy(…

2024年10月15日读书笔记

前面已经提到了我们要使用自上而下的方法去构建金字塔结构 下面让我们用一个例子试试&#xff1a; 下面举例说明应用以上方法时思维的发展过程。 表3-1是美国某大型饮料公司财务部主管写的一份备忘录&#xff0c;我们将试着用以上方法改写该备忘录。 表3-1 答非所问的例子 收…

解读华为云Kuasar多沙箱容器技术,带来更强隔离性和安全性

摘要&#xff1a;沙箱技术的引入&#xff0c;为容器提供了更强的隔离性和安全性&#xff0c;成为云原生技术的重要组成部分。 本文来源 《华为云DTSE》第五期开源专刊&#xff0c;作者&#xff1a;华为云云原生开源团队研发工程师。 近年来&#xff0c;云原生容器技术飞速发展&…

软件供应链十年:探索开源的增长、风险和未来

回顾软件供应链状况报告的 10 年既是一个里程碑&#xff0c;也是一次行动号召。在过去十年中&#xff0c;开源消费改变了软件开发的世界。我们看到了前所未有的创新&#xff0c;但也出现了新的挑战&#xff0c;特别是在管理软件供应链的安全性和完整性方面。 在 Sonatype&…

【AcWing】算法基础课-数据结构

目录 1、单链表 2、双链表 3、栈 3.1 模拟栈 3.2 表达式求值 4、队列 5、单调栈 6、滑动窗口 7、KMP字符串 8、Trie字符串统计 方法一 方法二 9、并查集 9.1 合并集合 9.2 连通块中点的数量 10、堆 10.1 堆排序 10.2 模拟堆 11、哈希表 11.1 模拟散列表 拉…

内核提供的通用I2C设备驱动I2C-dev.c分析:file_ops篇

往期内容 I2C子系统专栏&#xff1a; I2C&#xff08;IIC&#xff09;协议讲解-CSDN博客SMBus 协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析&#xff1a;注册篇 总线和设备树专栏&#xff1a; 总线…

从零开始实现大语言模型(十二):文本生成策略

1. 前言 大语言模型GPTModel通过多轮推理生成连续自然语言文本&#xff0c;每轮推理仅生成一个token。对输入文本做tokenization&#xff0c;将输入文本转换成包含num_tokens个token ID的列表&#xff0c;并输入大语言模型GPTModel&#xff0c;可以得到num_tokens个维度为voca…

第T4周:TensorFlow实现猴痘识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 实现猴痘病例图片的准确实别 具体实现&#xff1a; &#xff08;一&#xff09;环境&#xff1a; 语言环境&#xff1a;Python 3.10 编 译…

mysql innodb 引擎如何直接复制数据库文件?

mysql innodb 引擎如何直接复制数据库文件&#xff1f;介绍如下&#xff1a; 1、首先找到数据库文件所在位置 一般可以看my.conf/my.ini配置的文件的“datadir” 看示例&#xff1a; “MAMP”在Macos下的数据库文件位置&#xff1a; /Library/Application Support/appsolu…

DAY35||452.用最少数量的箭引爆气球 |435.无重叠区间 |763.划分字母区间

重叠区间专场。 452.用最少数量的箭引爆气球 题目:452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xst…

恢复已删除文件的 10 种安卓数据恢复工具

由于我们现在在智能手机上存储了大量重要文件&#xff0c;因此了解数据恢复工具变得很重要。您永远不会知道什么时候需要使用 安卓 数据恢复工具。 由于不乏 Windows 数据恢复工具&#xff0c;因此从崩溃的计算机中恢复文件很容易。但是&#xff0c;当涉及到从 安卓恢复数据时…

论文笔记:Ontology-enhanced Prompt-tuning for Few-shot Learning

论文来源&#xff1a;WWW 2022 论文地址&#xff1a;https://arxiv.org/pdf/2201.11332.pdfhttps://arxiv.org/pdf/2201.11332.pdf 论文代码&#xff1a;暂未公开 笔记仅供参考&#xff0c;撰写不易&#xff0c;请勿恶意转载抄袭&#xff01; Abstract 小样本学习旨在基于…

深入浅出:MySQL索引优化指南

一、引言 在数据库应用开发中&#xff0c;性能优化是一个永恒的话题。而索引作为提高数据库查询效率的关键手段&#xff0c;其设计和使用直接影响着系统的性能表现。本文将深入探讨MySQL索引的原理、类型以及优化策略&#xff0c;帮助读者更好地理解和应用索引&#xff0c;从而…