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”部分。

bios启动0秒什么意思_RTS


图 TI运行时支持库基本功能在使用CCS编译代码后生成的MAP文件中我们可以看到“entry point”一栏信息,如下图:

bios启动0秒什么意思_TI-SYSBIOS_02


图 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函数,开始执行应用程序。

bios启动0秒什么意思_启动流程_03


图 函数“_c_int00”基本功能与操作流程

3 SYSBIOS启动流程

在SYSBIOS环境下,系统启动流程以main函数为中线,可分为main前与main后两部分。

3.1 Main前

bios启动0秒什么意思_TI-SYSBIOS_04


bios启动0秒什么意思_启动流程_05


图 sysbios启动流程

3.2 Main后

bios启动0秒什么意思_bios启动0秒什么意思_06


图 sysbios启动流程 main函数后

3.3 应用结束后操作

有两类接口用于结束应用进程:

bios启动0秒什么意思_ABI_07


bios启动0秒什么意思_ABI_08


图 应用程序结束执行

4 参考文献

[1] 《TMS320C6000 Assembly Language Tools v 7.4 User’s Guide》
[2] 《TMS320C6000 Optimizing Compiler v 7.4 User’s Guide》
[3] 《SYS_BIOS (TI-RTOS Kernel) v6.46 User’s Guide》
[4] http://rtsc.eclipse.org/docs-tip/Using_xdc.runtime_Startup