编译器在生成可执行文件时,会在最终链接命令中包含预编译的启动文件和结束文件。启动文件用于在执行应用代码之前,设置语言和平台环境。启动文件通常用于执行以下操作:
- 按需设置任意复位矢量、中断矢量和异常矢量。
- 设置栈指针、小型数据锚点和其它寄存器。请参阅下表以获取详细信息。
- 将 BSS 存储器区域清零。
- 调用语言初始化函数,例如,C++ 语言构造函数。
- 对硬件子系统进行初始化。例如,要剖析程序,请初始化剖析定时器。
- 为 main 过程设置实参,并调用此过程。
结束文件用于包含程序结束后必须执行的代码。结束文件通常用于执行以下操作:
- 调用语言清理函数,例如,C++ 语言析构函数。
- 对硬件子系统进行反初始化。例如,要剖析程序,请清理剖析子系统。
下表列出了 C 语言运行时文件中的寄存器名称、值和描述。
寄存器 | 值 | 描述 |
---|---|---|
r1 | _stack-16 | 栈指针寄存器经初始化后,指向栈区域底部,且初始负偏移为 16 个字节。这 16 个字节可用于传入实参。 |
r2 | _SDA2_BASE | _SDA2_BASE_ 是只读小型数据锚点地址。 |
r13 | _SDA_BASE_ | _SDA_BASE is 是读写小型数据锚点地址。 |
其它寄存器 | 未定义 | 其它寄存器不含已定义的值。 |
以下小节旨在描述用于各种应用模式的初始化文件。此信息面向想要更改或者了解其应用的启动代码的高级用户。
对于 MicroBlaze,C 语言运行时初始化分为 2 个不同阶段。第一个阶段主要负责设置矢量,随后它将调用第二个阶段初始化。它还基于不同应用模式提供出口存根。