stm32 堆栈的作用及设置 FreeRTOS内存策略 如何修改stm32的堆栈

编程入门 行业动态 更新时间:2024-10-09 03:32:01

stm32 <a href=https://www.elefans.com/category/jswz/34/1771218.html style=堆栈的作用及设置 FreeRTOS内存策略 如何修改stm32的堆栈"/>

stm32 堆栈的作用及设置 FreeRTOS内存策略 如何修改stm32的堆栈

1.keil中堆栈的设置文件 startup_stm32f10x_hd.s

Stack_Size:栈大小
Heap_Size:堆大小

Stack_Size      EQU     0x00000400AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size       EQU     0x00000200AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size

2. 作用

  • 栈的作用是存放函数的参数与返回值、局部变量等
  • 堆的作用是调用C语言中malloc与free所需要的空间

3. FreeRTOS静态与动态内存

FreeRTOS中的任务有静态内存和动态内存两种策略,静态内存毋庸置疑,是全局变量,并不是局部变量,所以,并不需要对keil编译器中的stack的大小进行更改。而动态内存比较容易混淆,到底需不需要占用堆的空间呢,答案是不确定的,因为FreeRTOS中的动态内存管理又有heap_1.c、heap_2.c 、heap_3.c、heap_4.c 这四种内存管理方案,但是,除了heap_3.c 这种内存管理方案,使用了c标准的malloc()和free()函数。需要在keil中修改堆的大小,其余都是全局静态变量,不需要对堆栈的大小进行任何修改。

4.修改堆栈的时机

  • 局部变量很多时要适当调整栈的空间
  • 调用malloc与free函数时要按需调整堆的空间
  • 调整堆栈的空间过大时,会造成编译后占用的sram超过单片机的内存的大小,虽然可以正常编译,但是程序无法运行,进入硬件异常中断

更多推荐

stm32 堆栈的作用及设置 FreeRTOS内存策略 如何修改stm32的堆栈

本文发布于:2024-02-05 12:31:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745399.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:堆栈   内存   作用   策略   FreeRTOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!