1 内容简介
对操作系统与非操作系统下TI芯片启动后的C语言初始环境配置流程进行整理介绍。包含:
第二章:运行支持库,介绍TI芯片运行支持库作用,非操作系统下程序起始位置,运行环境初始化流程。
第三章:SYSBIOS启动流程,介绍使用SYSBIOS实时内核时,芯片对应的启动过程。
2 运行支持库
2.1 ABI
应用程序二进制接口(ABI-Application Binary Interface)定义了一组在系统软件上编译应用程序所需要遵循的一套规则,一个通俗的理解:ABI定义了compiler该产生什么样的obj。ABI涵盖了各种细节,如:
数据类型的大小、布局和对齐;
调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数是最先push到栈上还是最后;
系统调用的编码和一个应用如何向操作系统进行系统调用;
以及在一个完整的操作系统ABI中,目标文件的二进制格式、程序库等等;
ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译(注意这里是说可以重新编译,而编译时是符合该平台ABI规约的),然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
TI平台编译环境现阶段支持COFF与EABI两类ABI标准,其中前者主要存在与老版本编译器中,而近期的新版本逐步转换为仅支持EABI标准。两者不兼容。
2.2 RTS
TI官方提供了运行时支持库RTS,用于替代旗下各系列产品上的C语言标准库功能,具体实现以下几点,本文档主要关注其中的“_c_int00”部分。
图 TI运行时支持库基本功能
在使用CCS编译代码后生成的MAP文件中我们可以看到“entry point”一栏信息,如下图:
图 map文件entry point图示
“entry point”表示整个程序的启始执行位置,位于平时理解的“main”函数之前,其负责系统在运行程序之前对整个软硬件环境的基本初始化工作。“entry point”实际是函数“_c_int00”的入口地址,函数“_c_int00”具体实现在芯片对应RST库内文件“boot.c”或“boot.asm”中,用户还可根据实际应用需求对函数“_c_int00”进行修改,重编译生成新的RST库。“entry point”一般会映射到系统复位的中断向量中。
从图3中我们可出,在非操作系统应用环境下,系统启动的软件过程就是由函数“_c_int00”为起点,完成环境初始化后,则跳转到main函数,开始执行应用程序。
图 函数“_c_int00”基本功能与操作流程
3 SYSBIOS启动流程
在SYSBIOS环境下,系统启动流程以main函数为中线,可分为main前与main后两部分。