Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1000991
  • 博文数量: 153
  • 博客积分: 4195
  • 博客等级: 上校
  • 技术积分: 2631
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-22 11:32
文章存档

2012年(7)

2010年(35)

2009年(111)

分类:

2009-06-30 10:00:21

1.为什么使用simple和scf?
simple模式程序是连续存放的,scf是分散装载,所以可以让一段程序在30000000地址,一段在4000000地
址。
2.使用simple的注意点:
不能直接使用esram来跑,因为刚开始入口地址是4000000,然后编译器会按照这个地址来链接,但是
esram一旦remmap之后,只有一个逻辑地址,也就是说只有0x0000000,所以之前链接的代码会不认。
因此需要做一个运行脚本,在axd加载的时候自动执行,脚本的选项在axd下的option->configure interface->session file->run configure script,脚本中把esram映射为0地址,在ads中编译的入口地址即为0x0;这样编译的时候就按照0x0来链接的,这样后面的程序就是ok的。
同理也可以利用运行脚本把sdram映射为0地址,这样所有的程序其实就是在sdram里面跑的了。
运行脚本如下:
主要是配置sdram的参数和remap寄存器
SETMEM 0x11000018 0x1E104177 32
SETMEM 0x11000020 0x0000000b 32(SETMEM 0x11000020 0x80000000 32)
SETMEM 0x1100001C 0x80001860 32

3.可以试一下入口地址为30000000,sdram即使不配置也有2M的空间可以使用,remmap为sdram为0地址。
(当然这里面不能配置sdram,因为不能sdram配置自己)
今天试验是可以的,以前有一个概念搞错了,认为入口地址一定要是系统上电自动执行的地址,其实入口
地址只是编译调试时使用的,即使是之前一直使用的0x4000000也不是系统上电执行的地址,系统上电只
能从norflash或者NandFlash中启动。因此可以使用入口地址为0x30000000
阅读(1767) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

myleeming2009-06-30 10:10:52

当然使用这样的scf在调试过程是可以打断点的: SDram 0x00000000 { SDram 0x00000000 { int_gfd.o (INT, +First) * (+RO,+RW,+ZI) } } 但是这个的话只能作为调试时用,在真实要烧到板子的话不能用,所以如果是用scf还是使用上面那种,调试的时候在中断处理函数打断点就可以,无需在中断返回那一段打断点。

myleeming2009-06-30 10:08:02

另:使用scf模式时,若使用下面的代码: SDram 0x30000000 { SDram 0x30000000 { int_gfd.o (INT, +First) * (+RO,+RW,+ZI) } } 则会导致在程序代码的中断返回处理那一段打断点不生效,因为那段代码是定位到0x30000000的地址的,而中断处理是在0地址的,虽然经过remap后这两段地址都是相同的物理空间,但是调试器只会认0地址,不会认30000000,因此在程序代码中打断点将没有效果(因为程序在编译的时候已经以0x30000000作为地址的),而在mem中对0地址的代码打断点能生效的。