本帖最后由 牛牛特工 于 2009-12-17 09:45 编辑
谢谢icecut指点 为啥俺没想到 郁闷
好 试试!! halt查看CPSR 发现CPSR竟然处于 IRQ处理状态 并且FIRQ中断响应好像是打开的, 在.s文件中增加如下代码段
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0x13 //svc模式
orr r0,r0,#0xc0// 禁止中断
msr cpsr,r0
郁闷啊 还是不行 不过这次进入这个程序之后 跳的地址不一样了 之前跑到0xf开头 这次跑到 0x8开头了
首先reset 然后禁止MMU 下载代码到0x5c000000 再禁止MMU resume 0x5c000000
halt 后cpsr=0x6000003d pc=0x8xxxxxxx
并且MMU 和icache 又被使能了 奇怪
明明已经执行了 xscale mmu disable xscale icache disable xscale dcache disable
只要一resume 到我烧程序的地址,就又被使能了
看了反汇编 .dis 觉得貌似是肯定会有问题哈,
00000000 <_start>:
0: e329f0d3 msr CPSR_fc, #211 ; 0xd3
4: e59f0010 ldr r0, [pc, #16] ; 1c <halt_loop+0x4>
8: e3a01000 mov r1, #0 ; 0x0
c: e5801000 str r1, [r0]
10: e59fd008 ldr sp, [pc, #8] ; 20 <halt_loop+0x8>
14: eb00000d bl 50 <main>
这里bl到 50 而程序地址实际在 0x5c000000 +0x50 不晓得能否正确跳转到呢?
想试试有没有什么设断点的方法,设一个断点
用BP命令 设了一个断点 CPU能够在此停下 说明程序能够执行到这里
唉0x5c000060处设了一断点 程序能够运行到此处 并且MMI Dcache Icache 处于不使能状态,CPSR=Df 即中断已经关闭 那么到底在什么地方出错导致程序跑飞了呢
按照相关的教程 设置了eclipse 但是仍然无法调试 这个教程也没有设置地址等 估计是肯定不行,目前直接导致我板子里原有的bootloader也废了
没办法 还是只能命令行设断点 而且还只能用bp设仅一个硬件断点 ,软件断点的命令查不到
发现程序在该地址跑飞 这个应该是编译的问题咯 要么编译器不正常 要么就是makefile写的有问题
00000058 <main>:
58: e52de004 push {lr} ; (str lr, [sp, #-4]!)
5c: e24dd004 sub sp, sp, #4 ; 0x4
60: e3a03000 mov r3, #0 ; 0x0
64: e58d3000 str r3, [sp]
68: e3a03141 mov r3, #1073741840 ; 0x40000010
6c: e283360e add r3, r3, #14680064 ; 0xe00000
70: e3a027c3 mov r2, #51118080 ; 0x30c0000
74: e5832000 str r2, [r3]
78: e3a00c75 mov r0, #29952 ; 0x7500
7c: e2800030 add r0, r0, #48 ; 0x30
80: ebffffe9 bl 2c <wait>
84: e59d3000 ldr r3, [sp]
88: e3530003 cmp r3, #3 ; 0x3
8c: 979ff103 ldrls pc, [pc, r3, lsl #2]
90: ea000026 b 130 <main+0xd8>
94: 000000a4 .word 0x000000a4
98: 000000c8 .word 0x000000c8
9c: 000000ec .word 0x000000ec
a0: 00000110 .word 0x00000110
如上 当程序在 0x90之前时 可以中断
到了 90就不能正常运行了 对linux的这些工具还是不熟悉啊 makefile下面 arm-elf-ld 后面接lds文件 还没弄明白 试了下把.=改了一下 编译出来的基地址就变了~~~ 然后CFLAG是一堆参数 也不晓得啥意思~~ 查看了gcc 4.2.4的mannual command option 这一节总算是知道了 CFLAG的意思 fomit-frame-pointer 这个选项的E文 frame-pointer不晓得指的是哪个寄存器 freestandding 这个概念还不是很清楚 google这个词被和谐了 baidu出来得到一个 托管(host)和 独立(freestandding)的概念 看起来俺们的学习就象是爬一样哈哈
leds.rar
(8.44 KB)
程序及makefile在此 |