这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [求助]s3c44b0x bsp的问题

共4条 1/1 1 跳转至

[求助]s3c44b0x bsp的问题

菜鸟
2006-03-09 19:08:34     打赏

简要基本情况:bootrom_uncmp(#define RAM_SIM)用于sdt仿真,boorom_uncmp。hex(#undef RAM_SIM)写入flash

地址定义:

#undef LOCAL_MEM_AUTOSIZE /* run-time memory sizing */
#define LOCAL_MEM_SIZE 0x00800000 /* 8M */
#define USER_RESERVED_MEM 0x00100000 /* see sysMemTop() */
#define DRAM_TYPE 1 /* 1 - SDRAM, 0 - EDO DRAM */

#define ROM_BASE_ADRS 0x00000000 /* base of Flash/EPROM 16 MB */
#define ROM_TEXT_ADRS 0x00000000 /* code start addr in ROM */
#define ROM_SIZE 0x00080000 /* size of ROM holding VxWorks 512k */

#define ROM_COPY_SIZE ROM_SIZE
#define ROM_SIZE_TOTAL 0x00200000 /* total size of ROM 2MB */

#define RAM_LOW_ADRS 0x0c001000 /* VxWorks image entry point */
#define RAM_HIGH_ADRS 0x0c500000

sdt加载boorom_uncmp从入口rominit()单步往下执行,顺利进入romstart(),

copylongs,filllongs低地址(0x0c000000~0x0c4ffe00)都没问题,在filllongs高地址

(0x0c580000~0x0c700000)之前pc是0x0c5002a8,入栈,保留在0x0c4fffe0

(0x0c4ffe00~0x0c500000,是SAVE_STACK,不会被清零),filllongs的过程中不会对

堆栈进行操作,可是当我filllongs完高地址后所有的堆栈变为0,得不到正确的返回地址

0x0c5002a8,进入不了usrinit(),真不知怎么会发生这种错误,冥思苦想,百思不得其

解,请各位高手指教,不甚感激

[align=right][color=#000066][此贴子已经被作者于2006-3-11 0:37:41编辑过][/color][/align]



关键词: 求助     s3c44b0x     问题     #define    

菜鸟
2006-03-09 19:22:00     打赏
2楼

不清楚你的RAM_HIGH_ADRS什么东东是怎么拷来拷去的,不过就说说为什么一定要拷到对应的地址吧:

由于我们的bootrom的代码是由linker绝对编址,既是说每个函数的地址都已经被写死了,比如说你的rom_init被定义成0x1000的地址,那么你的程序中所有对rom_init的引用都会变成对0x1000的引用(当然还是有相对跳转的情况),而如果你不把rom_init拷到0x1000处,那么在0x1000处的内容就是不可知的,一旦你想调用rom_init,程序仍然会跳至0x1000,那么程序就会崩溃。(当然,你可以通过自己添加偏移来找到rom_init,自己实现跳转,比如在rom中执行就是如此,不过....你真的不嫌麻烦吗???)

[align=right][color=#000066][此贴子已经被作者于2006-3-9 11:22:55编辑过][/color][/align]

菜鸟
2006-03-09 19:47:00     打赏
3楼

明白,多谢zwzw1大侠

[align=right][color=#000066][此贴子已经被作者于2006-3-11 0:40:30编辑过][/color][/align]

菜鸟
2006-04-01 09:24:00     打赏
4楼

多谢zwzw1大侠


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]