84811.com

赛马会开奖现场ARM11 S3C6410系列教程之三:内存使

更新时间:2019-11-08

  的大小,我们就不能得到正确的结果,究其原因,我们先看一下S3C6410的启动过程。

  S3C6410如果选用NANDflash启动,在我们烧写裸板程序是,先将程序烧写至NANDflash中,S3C6410通过硬件将NANDflash中前8K的程序完整复制到S3C6410片内内存中。若裸板程序较小,程序可以正常运行,若果程序超过了8K,那么裸板测试程序不能完整的复制到片内内存,使得程序出现未知的结果。这时,我们需要关注S3C6410的各种内存的使用情况了。

  我们知道,在一个程序文件中,拥有代码段、数据段和bss段,而一个程序的bin文件中是没有bss段,因此,在程序的bin文件中主要完成:

  S3C6410为NANDflash启动,同时S3C6410外挂DDR,这样,就能解决程序超过8K之后的正常运行。三者之间的连接示意图如下图所示:

  我们知道,S3C6410启动的时候,将NANDflash中前8K的程序完整拷贝至S3C6410片内内存中,在这8K程序中,必须完成硬件初始化、DDR初始化和程序从NANDflash中拷贝到DDR中,这样才能保证S3C6410cpu程序可以跳转到DDR,保证程序的顺利进行。赛马会开奖现场!在这过程中会涉及到程序的链接地址和程序的重定位方面的知识,如果你对这方面知识不熟悉,请查阅该方面的知识。

  2、系统从S3C6410片内内存0地址开始执行,此时程序需要完成DDR初始化、将bin程序从S3C6410片内内存或者NANDflash拷贝到DDR链接地址起始位置;

  3、将NANDflash程序拷贝到DDR中,通过程序重定位和链接到DDR链接地址开始位置(此时注意,在程序的编写中需要用位置无关跳转指令进行编写,否则程序会因为跳转后找不到链接起始地址和变量而出现错误)

  4、当系统完成以上操作后,通过位置相关指令将PC值链接到DDR重定位位置,完成程序的运行(注意此时应使用位置相关指令完成PC值的跳转,若使用位置无关指令,则程序一直循环在S3C6410片内内存中)。


友情链接:
Copyright 2018-2021 主页 版权所有,未经授权,禁止转载。