当前位置:网站首页>【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: 266. All Palindromic Permutations
- redis可视化管理软件Redis Desktop Manager2022
- #yyds dry goods inventory #Switching equipment serious packet loss troubleshooting
- 2022多校第二场 K题 Link with Bracket Sequence I
- 网站最终产品页使用单一入口还是多入口?
- 《MySQL入门很轻松》第2章:MySQL管理工具介绍
- 10 种常见的BUG分类
- Raw and scan of gorm
- What is next-generation modeling (with learning materials)
- ansible学习笔记分享-含剧本示例
猜你喜欢
随机推荐
日志(logging模块)
E - Distance Sequence (prefix and optimized dp
【Unity编译器扩展之进度条】
TinyMCE disable escape
Senior game modelers tell newbies, what are the necessary software for game scene modelers?
Software testing interview questions: test life cycle, the test process is divided into several stages, and the meaning of each stage and the method used?
2022牛客多校训练第二场 J题 Link with Arithmetic Progression
MongoDB搭建及基础操作
软件测试面试题:一套完整的测试应该由哪些阶段组成?
2022 Multi-school Second Session K Question Link with Bracket Sequence I
国内网站用香港服务器会被封吗?
软件测试面试题:软件都有多少种分类?
【unity编译器扩展之模型动画拷贝】
《WEB安全渗透测试》(28)Burp Collaborator-dnslog外带技术
机器学习(公式推导与代码实现)--sklearn机器学习库
数据类型及输入输出初探(C语言)
Software Testing Interview Questions: Qualifying Criteria for Software Acceptance Testing?
Software testing interview questions: Have you used some tools for software defect (Bug) management in your past software testing work? If so, please describe the process of software defect (Bug) trac
About I double-checked and reviewed the About staff page, returning an industry question
2022杭电多校第一场 1004 Ball