当前位置:网站首页>【FreeRTOS】FreeRTOS与stm32内置堆栈的占用情况
【FreeRTOS】FreeRTOS与stm32内置堆栈的占用情况
2022-08-05 00:30:00 【谢老板不用蟹】
在stm32的启动文件中,有对该单片机的堆栈大小进行设置,这里的启动文件中将栈大小设置为1024字节,堆大小设置为512字节。

但在FreeRTOS的配置文件 FreeRTOSConfig.h 文件中,也使用 configTOTAL_HEAP_SIZE 宏定义了FreeRTOS所要使用到的堆大小,设置了 36*1024 代表着FreeRTOS使用的堆大小最大为36KB。

很明显,512字节明显小于36字节,那此时就会有个疑问:为什么这样整个工程文件还能够在stm32上正常运行呢?
首先明确一下堆栈的定义。
栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构中的栈。
堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配方式类似于数据结构中的链表。
在Cortex M3有两个栈指针,OS中,一般是在中断中使用MSP,在普通任务中使用PSP。
启动文件中对堆栈大小的设置,只能改变MSP。另Cortex M3是无法设置栈大小的,只能设置栈指针!如果栈指针设置在RAM最后的位置,栈空间设置为0,编译器不会报错,程序也能运行,只要不与实际使用区域冲突就可以!
总结:stm32启动文件中设置的堆栈大小与FreeRTOSConfig.h设置的堆栈大小之间通常情况下互不干扰(要视不同型号自带的RAM大小而定,只要两者相加不超过单片机自带的RAM大小,应该都不会互相干扰),是两个独立的内存空间。
另外在查找这个问题的时候,发现一个分配堆栈空间不足问题原因及解决方法,这里就差不多原话搬过来:
堆空间使用总结:用户可以自由使用的堆空间(启动文件中设置的,且使用malloc()函数进行分配),大约为堆总空间的一半。超过时系统就会死机。
栈空间使用总结:在处理的函数,包括函数嵌套,递归,等等,都是从这个"栈"里面,来分配的.
所以,如果一个函数的局部变量过多,比如在函数里面定义一个u8 buf[512],这一下就占了1/4的栈大小了,再在其他函数里面来搞两下,程序崩溃是很容易的事情,这时候,一般你会进入到hardfault....
这是初学者非常容易犯的一个错误.切记不要在函数里面放N多局部变量,尤其有大数组的时候!
参考:
FreeRTOS中的堆栈设置”与“系统启动文件中堆栈”的关系_lighthear的博客-CSDN博客
stm32用了FreeRTOS后,启动文件里的堆栈大小设置还有用么? (amobbs.com 阿莫电子论坛)
边栏推荐
- leetcode: 267. Palindromic permutations II
- redis可视化管理软件Redis Desktop Manager2022
- 2022杭电多校第三场 L题 Two Permutations
- tiup telemetry
- tensor.nozero(), mask, [mask]
- leetcode:266. 回文全排列
- 软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
- RK3399平台开发系列讲解(内核调试篇)2.50、嵌入式产品启动速度优化
- 性能测试如何准备测试数据
- 2022牛客多校训练第二场 J题 Link with Arithmetic Progression
猜你喜欢

Huggingface入门篇 II (QA)

简单的顺序结构程序(C语言)

What is next-generation modeling (with learning materials)
![[230] Execute command error after connecting to Redis MISCONF Redis is configured to save RDB snapshots](/img/fa/5bdc81b1ebfc22d31f42da34427f3e.png)
[230] Execute command error after connecting to Redis MISCONF Redis is configured to save RDB snapshots

国内网站用香港服务器会被封吗?

leetcode经典例题——单词拆分

图解 Canvas 入门

软件开发工具的技术要素

10 种常见的BUG分类

《WEB安全渗透测试》(28)Burp Collaborator-dnslog外带技术
随机推荐
关于我仔细检查审核过关于工作人员页面,返回一个所属行业问题
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
软件测试面试题:软件都有多少种分类?
2022 Nioke Multi-School Training Session 2 J Question Link with Arithmetic Progression
tiup uninstall
软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
D - I Hate Non-integer Number (选数的计数dp
Flask框架 根据源码分析可扩展点
The master teaches you the 3D real-time character production process, the game modeling process sharing
E - Many Operations (按位考虑 + dp思想记录操作后的结果
元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?
2022 Hangzhou Electric Power Multi-School Session 3 Question B Boss Rush
图解 Canvas 入门
gorm联表查询-实战
刘润直播预告 | 顶级高手,如何创造财富
canvas 高斯模糊效果
动态上传jar包热部署
【论文笔记】—低照度图像增强—Unsupervised—EnlightenGAN—2019-TIP
Getting started with 3D modeling for games, what modeling software can I choose?