ADS启动代码详解:从startup.s看处理器初始化
需积分: 9 122 浏览量
更新于2024-09-17
收藏 220KB PDF 举报
"这篇教程详细讲解了如何学习和理解ADS启动代码,特别是针对初学者,强调了理解堆栈、地址和指针等基本概念的重要性。文章以S64处理器为例,探讨了启动代码的两个主要部分:与ARM7TDMI内核相关的初始化以及与处理器外部设备相关的初始化。启动代码的主要任务是初始化处理器模式、设置堆栈、初始化变量,并最终跳转到主程序。此外,文中还介绍了S64处理器的内存布局和异常向量配置。"
在学习启动代码时,首先需要了解处理器的启动过程。启动代码是处理器在启动时执行的第一段程序,通常用汇编语言编写,因为它涉及到处理器的低级初始化操作。在S64处理器中,启动代码有两个关键部分:
1. **与ARM7TDMI内核相关的初始化**:这部分主要包括配置处理器的各种异常向量,如复位、未定义、软件中断、预取异常、数据异常等。异常向量通常放置在内存的起始地址,以便处理器在发生异常时能够快速响应。例如,复位向量位于0地址,它会跳转到系统初始化代码(BSYSINIT)。
2. **与处理器外部设备相关的初始化**:这部分涉及特定于硬件的初始化,如看门狗定时器(WDT)、子系统时钟、可能的内存重映射(remap)等。这些初始化步骤确保了外部设备的正常工作,并且与具体的微控制器设计有关。
S64处理器的内存布局如下:
- **片上FLASH**:从0x100000开始,共有64kB,用于存储固件代码。
- **片上RAM**:从0x200000开始,共有16kB,用于运行时的数据和栈操作。
在复位后,程序会从0地址开始执行,这时FLASH被映射到这个地址。通过使用remap,可以将RAM映射到0地址,这样0地址的内容就变成了RAM的副本。这允许处理器在RAM中执行代码,从而实现更快的访问速度。
启动代码中的异常向量配置至关重要,因为它们定义了处理器如何响应各种异常情况。在S64的例子中,每个异常都有一个对应的处理程序,如UNDEFINED、SWI、PREFETCHABORT和DATAABORT。`B`指令用于跳转到相应的处理程序,其地址在编译时自动计算,确保代码位置无关性,无论指令在何处执行,都能正确跳转。
通过理解这些基本概念,初学者可以逐步深入到更复杂的启动代码分析中,包括数据和BSS段的初始化,以及如何正确地设置堆栈,以便在程序执行过程中管理函数调用和保存现场。掌握这些知识对于任何想要深入理解嵌入式系统开发的人来说都是至关重要的。
113 浏览量
476 浏览量
2021-10-05 上传
2021-10-06 上传
2012-03-07 上传
285 浏览量
2021-09-27 上传
319 浏览量
2009-01-12 上传
抚泪
- 粉丝: 0
- 资源: 1
最新资源
- web-scraping-challenge
- 物料与仓储管理
- EJEMPLO-1
- 基于Arduino的MPU6050 DMP6自稳定平台
- discordbot:个人机器人不和谐,主要吐出QI引号
- SimEvents:运筹学库:SimEvents:registered: 的附加库,为运筹学系统建模提供模块。-matlab开发
- 美国,日本和越南的数据科学状况
- 库存管理技术
- dry-web-roda:Roda集成,适用于干式网络应用
- apache_2.4.4-x64-openssl-1.0.1yu.msi.zip
- 使用 MATLAB 进行算法交易 - 2010:来自 2010 年 11 月 18 日网络研讨会的文件。-matlab开发
- ootr_tracker_emotracker:时间随机化陶笛的物品追踪器
- XX餐饮用品制造公司仓库管理制度规范
- eb4j:EPWINGEbook访问库和实用程序
- Bon.az Extension-crx插件
- 电子功用-带内熔丝的高压电容器不平衡保护防扰动跳闸方法