关于位置相关码和位置无关码的理解(韦东山视频中mmu实验和串口实验)

本文深入探讨了MMU实验与串口实验中位置相关码与位置无关码的区别,通过分析lds文件,解释了这两种代码在不同存储位置的应用场景,帮助理解程序运行与存储之间的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于位置相关码和位置无关码的理解(韦东山视频中mmu实验和串口实验)

mmu和串口实验都有“设置存储控制器以使用SDRAM 函数”memsetup ,mmu实验用的是位置相关的代码写的,而串口实验用的是位置无关的代码写的。

程序的运行位置,和存储位置由.lds文件决定。

在mmu实验中lds文件为

SECTIONS {
  firtst    0x00000000 : { head.o init.o }
  second    0xB0004000 : AT(2048) { leds.o }
}

memsetup函数在init.c文件中,由lds文件分析这段函数是在2440内部的SRAM中运行的,所以可以使用位置相关码写。

在串口实验中lds文件为

SECTIONS {
    . = 0x30000000;
    .text          :   { *(.text) }
    .rodata ALIGN(4) : {*(.rodata)}
    .data ALIGN(4) : { *(.data) }
    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }
}
整个代码都是要放在SDRAM中运行,memsetup是2440启动自动拷贝到内部4k的SRAM中去了。所以会出现运行位置在SDRAM中,而实际运行是在2440中。所以要用位置无关码来写。

以上为个人学习总结,如有错误欢迎指正,本人在此先谢谢各位微笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值