刚开始学习ARM,正在跑裸板程序,开发环境是ECLIPSE+j-link_GDB_SERVER。
在调试代码转移的时候,怎么都调试不了.
刚开始的点灯程序是可以调试的,一切都正常。这些代码直接放在2440的SRAM中了。
当我要调试把NAND FLASH中的代码转移到SDRAM中的时候就不行了。怎么都没反应。是不是J-LINK不支持对NAND FLASH的调试,调试的时候,J-LINK无法把相应的代码放到NAND FLASH中去?
请问如果是这样的话,我怎么才能调试像代码转移这一类的程序呢?4KB的SRAM空间啥都干不了,我剩下的代码要往哪放呢?
一个小菜鸟,分不多,还请大家多帮帮忙~~~
这要看你的init.s中是怎么写的?
一般如果想脱离调试器运行程序,首先需要把程序下载到nandfash,之后在boot.s中需要nandcopy即把nand中EW,RO搬运到SDRAM,搬运结束后PC直接指到SDRAM中
nandflash本身不能运行程序,只做存储介质,不存在在nand中调试程序这一说。。。
LZ可以加我QQ。我们交流一下
程序主代码如下:
.text
.global _start
_start:
@函数disable_watch_dog, memsetup, init_nand, nand_read_ll在init.c中定义
ldr sp, =4096 @设置堆栈
bl disable_watch_dog @关WATCH DOG
bl memsetup @初始化SDRAM
bl nand_init @初始化NAND Flash
@将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中
@nand_read_ll函数需要3个参数:
ldr r0, =0x30000000 @1. 目标地址=0x30000000,这是SDRAM的起始地址
ldr r1, =14096 @2. 源地址 = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处
mov r2, #1024 @3. 复制长度= 1024(bytes),对于本实验的main.c,这是足够了
bl nand_read @调用C函数nand_read
ldr sp, =0x34000000 @设置栈
ldr lr, =halt_loop @设置返回地址
ldr pc, =main @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转
halt_loop:
b halt_loop
链接文件:
SECTIONS {
firtst 0x00000000 : { head.o init.o nand.o}
second 0x30000000 : AT(14096) { main.o }
}
其中Main函数就是个简单的点灯程序。
引用: 引用 3 楼 ialwaysgo 的回复:
nandflash本身不能运行程序,只做存储介质,不存在在nand中调试程序这一说。。。
LZ可以加我QQ。我们交流一下
请问QQ是多少?我想加一下~~
还有GM大大,不是调试中出错,是点了debug之后什么反应都没有,这是为什么?
412316446
@将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中 ???
很怪异,怎么不是0开始的地方
恩,debug都无法调试???
lz介意你别一下走迈很多步,慢慢来,先确定JLINK是好的?
之后再确定SDRAM是否成功初始化了,在这些基础上才能谈成功的加载调试
jlink 是不能直接吧程序写到nand中的 ,只能直接写到nor 中,调试的话应该是把程序写到内存中在内存中调试,调试正确以后 再用写nand函数写到nand中