初始化代码手册中文翻译版
由于多种原因基于 的 的大多数应用代码使用 语言编写。然而,启动顺序
要求初始化 处理器和严重依赖于寄存器结构的关键设备和内存映射处理机,和存
储器重映射操作。由于这个原因, 启动序列必须用汇编编写。
这个应用笔记描述了一个 的 代码启动序列示例。他是使用 开发
工具为 评估板写的基于 启动序列。更多的可用 启动序列示例见 库。
在上电并且复位后 启动序列激活执行。
启动次序
在设计 嵌入式应用设计中主要的考虑是规划内存图。特别是位于地址 的存
储器。复位后,处理器从地址 处的指令处开始执行,因此必须能够从此处取得可
执行代码。在嵌入式系统中,这需要初始化后在地址 处是 非挥发存储器。
最简单的规划是在存储器映射中将 定位在地址 。当它首先执行位于 地址
的第一条指令后应用程序能够指向自动的实际入口。但是这也有一个缺点, 位窄
(、 位)且比 慢,存取他需要更多的等待周期。这将减缓处理器处理通过矢
量表的异常尤其是中断。况且,如果矢量表在 中,他不能够被代码编辑。
由于 较 存取速度快且位宽,如果在 中 处存储器作为矢量表和
中断句柄更好。虽然在通常运行中 被定位在 处数必需的,如果上电后
定位在地址 ,再复位指令入口处没有一个合法的可执行指令。所以上电后
必须定位在 以保证此处有一个合法的复位矢量。从复位到正常运行的存储器图变
换通常通过执行一个 重映射)来完成。
许多基于 的嵌入式应用程序包含在 中且在复位后执行。当编写嵌入式操作
系统,或没有操作系统从复位后执行的嵌入式应用程序时有几个因素必须考虑,包括:
变换 到 ,以改善执行速度。
初始化执行环境。例如异常向量,堆栈、 引脚
初始化应用——例如,从 中到 中拷贝初始化值付值给初始化变量并且清
除其他变量为 。
连接嵌入式执行映像到存储器中放置程序和代码的指定区域。
对于没有操作系统的嵌入式应用, 中的代码必须提供一个方法以初始化他自己并
且开始执行。复位后不会自动初始化,因此应用程序入口在它调用 代码之前执行一
些初始化。
复位后定位在地址零的初始化代码,必须:
为初始化代码标记入口标记
设置异常向量。
初始化内存系统
初始化堆栈指针寄存器
初始化任何临界 器件
初始化中断系统需求的任何 变量
使能中断(如果通过初始化句柄)
如果需要的话改变处理器模式
如果需要的话改变处理器状态
环境初始化完成后,应用程序初始化继续并且将进入 代码入口。
启动文件是上电后第一个执行的文件并且从复位后执行微控制器初始化然后调用其
他应用程序的主例程。主程序将是一个死循环且不应该返回。
内核复位后从地址零处开始执行。对于嵌入式系统。这意味着系统复位后