使用supervivi+DNW下载MDK环境下2440裸机程序到SDRAM中运行

硬件开发环境:友善之臂mini2440

软件开发环境:KEIL MDK(keil Uvision4)

声明:本文章原始资料来源于网络和自己的探索,若有侵权处请告知删除~~

        当然了想跑裸机程序有以下几种方式:1 将程序下到Nor Flash中  2将程序下到Nand Flash中  3将程序下到SDRAM中运行。对于第一种方式参考友善之臂提供的资料了,第二种方式参考这个链接http://blog.csdn.net/mybelief321/article/details/8957230,这种方式好处在于程序储存起来了下次Nand Flash启动就会自动执行了,但是我Nand Flash中已经烧好了内核啊等等,不想破坏它所以我更青睐第三种方式了。首先对于裸机程序使用MDK不管是代码编写还是调试都比较方便,再说了以前调过stm32的程序对这个也比较熟悉了。

       Nor Flash启动进入supervivi后有个选项d,就是通过DNW下载程序到SDRAM中运行。我现在要做的工作就是在MDK下生成bin文件,然后利用supervivi的d选项来跑裸机程序了。在这期间碰到了些问题,后来也慢慢解决了,特此分享,有错的地方还请指正。

       第一步:在MDK下创建一个工程,芯片选择S3C2440A,确定后会提示是否添加启动代码,选择确定(当然你要口味重的话可以自己写个启动代码。。)

       第二步:新建一个文件,保存,命名main.c,编写代码,并将此文件添加到工程中去(前两步基本功不多说了)。下面是一个蜂鸣器的程序代码。


      不做任何设置编译链接会出现下面错误:


报错主要是一个.sct分散链接文件的问题,我们看到友善之臂一个视频里介绍MDK编写裸机程序的时候编写了如下代码:

我只想说这个东西对我这菜鸟来说能看懂已经很不容易了,要我自个编一个实在是。。还好查阅资料后有了突破

点击进入:


linker目录下会有一个MDK自动生成的.sct文件,点击右边的Edit查看:


这是MDK自动生成的,显然与友善之臂提供的不一样。查看帮助文件我了解到这个文件是根据前面的Target目录下的一些设置而生成的。


根据友善之臂提供的.sct文件设置下地址,如下:


由于我们要使用MDK自动生成的.sct文件,而不自己编写所以要设置下:


再编译就没错了:


        那么为什么要这么设置呢:IRAM1地址范围很好理解了,就是我们片内SRAM的地址范围,至于ROM1地址范围,我们看到后面有个startup选项。帮助文档里的解释是此处就是设置startup.s文件存放的起始地址,前面写的是ROM是英文我们一般将代码下到ROM里面去,而此处是要将程序下到SDRAM中去执行,所以SDRAM充当了部分“ROM的功能”也就是存放代码,那么起始地址肯定是0x30000000了至于大小呢可以根据代码大小来设置(经验证把ROM1的Size选项设小点也是可行的)。RAM1的起始地址跟着ROM1的结束地址就行了,大小也可以根据实际情况来定。但是ROM1和RAM1总共大小不要超过64M(我的SDRAM为64M的)。设置之后可以点击Linker下右边有个Edit查看下生成的.sct文件。


       接下来就是生成.bin文件了:网上查找了下,生成bin文件要用到MDK安装目录下\ARM\BIN40\fromelf.exe。在MDK帮助里查找fromelf又经过一番研究后搜索--bin就会有其用法了如下图


在User选项下进行如下设置(注意对应你的工程名,我的工程名是beep):


        好了,大功告成了!借助supervivi和DNW我们的裸机程序应该就能突破其他方式下4K的限制了(其他方式下要写个引导程序才能突破4K)。注意了这是下载到SDRAM里运行的,所以我们复位后或是关机重启程序就丢失了,得再次下载程序才能运行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值