主题 : keil下的两个加载域的mmu程序 复制链接 | 浏览器收藏 | 打印
自己动手,丰衣足食
级别: 新手上路
UID: 105407
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
贡献值: 0 点
综合积分: 48 分
注册时间: 2014-06-23
最后登录: 2016-12-13
楼主  发表于: 2014-07-22 10:09

 keil下的两个加载域的mmu程序


这是第一次在这上面发帖,不知发的还不好。

我这个程序是基于MMU的例程,而这里里面的程序代码是根据,韦东山哪个本书的MMU章节更改的成的。
我们第一步步,和以前是一样的。正常的建立文件。
如图所示:
下来

以上步骤完成后:


下来我们建立三个文件,分别是head.s  init.c   led.c


程序代码如下附件(即就是我们MMU代码中的程序)


创建完成之后,将所有代码添加到我们的工程中,如图所示:





我们程序已经加载到我们的工程里面了。下来我们就是,开始配置我们的工程,我们配置他的目的就是,为了让我们的程序的加载域可以存在两个甚至多个,为神魔那?
我们在韦东山的书上看到他的链接文件如下:
  我们看到,first的运行地址和加载地址都是0x00000000head.oinit.o就在这块),但是第二个的运行地址是0xB0004000,加载地址是2048led.o就在这块)。你可能要问这里的地址为神魔是0xB00040002048,具体的请参考《嵌入式linux应用开发完全手册》的第七章,书上有详细解释。
  那么好了,我们的程序当然要达到的同样的目的,那么我们肯定得写出我们的分散加载文件,那么我们在这里建一个分散加载文件,如下:



//这个分散加载文件对应于两个加载域
LR_ROM1 0x00000000 0x00200000  {    ; load region size_region
  NANDFLASH 0x00000000 0x00200000  {  ; load address = execution address
   *.o (RESET, +First)
   .ANY (+RO)
  }
}


LR_ROM2 2048 2048 {
  SDRAM 0xb0004000 {

   led.o (*)
  }
}


上面的这个分散加载文件,我就不说了,我们利用这个的话,可以得到如下图



那么具体的你也可以参照,,韦东山的书目进行查找,书中有详细的解释。

好了,下来我吗,我们继续,配置我们的工程,我们这里,建立了这个分散加载文件,那么我们就把他加载进去吧,如图所示:


我们配置文件,还有一个地方需要配置,那就是我们要生成,.bin文件。那么我们肯定,必须得配置user选项。在配置之前,我在这里,先说几点内容,帮助大家理解一下
 1.既然我们有两个加载域,那么我们会生成两个二进制文件。之后我的下面,会给出例子,现在记住有这麽回事。
2.那么好了既然有两个二进制文件,那么我们怎么让他合在一起,在我们下载程序的时候只需要下载一个bin文件就ok了,当然你也可以,分两步下,分两步我没搞过。那么keilformelf提供了这项方式。那么我们直接利用就好了。

类似于想下面,那么我们这里还有不会的,可以查官方手册.
fromelf.exe --bin --bincombined --bincombined_padding=1,0xFF  -o test.bin test.axf

好了我们接着配置:




好了这样子就ok了,其他的配置都是默认就行,那么我们编译一下。



我们可以看到,已经生成.bin文件,我们可以在,文件目录下查看一下,是否存在。





注意刚才我们说了要是不进行合并的话,他会生成两个二进制文件。那我我们把刚才生成的二进制文件,先给删掉,不然会出错,那么我们,下载,我们就把如下配置文件改一下,就ok;





这样的话编译,完成你可以看到,你的文件夹里出现了一个叫  test.bin 的文件夹,我们点进去看到,有两个文件,如下所示


那么,这个就应了我们的说的话了。


到了这一步我们的工程算是建完了,可能其中有一些,错误,还请大神指出。



自己动手,丰衣足食
级别: 新手上路
UID: 105407
精华: 0
发帖: 24
金钱: 125 两
威望: 25 点
贡献值: 0 点
综合积分: 48 分
注册时间: 2014-06-23
最后登录: 2016-12-13
1楼  发表于: 2014-07-22 10:20
我想传个,文件就什么,格式不对,第一次在这上面发帖,真心不爽,估计是我不会,算了有人想要的话,加我qq吧!969813073