完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
链接脚本
SECtiONS { firtst 0x00000000 : { head.o init.o nand.o } second 0x30000000 : AT(4096) { main.o serial.o} } ---------------------------------------------------------------------- 汇编程序head.s ------------------------------------------------------------------------------------ .extern main .text .global _start _start: Reset: ldr sp, =4096 @ 设置栈指针,以下都是C函数,调用前需要设好栈 bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断重启 bl clock_init @ 设置MPLL,改变FCLK、HCLK、PCLK bl memsetup @ 设置存储控制器以使用SDRAM bl nand_init ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址 mov r1, #4096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处 mov r2, #2048 @3. 复制长度= 2048(bytes),对于本实验的main.c,这是足够了 bl nand_read @调用C函数nand_read ldr pc, =on_sdram @ 跳到SDRAM中继续执行 on_sdram: ldr sp, =0x34000000 @ 设置堆栈 ldr lr, =halt_loop @ bl main ldr pc, =main halt_loop: b halt_loop ----------------------------------------------------------------- 这个编译没有问题但是 改成下面就不可以 ldr pc, =on_sdram @ 跳到SDRAM中继续执行 on_sdram: ldr sp, =0x34000000 @ 设置堆栈 bl main halt_loop: b halt_loop 报错 : relocation truncated to fit: R_ARM_PC24 main 原因是b跳转范围不够, 但是在前一句 ldr pc, =on_sdram ,这个时候pc已经跳转到了sdram, 从sdram跳转到main,为什么范围还不够? |
|
相关推荐
1个回答
|
|
自己回答一下,ldr pc, =on_sdram on_sdram: 并没用pc并没有调到sdram里面,那问题来了,这样分段的链接文件,我又想在第二段代码使***令该如何做?
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2177 浏览 6 评论
1982 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4540 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 22:16 , Processed in 0.620732 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号