硬汉嵌入式论坛

 找回密码
 立即注册
查看: 664|回复: 4
收起左侧

[技术讨论] 关于 STM32F407 使用arm- gcc 编译 ld 指定堆栈地址的问题

[复制链接]

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2023-8-23 17:43:13 | 显示全部楼层 |阅读模式
本帖最后由 TianSong 于 2023-8-23 17:58 编辑




请教大家一个问题,关于 ld 对于 ram 内存分布的组织, 栈的空间是在 ram 的顶部吗?查资料是这样的,但是实际测试下来结果有些出入


想在 ld 指定一块内存空间给 rtos 使用,在网上查资料说(gcc编译器)栈在ram顶部,堆在ram底部,中间一块可以自己用。
但是打印 .ld 指定的栈地址,发现没有在 ram 顶部,而是和堆相邻。在 main 中申请局部变量,发现没有遵循 .ld 指定的地址,而是出现在了 ram 顶部。


  ._user_heap_stack :
  {
    . = ALIGN(8);
    PROVIDE ( end = . );
    PROVIDE ( _end = . );

    __heap_start = .;
    . = . + _Min_Heap_Size;
    __heap_end = .;

     __stack_start = .;
    . = . + _Min_Stack_Size;
    __stack_end = .;

    . = ALIGN(8);
  } >RAM



1.png
2.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2023-8-24 01:08:41 | 显示全部楼层
准确的说,不是在总RAM大小的顶部,而是程序占用RAM空间大小的顶部。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2023-8-24 21:13:30 | 显示全部楼层
eric2013 发表于 2023-8-24 01:08
准确的说,不是在总RAM大小的顶部,而是程序占用RAM空间大小的顶部。

硬汉哥,有一个疑问是,【main函数中申请的局部变量打印出来的地址】没有在 【链接脚本指定的地址实际打印出来】的范围内,这是为什么呢?是关于栈部分的链接脚本没有生效么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106757
QQ
发表于 2023-8-25 09:16:29 | 显示全部楼层
TianSong 发表于 2023-8-24 21:13
硬汉哥,有一个疑问是,【main函数中申请的局部变量打印出来的地址】没有在 【链接脚本指定的地址实际打 ...

有可能,我没配置过GCC的ld文件。

只配置过Embedded Studio里面的GCC脚本,他是用的类似IAR的icf文件配置。
回复

使用道具 举报

1

主题

3

回帖

6

积分

新手上路

积分
6
发表于 2023-10-8 17:58:29 | 显示全部楼层
那个只是检查用,msp在复位时自动加载

1.png
2.png
3.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 16:41 , Processed in 0.240426 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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