[CPLD] 求助,SDK bootloader失败

[复制链接]
2971|12
 楼主| smeiyang 发表于 2011-12-2 15:06 | 显示全部楼层 |阅读模式
大家好,我在SDK里面建立了一个bootloader,就是SDK提供的DEMO,修改了blconfig.h头文件FLASH image存放地址后,把测试工程Hello world的linker script的Data和Code链接到外部SDRAM里面,Heap和stack链接到On chip memory里时,bootloader可以正常工作,Hello world程序可以正常启动。但是如果把Data,Code,Heap,Stack全部链接到SDRAM里时,bootloader就不能使Hello world运行起来,这是什么原因啊?有没有人碰到过啊?谢谢!
lelee007 发表于 2011-12-3 20:05 | 显示全部楼层
stack地址要在程序里边设置咩?看下设置对了米有,是不是放到sdram后程序设置的还是在on chip mem里
 楼主| smeiyang 发表于 2011-12-3 20:18 | 显示全部楼层
stack地址要在程序里边设置咩?看下设置对了米有,是不是放到sdram后程序设置的还是在on chip mem里
lelee007 发表于 2011-12-3 20:05

你好,请问要在程序那个地方修改呐?要修改链接文件吗?
opple 发表于 2011-12-3 21:03 | 显示全部楼层
貌似没说清楚呢
opple 发表于 2011-12-3 21:03 | 显示全部楼层
不太好回答呢
lelee007 发表于 2011-12-3 21:32 | 显示全部楼层
呵呵,俺的经验,估计你鼓捣的是MB吧,俺没折腾过这个CPU,只是根据使用ARM的经验提供一个思路,因为这类CPU支持高级语言开发都会有专用的stack寄存器,需要用程序去配置,至于MB是否也是这样俺不清楚,LZ自己查下手册或相关资料先,只是俺根据你出现的问题觉得是stack没配置正确的可能性比较大

另,链接文件你不是已经改过了么?不是已经在链接文件里边把stack段改到SDRAM里边去了么?如果是俺上述说的问题,那么在初始化程序里边把stack寄存器的值改成和你链接文件里边指定的stack段的值一致应该就可以了
GoldSunMonkey 发表于 2011-12-3 22:46 | 显示全部楼层
你的代码应该是没有放在外面的SDRAM里面
 楼主| smeiyang 发表于 2011-12-4 11:11 | 显示全部楼层
不太好回答呢
opple 发表于 2011-12-3 21:03

你好,谢谢你的回复。是这样我在做lwip,用Xilinx的XC3S700AN作为嵌入式平台主芯片,选择的Xilinx的Microblaze软核,用的Xilkernel内核。考虑到以后代码比较大,要把应用程序放在外部FLASH里面,要建立一个bootloader把FLASH里面的代码拷贝到SDRAM里面运行。在配置Microblaze时分别选择了4KB的数据CACHE和4KB的指令CACHE。把应用程序的linker script的Data和Code链接到外部SDRAM里面,Heap和stack链接到On chip memory里时,bootloader可以正常工作,Hello world程序可以正常启动。但是如果把Data,Code,Heap,Stack全部链接到SDRAM里时,bootloader就不能使应用程序运行起来。
GoldSunMonkey 发表于 2011-12-4 12:12 | 显示全部楼层
把代码放在外面后,需要bootloader从SDRAM中启动
 楼主| smeiyang 发表于 2011-12-4 13:07 | 显示全部楼层
把代码放在外面后,需要bootloader从SDRAM中启动
GoldSunMonkey 发表于 2011-12-4 12:12

谢谢!感谢你的回答。
我有加一个指针跳转函数:
void (*laddr)();
laddr= (void(*)())(SDRAM_LOC);
(*laddr)();
GoldSunMonkey 发表于 2011-12-4 13:12 | 显示全部楼层
黑黑,不错~
午后苦丁茶 发表于 2011-12-31 21:28 | 显示全部楼层
纯学习贴。不错。
GoldSunMonkey 发表于 2011-12-31 23:04 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

4

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部