“存储地址”和“运行地址”:

本文探讨了嵌入式系统中存储地址和运行地址的概念,以STM32为例,说明两者可能相同,如STM32的0X08000000。I.MX6U开发板的程序在上电后由内部Boot ROM拷贝到DDR的0X87800000地址。链接地址和运行地址在编译时需配置一致,以确保程序正确执行。地址映射和统一编址是关键,理解这些规则对嵌入式开发至关重要。
摘要由CSDN通过智能技术生成

“存储地址”和“运行地址”:

       存储地址”就是可执行文件存储在哪里,可执行文件的存储地址可以随意选择。“运行地址”就是代码运行的时候所处的地址,这个我们在链接的时候就已经确定好了,代码要运行,那就必须处于运行地址处,否则代码肯定运行出错。比如 I.MX6U 支持 SD 卡、EMMC、NAND 启动,因此代码可以存储到 SD 卡、EMMC 或者 NAND 中,但是要运行的话就必须将代码从 SD 卡、EMMC 或者NAND 中拷贝到其运行地址(链接地址)处,“存储地址”和“运行地址”可以一样,比如STM32 的存储起始地址和运行起始地址都是 0X08000000。

一个可执行的 bin 文件,其链接地址和运行地址要相等,也就是链接到哪个地址,在运行之前就要拷贝到哪个地址去。

裸机例程都是烧写到SD卡中,上电以后 I.MX6U 的内部 boot rom 程序会将可执行文件拷贝到链接地址处,这个链接地址可以在 I.MX6U 的内部 128KB RAM 中(0X900000~0X91FFFF),也可以在外部的 DDR 中,起始地址都为 0X8000 0000。例程统一拷贝到DDR3中0X8780 0000这个地址。

I.MX6U-ALPHA 开发板的 DDR 容量有两种:512MB 和256MB,起始地址都为 0X8000 0000,只不过 512MB 的终止地址为 0X9FFF FFFF,而 256MB 容量的终止地址为 0X8FFF FFFF。之所以选择 0X87800000 这个地址是因为后面要讲的 Uboot 其链接地址就是 0X8780 0000,

代码编译、烧录流程:

运行地址和链接地址在编译时

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值