|
本帖最后由 Pony279 于 2011-12-26 20:45 编辑
(http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5302644&bbs_id=9999)
前段时间发了个简单的教程, 这个是没什么问题的
http://armbbs.net/forum.php?mod=viewthread&tid=10423
因为我用的TQ2440开发板配有裸奔测试程序, 不移植过来用就太浪费了,
所以我就决定把程序移植到MDK上, 可是搞了好几天了, 一直不成功, 昨晚为了这个还熬到四点多...(因为打算睡觉前突然调出来了, 但是后来又发现...发现是调出来的bin文件是之前生成的, 然后不管我怎么改, 就是改不回去...555...)
先说说我整理的教程里的下载到nand的那个, 其实如果只是使用 keil 给的启动代码做简单的裸机开发的话, 就不适合把工程下载到nand里了, 因为...如果不写个把代码从NAND搬移到SDRAM的程序的话, 程序最大就只能有4K了 ( NAND没有运行程序的能力, 如果从NAND启动, 2440会把前4K的代码般到内部的存储器执行).
而TQ2440的测试程序本来就有在ADS下的从NAND启动的那部分代码 (包括搬移到SDRAM的那部分), 因为我汇编不熟, 所以才想直接把代码移植过来, 唉, 费了好大的劲, 还是没成功...
现在说明问题:
让2440从NAND启动并执行程序确实是调出来了, 可是现在的问题就是全局变量的初始值不正确, 所以程序在执行的时候很有问题,
我测试的蜂鸣器唱歌的程序, 程序里有数组SONG (没有声明const) 保存了歌曲的音调和时间的信息,
把生成的bin文件烧到NAND后用JLINK调试时发现, 从SDRAM搬完后, SONG数组的值就已经确定下来了, 而且不正确! (数字奇怪木有规律...我就不贴上来了...)
所以我比较怀疑是这从NAND搬运的这个环节出了问题, 但是这部分的代码我没动过, 之前又成功过一次, 所以具体问题出在哪里就不好说了
如果把SONG定义为const的话可以解决我移植的测试程序的部分问题, 但这个是解决问题的根本办法呀...
另外, 这个程序改成从NOR启动, 或者在SDRAM里调试, 一点问题也没有, 问题就出在NAND启动上了.
在网上也找到几个类似的问题, 但是并没有找到根本的原因:
其中一个链接: http://topic.csdn.net/u/20091210 ... 5-40b15fdcb572.html
实在没有办法了我才发帖子到论坛里求助了, 希望各位能帮下忙了!
下面是我的工程文件:
点击此处下载 ourdev_707346F3FWSI.zip(文件大小:2.64M) (原文件名:Example.zip)
说明一下:
工程里有三种配置:
一种是生成从NAND启动的bin文件
一种是用JLINK在SDRAM调试
一种是用JLINK烧写到NOR的,
源代码都是一样的, 只不过有些配置不同, 可以从这里很方便的修改:
也可以从这里修改: 右键->Manage Compunents
然后上传我主要参考的文档:
点击此处下载 ourdev_707352U743DM.pdf(文件大小:1.50M) (原文件名:RealView MDK Jlink Mini2440测试程序移植(成功).pdf)
生成下载到NAND的bin文件的话工程配置和文档里说的有些不同, 另外我的代码其实只是修改了 |Image$$ER_ROM1$$RO$$Base| 这一类名字上的问题, 还有一个8字对齐的指令
生成bin文件的那个目标的分散加载文件是自己写的, 因为前4K很重要, TMD那个MDK让用户设置连接顺序太麻烦, 我是这样设置的, 试了很多方法, 只有这样才能正常启动...(要是TQ2440的不把NAND那部分的代码单独做了nand.c的话就不用这么麻烦了...)
LR_ROM1 0x30000000 NOCOMPRESS { ; load region size_region
ER_ROM1 0x30000000 NOCOMPRESS 0x800000
{ ; load address = execution address
;启动的核心部分, 把代码从NAND搬移到SDRAM中, 再跳到SDRAM中执行
*.o (RESET, +First)
; 2440init.o(+RO, +ENTRY)
nand.o (+RO )
2440slib.o ( +RO )
}
+0 NOCOMPRESS 0x7ff000
{
main.o (+RO)
2440lib.o (+RO)
mmu.o(+RO)
.ANY (+RO)
}
RW_RAM1 0x30800000 NOCOMPRESS 0x00800000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM1 0x40000000 NOCOMPRESS UNINIT 0x00001000 {
.ANY (+ZI)
}
}
另外我在网上找到了声称是移植成功了的, 这个是原文件:
点击此处下载 ourdev_707347ICV6O7.rar(文件大小:3.93M) (原文件名:移植天嵌的测试程序倒MDK.rar)
我测试后发现掉电后程序就没了, 然后我就用我自己写的sct文件解决了这个问题, 然后继续测试又发现还是有全局变量不正确的问题(就是把程序烧到nand以后就JLINK调试, 看变量)
, 不知道我的测试有没有问题, 希望高手能帮忙看看
点击此处下载 ourdev_707348JU82NQ.zip(文件大小:3.81M) (原文件名:ADS_To_MDK.zip)
|
|