打印
[技术问答]

裸机的情况下malloc疑问

[复制链接]
1694|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2021-10-25 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有两个问题:
问题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到底在哪定义了? 谢谢各位大侠~

使用特权

评论回复
沙发
flycamelaaa| | 2021-10-25 11:36 | 只看该作者

你使用的不是新唐的 BSP吧?
新唐的BSP 中,Stack_Size 和 Heap_Size  都是在文件startup_M451Series.s 中直接定义数值,没有 #if 宏定义

你用的编译环境中,这两个定义可能在环境变量中配置,若找不到,你可以先注释掉不需要的#if 语句

使用特权

评论回复
板凳
asmine| | 2021-10-26 16:17 | 只看该作者
一看到堆栈就头疼,
座听大佬们讲解~

使用特权

评论回复
地板
huahuagg| | 2021-10-26 23:22 | 只看该作者
怎么要用到这个操作的

使用特权

评论回复
5
嵌入小菜菜| | 2021-10-27 17:45 | 只看该作者
这个神操作,为什么用到这个指令?用到指令的初衷是什么?

使用特权

评论回复
6
redone| | 2021-11-5 13:28 | 只看该作者
这个有点难哦~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

962

主题

3934

帖子

10

粉丝