当在S3C6410跑操作体系的时分,咱们不太会留意S3C6410的内存运用情况,可是,当咱们做裸板测验时,该处理器的8K的片内内存的运用就不得不留意,一旦编写的程序巨细超越了片内内存的巨细,咱们就不能得到正确的成果,究其原因,咱们先看一下S3C6410的发动进程。
S3C6410假如选用NANDflash发动,在咱们烧写裸板程序是,先将程序烧写至NANDflash中,S3C6410经过硬件将NANDflash中前8K的程序完好复制到S3C6410片内内存中。若裸板程序较小,程序能够正常运转,若果程序超越了8K,那么裸板测验程序不能完好的复制到片内内存,使得程序呈现不知道的成果。这时,咱们需求重视S3C6410的各种内存的运用情况了。
咱们知道,在一个程序文件中,具有代码段、数据段和bss段,而一个程序的bin文件中是没有bss段,因而,在程序的bin文件中首要完结:
①硬件的初始化
②DDR的初始化
③S3C6410程序的重定位
④复制程序至DDR中
⑤铲除DDR中bss段
⑥程序链接至DDR中
为进一步阐明发动进程,现在进行具体的阐明:
S3C6410为NANDflash发动,一起S3C6410外挂DDR,这样,就能处理程序超越8K之后的正常运转。三者之间的衔接示意图如下图所示:
咱们知道,S3C6410发动的时分,将NANDflash中前8K的程序完好复制至S3C6410片内内存中,在这8K程序中,有必要完结硬件初始化、DDR初始化和程序从NANDflash中复制到DDR中,这样才干确保S3C6410cpu程序能够跳转到DDR,确保程序的顺利进行。在这进程中会涉及到程序的链接地址和程序的重定位方面的常识,假如你对这方面常识不熟悉,请查阅该方面的常识。
三者之间的操作过程如下:
1、体系上电,S3C6410为NANDflash发动,硬件主动将NANDflash中前8k的程序复制到S3C6410片内内存中;
2、体系从S3C6410片内内存0地址开端履行,此刻程序需求完结DDR初始化、将bin程序从S3C6410片内内存或许NANDflash复制到DDR链接地址开端方位;
3、将NANDflash程序复制到DDR中,通进程序重定位和链接到DDR链接地址开端方位(此刻留意,在程序的编写中需求用方位无关跳转指令进行编写,不然程序会由于跳转后找不到链接开端地址和变量而呈现过错)
4、当体系完结以上操作后,经过方位相关指令将PC值链接到DDR重定位方位,完结程序的运转(留意此刻应运用方位相关指令完结PC值的跳转,若运用方位无关指令,则程序一向循环在S3C6410片内内存中)。