rt-thread源码分析篇四:堆栈分配机制

一、前言

参考文档:《Libraries and Floating Point Support Guide》

二、堆栈分配机制

《Libraries and Floating Point Support Guide》文档中对堆栈描述如下:
在这里插入图片描述
堆栈模型有2种:
1、单内存区域模型(堆栈共用一片空间)
2、双内存区域模型(堆和栈都有独立空间)

双内存区域模型开启方法
1、汇编语言使用语句:IMPORT __use_two_region_memory
2、c语言使用语句:#pragma import(__use_two_region_memory)

三、测试

1、使用STM32CubeMX生成keil工程(以STM32F103ZET6芯片为例)
2、堆栈分配代码在启动文件(startup_stm32f103xe.s)中,代码如下:

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size		EQU     0x400

                AREA    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     0x200

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

3、启动代码中设置堆栈内存模型

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
                 IF      :DEF:__MICROLIB
                
                 EXPORT  __initial_sp
                 EXPORT  __heap_base
                 EXPORT  __heap_limit
                
                 ELSE
                
                 IMPORT  __use_two_region_memory
                 EXPORT  __user_initial_stackheap

__MICROLIB含义:是否使用microlib

如果定义__MICROLIB宏,堆栈使用单区域模型,如果没有定义,堆栈使用双区域模型。

4、keilmicrolib选择方式如下
在这里插入图片描述
选中以后,keil编译时使用microlib

5、不选中microlib,编译后分析map文件
在这里插入图片描述
6、选中microlib,编译后分析map文件
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值