搜索
bottom↓
回复: 2

一直没搞清楚堆栈,stm32定义了一段

[复制链接]

出0入0汤圆

发表于 2014-11-13 12:48:03 | 显示全部楼层 |阅读模式
我用的系统是freertos, freertos里边任务也有堆栈, 不知道和下面的代码里边的堆栈有什么联系


; 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

                PRESERVE8
                THUMB

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-11-13 13:21:59 | 显示全部楼层
同问。貌似你这个是单片机自己保存中断时寄存器和PC地址数据的,操作系统是保存任务数据的。
但堆和栈我一直没搞懂,而且看到有人把Heap_Size设为0的

出0入8汤圆

发表于 2014-11-13 13:39:20 | 显示全部楼层
本帖最后由 security 于 2014-11-13 13:43 编辑

这里只是设置了初始化栈,和堆,后面的__user_initial_stackheap函数会将栈和堆信息传递给C库,这样c库的malloc才能使用,对于不使用c库的malloc内存管理的话,heap可以直接设置为0。而栈,则不可以,__initial_sp从字面意思,就可以看出,这是系统初始化时的栈,会赋值给sp,保证系统正常初始化,你在中断向量表0地址,会发现这个栈的用处。
对于操作系统而言,每个任务的栈,可以是直接定义静态数组,也可以从用户自己堆里面动态申请,然后在任务运行时,将此内存空间的顶部地址,赋值给sp,这里的值,与这个__initial_sp不一样。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 05:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表