| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 【问题】使用STM32CubeMX开发FreeRTOS只能添加3个任务——单片机操作系统的堆栈内存问题 -> 正文阅读 |
|
[嵌入式]【问题】使用STM32CubeMX开发FreeRTOS只能添加3个任务——单片机操作系统的堆栈内存问题 |
2. 堆栈溢出导致程序崩溃2.1 遇见问题在进行消息队列的实验中,由于之前测试按键扫描任务和跑马灯任务没有删除,直接在之前的prj上添加了向队列发送消息任务和从队列接收消息任务,在程序写完后,编译链接下载没有报错,但是在我使用新创建的队列发送和接收消息任务的时候程序只执行一次就卡死,找了很久没找到原因。 在进行将新添加的任务删除的尝试后,发现程序又可以正常进行多任务切换。只要加上新的任务就跑不通。为了避免程序崩溃是由于消息队列引起的嫌疑,我将消息队列任务移植到前面的3个任务中,并把多余的任务删除。实验现象正常。 于是怀疑是堆栈溢出的问题。 2.2 问题解析在STM32CubeMX中移植FREERTOS,默认配置堆栈空间是:
而在CubeMX中创建的任务栈空间大小默认最低为128Words 当任务超过4个时,堆空间就会溢出 在创建第5个任务后,其使用的堆空间已经到达3120Bytes,超过了之前分配的3072Bytes。因此堆溢出。 #一些存储器知识在参考了CSDN上的博客后,了解到一些堆栈与存储器关系的知识。 可以看到堆栈是存放在RAM中。 查看STM32芯片手册的RAM的大小,以实验使用的STM32F103RCT6为例: 可以看到,该单片机型号的SRAM最大为64Kbytes,Flash最大为512Kbytes。
回到STM32CubeMX,继续看FREERTOS的参数配置选项,选择内存管理设置Memory management settings,然后点击 2.3 问题解决将堆大小修改为6144Bytes(若不够则再改大,一般不超过芯片SRAM容量的一半) 修改后不再报错 经过检验,将TOTAL_HEAP_SIZE设置为6144后系统最多可以运行9个任务。 在添加一个任务的时候使用的堆空间开销会增大624Bytes。与预期的128*4=512Bytes有所出入,原因尚未了解。 2.4 FreeRTOS中的堆栈设置”与“启动文件中堆栈”的关系参考FreeRTOS中的堆栈设置”与“系统启动文件中堆栈”的关系。 FreeRTOS中的堆栈,并没有占用系统启动文件中的堆栈空间大小。**两者在空间分配上互不影响,需要单独设置。**并且FreeRTOS有自己的内存申请函数 增加RTOS的堆栈或启动文件的堆栈都会占用RAM。 一个小测试FreeRTOS中的堆栈设置界面: 启动文件分配堆栈界面: 计算系统占用RAM大小:0x800 = 2048 Bytes, 2048 + 6144 = 8192 Bytes。 生成keil工程,编译后计算实际RAM开销: 因此,在一个SRAM容量为64KBytes的芯片里,FreeRTOS配置的堆栈大小和启动文件分配的堆栈大小加起来不能超过SRAM容量,否则会出现错误!并且要预留一定的空间防止有额外开销导致程序崩溃。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:42:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |