TI 操作系统之 启动时序

本文详细解析了SYS/BIOS的启动时序,包括main()函数调用前后的具体步骤,以及XDCtools运行时启动时序。介绍了从CPU初始化到硬件中断使能的全过程,并解释了如何通过配置文件控制启动时序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文由博主译自《SYS/BIOS(TI-RTOS Kernel) v6.46 User's Guide》,

TEXAS INSTRUMENTS,文献编号:SPRUEX3Q,2016年6月,P47-48。

内容以原文为准,转载或拷贝需标明本网址的链接。

3.1     SYS/BIOS启动时序

SYS/BIOS启动时序在逻辑上分为2个阶段:发生在应用(程序)的 main( ) 函数调用之前的操作;发生在应用(程序)的 main( ) 函数调用后的操作。

main()之前的启动时序完全由XDCtools runtime包管理。有关主程序之前的引导时序详见 "XDCtools Boot Sequence andControl Points" wiki 页面。XDCtools运行时启动时序入下:

        1  CPU复位后立即完成对设备使用的CPU初始化。(从c_int00开始),这一步和 cinit( ) 一步的详细情况见 与你的器件相符的汇编语言工具用户指南 中的“程序加载与运行”一章。

        2  在 cinit( ) 之前,运行复位功能表(xdc.runtime.Reset 模块提供了这个钩子)。调用在 Reset.fxns[ ] 数组中指定的函数。这些复位功能仅在复位以后且运行程序之前被调用。

        3  运行 cinit( ),初始化 C 的运行时环境。

        4  运行用户的第一个函数(xdc.runtime.Startup 模块提供了这个钩子)。

        5  运行全部的模块初始化函数。

        6  运行用户的最后一个函数(xdc.runtime.Startup 模块提供了这个钩子)。

        7  运行pinit( )。

        8  运行main( )。

main( ) 之后的启动时序由 SYS/BIOS 管理,为了完成初始化过程,需要在应用程序的main( ) 函数的结尾明确调用 BIOS_start()。当调用了BIOS_start(),SYS/BIOS 的启动时序如下:

        1  启动函数。运行用户提供的启动函数(见BIOS.startupFxns)。如果系统支持定时器,全部静态创建的定时器都要按照它们的静态配置进行初始化。如果定时器配置成“自动”启动,定时器就从现在开始运行。

        2  使能硬件中断

        3  使能软件中断。如果系统支持软件中断(Swis)则使能软件中断(见BIOS.swiEnabled)。

        4  任务启动。如果系统支持任务,则开始任务调度(见BIOS.taskEnabled).如果系统里没有静态或动态地创建任务,则直接执行空闲的循环过程。

下面举例说明配置模块和目标的 .cfg 文件中关于启动时序的可能控制点:

————————————————————————————————————​

Reset = xdc.useModule('xdc.runtime.Reset');

var Startup = xdc.useModule('xdc.runtime.Startup');

Startup.firstFxns[Startup.firstFxns.length++] = '&myFirst';

Startup.lastFxns[Startup.lastFxns.length++] = '&myLast';

var BIOS = xdc.useModule('ti.sysbios.BIOS');

BIOS.addUserStartupFunction('&myBiosStartup');

————————————————————————————————————​


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值