ADS下S3C2410启动代码与ROM镜像生成解析

需积分: 10 4 下载量 126 浏览量 更新于2024-11-03 收藏 43KB DOC 举报
"这篇文档主要分析了S3C2410处理器的启动代码,特别是涉及到ARM架构下ADS集成开发环境生成ROM镜像文件的方法,以及C语言的入口方式。内容涵盖RO、RW、ZI数据区在编译和运行时的不同状态,以及如何通过特定的启动代码和scatter文件来实现数据的搬运和系统的初始化。" 在ARM体系结构中,S3C2410是一款常用的微处理器,常用于嵌入式系统设计。在系统启动时,启动代码(通常称为Bootloader)是首先被执行的部分,它负责进行硬件初始化、设置内存映射、以及处理数据区的搬运工作。在ADS环境下,我们可以生成可以直接运行于Flash中的ROM镜像文件。 ROM镜像文件包含了程序的RO(Read-Only)、RW(Read-Write)和ZI(Zero-Initialized)三个部分。在编译阶段,它们按照RO、RW、ZI的顺序排列在连续的地址空间内。在运行时,为了支持读写操作,RW数据需要被复制到SRAM(如SDRAM)中。启动代码中包含了一段用于搬运RW和ZI数据的代码,确保程序在正确的位置运行。 然而,如果需要将RO数据也加载到SDRAM中,例如在使用Norflash的Bootloader烧写程序时,直接设置RO数据在SDRAM的地址会导致启动代码无法正常运行。这时,就需要利用ADS的入口机制和scatter文件(.scf)来定制更复杂的运行环境。 ADS提供了两种C语言的入口点:`main`和`__main`。`__main`入口模式下,编译器会在调用`main`函数前执行一系列初始化工作,包括RO和RW执行区域的复制以及ZI区域的清零。通过scatter文件,我们可以精确控制程序各个部分的加载位置。例如,scatter文件可以定义如下: ``` FLASH0x00x200000 { EXEC10x00 { ... } RW0x30800000 { ... } } ``` 这样的配置表明,除了启动代码外的所有代码都会被加载到Flash的0x00地址,然后在运行时被复制到SDRAM的0x30800000地址。scatter文件允许开发者灵活地定义不同分区的加载地址和执行地址,以满足不同应用场景的需求。 这篇文档深入解析了S3C2410启动代码的运作原理,强调了在ADS环境下生成ROM镜像文件和使用scatter文件的重要性,这对于理解ARM处理器的启动流程和嵌入式系统的初始化具有很高的参考价值。