转自:http://hi.baidu.com/deep_pro/blog/item/093678c205d728120ff47712.html(深度专业)
本来ADS1.2好好的,最近惊闻ARM把Keil给收购了(05年的事了,又惊闻Keil以前只有20来个员工),推出了RealView MDK 。
可是我买的两块开发板用户手册都是基于ADS1.2做示例的,只好抛弃ADS,第一次总是会有那么一点痛。
好久没有写有意义的东西了,今天就做个教程,演示下如何使用MDK 3.5生成一个能在mini2440上运行的
bin文件。
首先去下载MDK3.5 http://t: normal; ">
选择cpu ,s3c2440A
因为只是一个小例子,就不需要添加什么启动代码了,选择否
然后FILE->NEW,添加一个叫testled.s的文件,其中的代码后面打包附送。
然后再把这个testled.s添加到当前工程里来
接下来就是很详细的配置了,需要根据具体硬件来设置,这里是mini2440
右击 target1 -> options for Target 'target 1'
首先是target选项卡
然后是Linker选项卡
然后是debug选项卡 ,这里需要注意的是,要想正常使用模拟器调试这段代码,需要一个初始化文件,此ini文件设置.afx文件下载到目标的位置,以及调试前的寄存器、内存的初始化等操作。它是由调试函数及
调试命令组成的调试脚本文件。我在网上找了一个Ext_RAM.ini,后面附上。
最后,就是要用MDk生成bin文件,这个简单,在user选项卡里设置编译后的动作
fromelf.exe --bin -o @p.bin @p.axf
fromelf.exe不用加物理路径,因为安装程序早就把MDK的程序目录加到环境变量里了。
@p变量代表的是当前工程名testled ,这些东西需要根据实际的目录和文件名进行调整。
然后就可以F7 make,ctrl+f5调试了
make常见的错误有
No section matches selector - no section to be FIRST/LAST.
这是因为默认的sct文件里 *.o (RESET, +First)
要求以RESET段作为程序入口点,你可以修改sct文件,也可以把代码的入口段名改为RESET
如AREA RESET,CODE,.....
还有一个警告warning: L6314W: No section matches pattern *(InRoot$$Sections).
是因为没有调用__main,如果__main所做的工作,如堆栈设置,RW,ZI区的拷贝,库函数的初始化等等用户全部都已经完成,那么这个警告是可以忽略不计的,在分散加载文件中去掉InRoot$$Sections就可以去掉该警告,但是如果用户没有实现上述操作,那么调用C函数是不能保证正确运行的。这个例子是纯汇编,
不用理会它。
因为有初始化文件,调试时就是从0x30000000开始的
将生成的bin文件下载到mini2440执行(vivi选项D),一切正常,很好。
完整工程及初始化文件下载
http://download.csdn.net/source/1644273
文章评论(0条评论)
登录后参与讨论