• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

想做内存管理,没发现MDK中堆和栈是怎么设置并分配的

1219279984@qq.com 2017-12-25 浏览量:1062
IAR工具下打开工程option选项,里面有个linker可以设置CSTACK和HEAP的大小,而且占用的RAM位置是末尾,MDK的option选项下面没有看到这个的设置位置,那他是编译完自动分配的吗?占用的RAM地址又是从哪里开始的?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • STM32在启动文件中,初始化了用户堆栈大小以及栈底位置,程序开始跑后堆以此位置向上增长,栈向下增长
    • 发布于 2017-12-26
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了 :https://datasheet.lcsc.com/lcsc/1804241020_Daily-Silver-Imp-Microelectronics-IMP811JEUS-T_C72854.pdf 回复

其他答案 数量:6
  • 这个看启动文件,栈的大小和堆的大小都在启动文件中分配。


        HEAP                                     0x20000120   Section     1024 
        Heap_Mem                                 0x20000120   Data        1024
        STACK                                    0x20000520   Section     1024 
        Stack_Mem                                0x20000520   Data        1024 
        __initial_sp                             0x20000920   Data           0


    这个起始地址和你程序有关,堆栈的地址分配是链接在你程序之后的。

    • 发布于2017-12-25
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :测试没有静电防护,还有电容从料带全部拨出放在桌面没有任何防护措施。这些都会影响容值。 回复

  • 在icf文件中,一般在工程目录下,你瞅瞅
    • 发布于2017-12-25
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :更换串口在试试或适配器 回复

  • 在.s驱动文件中可以直接配置用户程序的堆栈大小,栈叫STACK,堆叫HEAP,旁边就有分配的数值。

    • 发布于2017-12-26
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :8701039 (22-28 AWG, Reel) 回复

  • 在启动文件里,startup这个文件夹下的.s文件里就是了
    • 发布于2017-12-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般在启动文件或者link文件中指定堆的大小的,
    • 发布于2017-12-31
    • 举报
    • 评论 0
    • 0
    • 0

电子老工程师 回复了  :502179001 (502179001) 回复

相关问题

问题达人换一批

想做内存管理,没发现MDK中堆和栈是怎么设置并分配的