完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近学习2440异常处理这一章的内容,编写好start.s文件后发现无法调用printf_cpsr()函数,原因是我的lds文件中start.o的地址在0x0000000,而min.o的地址位于0x30000000,这样要调用min.o中的printf_cpsr()函数时,使用bl或b命令是无法跳转这么长的距离;于是我使用了ldr pc,=printf_cpsr命令,但是调试时候发现start.s执行这条命令后跳转到printf_cpsr()函数执行但执行完后,函数不能返回start.s文件继续执行下面的内容,这该怎么办,另外2440硬件调试中lds文件都采用SECtiONS { firtst 0x00000000 : { start.o init.o nand.o }
second 0x30000000 : AT(4096) { main.o lib/libc.a } } 而不是: SECTIONS { . = 0x30000000; .text : { start.o init.o nand.o * (.text) } . = ALIGN(4); .rodata : { * (.rodata) } . = ALIGN(4); .data : { * (.data) } . = ALIGN(4); bss_start = .; .bss : { *(.bss) *(COMMON) } bss_end = .; } 开始文件start.s为: .text .global _start _start: ldr sp,=4096 @设置堆栈 bl disable_watch_dog @关看门狗 bl clock_init @设置时钟 bl memsetup @设置内存 bl nand_init ldr r0,=0x30000000 @1.SDRAM目标地址 mov r1,#4096 @2.源地址 mov r2,#0x4000 @3.复制文件大小 bl nand_read bl on_ddr on_ddr: ldr lr,=hello_ret ldr pc,=hello //执行打印hello函数 ,此时调用出错
cpsr20170112.zip
(234.19 KB, 下载次数: 0
)
hello_ret: ldr sp, =0x34000000 @ ÉèÖÃÕ»Ö¸Õë ldr lr, =halt_loop @ ÉèÖ÷µ»ØµØÖ· ldr pc, =main @ µ÷ÓÃmainº¯Êý halt_loop: b halt_loop 后一直编写方法是将整个程序全部链接到一个统一的目标地址,但是却无法运行程序,这是什么原因啊,求大神指点,多谢多谢! |
|
相关推荐
1 个讨论
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
ElfBoard ELF 1板卡-开发板启动后打印random: nonblocking pool is initialized
393 浏览 0 评论
G2D图像处理硬件调用和测试-基于米尔-全志T113-i开发板
1860 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡- 减少uboot阶段的等待时间
1260 浏览 0 评论
嵌入式学习-飞凌ElfBoard ELF 1板卡 - 重新打包文件系统发现ftp无法正常连接
1753 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-6ull设置两个ip
2305 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-19 16:49 , Processed in 0.482061 second(s), Total 50, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号