缘由

这两天在梳理芯片的启动流程, 研究到了链接脚本(样本为stm32cube ide 中的 stm32f407 的 flash 链接脚本).

产生了一个疑问AT>是什么?

答案

AT>就是用于指定这个section的加载内存地址(LMA)的

解释

链接脚本生成sections要被加载到memory中,内存分两种

  • LMA 加载内存地址
  • VMA 虚拟内存地址,也可以理解为运行内存地址

像下面这种的就是LMA和VMA都是一样的, 都是放在FLASH里面的

  /* Constant data into "FLASH" Rom type memory */
.rodata :
{
. = ALIGN(4);
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
. = ALIGN(4);
} >FLASH

像下面这种就是LMA和VMA不一样的, 链接的时候放在FLASH里面, 运行的时候就从FLASH里面搬运到RAM中

  /* Used by the startup to initialize data */
_sidata = LOADADDR(.data); /* Initialized data sections into "RAM" Ram type memory */
.data :
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start */
*(.data) /* .data sections */
*(.data*) /* .data* sections */
*(.RamFunc) /* .RamFunc sections */
*(.RamFunc*) /* .RamFunc* sections */ . = ALIGN(4);
_edata = .; /* define a global symbol at data end */ } >RAM AT> FLASH

搬运data段的汇编代码

/* Copy the data segment initializers from flash to SRAM */
ldr r0, =_sdata
ldr r1, =_edata
ldr r2, =_sidata
movs r3, #0
b LoopCopyDataInit CopyDataInit:
ldr r4, [r2, r3]
str r4, [r0, r3]
adds r3, r3, #4 LoopCopyDataInit:
adds r4, r0, r3
cmp r4, r1
bcc CopyDataInit /* Zero fill the bss segment. */
ldr r2, =_sbss
ldr r4, =_ebss
movs r3, #0
b LoopFillZerobss

目的

设置这个的目的就是为了将存储的位置和运行的位置区分开来

参考

What does > region1 AT > region2 mean in an LD linker script?

3.6.8 Output Section Attributes

3.6.8 Output Section Attributes看完之后再去看What does > region1 AT > region2 mean in an LD linker script?就一目了然了

最新文章

  1. Oracle sql连接
  2. 面试题目——《CC150》数组与字符串
  3. npm(cnpm)介绍
  4. (转载)FT232RL通信中断问题解决办法总结
  5. XproerIM V2开源,基于XproerUI引擎构架
  6. SecureCRT通过console口连接思科设备
  7. EF经验分享_jimmyzzc
  8. 关于修改Eclipse工作空间对应的文件夹名称之后的处理.
  9. hdu 1568 Fibonacci 数学公式
  10. 使用js为html元素动态添加class
  11. Bootstrap-模态框Modal使用
  12. WordPress插件制作笔记(一)---First Plugins Demo
  13. linux安装安卓开发工具android studio
  14. 最长回文 hdu3068(神代码)
  15. 快速制作gif动图
  16. 01 自学Aruba之功率单位和相对单位
  17. kali 开启ssh服务
  18. Altera PLL应用中注意的问题
  19. 用光的微粒说和广义相对论来解释衍射现象 Explanation of Diffraction Phenomenon by Particle Theory of Light and General Relativity
  20. tp5+layui 实现上传大文件

热门文章

  1. centos yum安装docker
  2. flutter系列之:深入理解布局的基础constraints
  3. C语言下for循环的一点技巧总结
  4. printf-库函数重定向、重载
  5. Java云原生崛起微服务框架Quarkus入门实践
  6. 在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“
  7. NLP之基于TextCNN的文本情感分类
  8. 关于网页实现串口或者TCP通讯的说明
  9. letcode-学习-数组去重
  10. selenium 添加特殊配置(如不完整 希望各位大神评论告诉我)