单片机学习小组
直播中

张飞雄

8年用户 1036经验值
私信 关注

arm-none-eabi-gcc工具链去哪里设定malloc的最大stack的大小?

有两个问题:
问题1.
程序在裸机情况下, 我用的是 arm-none-eabi-gcc 工具链, 里面的 malloc 是 Newlib-Nano 实现的, 现在的问题是, 去哪里设定 malloc的最大 stack 的大小?  是不是在 startup_M451Series.S 里修改?

针对问题1.
我看到此文件有以下内容:

=============================

#ifdef __STACK_SIZE
        .equ        Stack_Size, __STACK_SIZE
#else
        .equ        Stack_Size, 0x00000800
=============================
#ifdef __HEAP_SIZE
        .equ        Heap_Size, __HEAP_SIZE
#else
        .equ        Heap_Size, 0x00000100

于是我修改了那个文件的 0x00000800和 0x00000100这两个值, 最后编译出来的hex的md5(哈希校验值) 跟改之前编译的hex的md5 一样, 我就在想, 会不是是哪里定义了这两个变量(__STACK_SIZE和 __HEAP_SIZE), 导致我这里改了也没用. 于是我全局查找关键字, 也没查到哪里定义了这两个宏.... 这就奇怪了, 我改了代码, 可是编译后的hex跟改前的竟然一模一样. 为了排除 makefile 写漏了依赖, 我把所有目标删除, 从 0 开始编译. 结果也是一样, hex 没有任何不同.

问题2.
请问这个 __STACK_SIZE __HEAP_SIZE到底在哪定义了? 谢谢各位大侠~




回帖(1)

h1654155275.5748

2024-1-5 16:15:33
__DEFAULT_STACK_SIZE#endif&nbs

p;        .section .stack        .global __initial_sp        .type        __initial_sp, %object        .size        __initial_sp, 4__initial_sp:        .word        Stack_Mem_End        .        .        .        .        .        .        .        .        .        .        .        .        .        .section .heap        .global __HeapLimit        .type        __HeapLimit, %object        .size        __HeapLimit, 4__HeapLimit:        .word        Heap_Mem_End==========================================这些内容和我的问题是否有相关性?问题2.我在 linux 下编译程序, 编译后使用 openocd 下载程序, 但是程序一运行就是 Bus Error。请问这个问题是由 malloc 的最大 stack 的大小问题引起的吗?有什么可能的解决办法吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分