This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] 基于TI-RTOS(SYS / BIOS)的应用程序的启动顺序

非TI-RTOS应用程序的标准启动


当设备复位之后,复位向量在 _c_int00()入口点初始化c运行环境,第一步是初始化系统堆栈指针,在初始引导期间以及main()之内和之后都使用相同的堆栈。 

处理完.cinit和.pinit表后,将调用main()函数,如果有要传递给main()的参数(取决于应用程序的构建选项),则使用args_main()函数来调用main(),至此,C运行时环境已完全初始化。

启动TI-RTOS应用程序

reset功能

应用程序可以在.cfg文件中添加 “user” reset功能,如下所示。

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

Startup.resetFxn = "&foo";

 

注意:应用程序必须在其代码中提供reset功能(例如“ foo”)

你可以在ROV->Startup中查看reset功能

first和last启动功能

这些并不经常使用,但是为了完整起见,下面是在.cfg中添加first和last功能的示例:

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

Startup.firstFxns.$add("&myFirst");

Startup.lastFxns.$add("&myLast");

 

你可以在ROV中看到新的first和last功能。注意:需要将鼠标悬停在这些字段上才能查看完整列表。

调试无法进入main函数

以下有几点可以帮助你调试

1.确保看门狗没有重置设备。CCS通常会禁用看门狗,因此在不使用CCS引导时,您需要确保将其禁用。

2. 禁用ccs中的 "run to main"功能,这会让你停留在_c_int00处,实现逐步调试。

3.添加reset/first/last功能函数,例如点亮Led或者是切换GPIO,引导加载程序无法跳转到正确的入口点是一个常见的问题。因此,添加reset功能可以帮助定位到这一点。

4.通过查看ROV Startup State确认是否是被某些内核某块阻止。(一般不常见)

可参考以下链接了解更多细节。

software-dl.ti.com/.../Using_xdc.runtime_Startup.html