周立功NXP LPC21xx22xx ARM芯片启动程序解析与分散加载

需积分: 14 13 下载量 67 浏览量 更新于2024-12-11 收藏 391KB PDF 举报
"周立功NXP LPC21xx22xx 系列ARM 芯片的启动程序分解-钟常慰" 本文主要探讨的是基于NXP LPC22xx系列ARM微处理器的启动代码分析,由钟常慰撰写。这个系列的启动程序涉及到了ARM芯片在上电或复位后的初始化过程,以及分散加载(Scatter Loading)技术的应用,这对于理解微控制器的工作原理和优化系统性能至关重要。 首先,LPC22xx系列的启动过程中,启动代码包含了对内存的初始化和代码段、数据段的定位。分散加载文件如mem_a.scf、mem_b.scf、mem_c.scf是ADS(ARM Development Studio)编译器中的关键组件,它们定义了程序各部分在存储器中的布局。这些文件指示链接器(ArmLinker)如何将代码和数据分配到不同的内存区域,确保程序在执行时能够正确运行。 分散装载技术是一种高级的链接器功能,它允许程序的不同部分被加载到内存的不同位置。在嵌入式系统中,这种技术特别有用,因为它可以根据各种内存类型(如Flash、16位RAM、32位RAM)的特性来优化代码的布局。例如,中断服务程序通常会被放置在速度最快的32位RAM中以提高响应速度,而启动代码(Bootloader)之外的其他代码可能会被复制到RAM中以提高执行效率。 在分散装载过程中,有两个核心概念:装载域和运行域。装载域定义了程序在加载到存储器时的布局,而运行域则描述了程序运行时的内存分布。在某些情况下,如RW(可读写)类型的段,加载时和运行时可能位于不同的地址,因为它们需要在运行时被复制到RAM以供使用。 Scatterfile是分散加载的配置文件,它可以为每个代码段或数据段指定装载地址和执行地址。Scatterfile的语法允许定义多个装载区和执行区,这些区可以对应不同的存储器类型,如ROM和RAM。通过这种方式,开发者可以精确控制程序在不同存储器中的分布,从而实现更高效、更灵活的系统设计。 深入理解LPC22xx系列ARM芯片的启动程序分解和分散加载技术对于嵌入式系统开发者来说至关重要,它可以帮助优化代码执行效率,合理利用各种内存资源,并确保系统在复杂环境下的稳定运行。这份资料的全面分析对于学习和掌握这一领域提供了宝贵的参考。