1

ThreadX 内核进入函数有什么作用?

这个函数不返回是什么意思?

函数中创建的线程是如何tx_application_define调度和执行的?

4

1 回答 1

3

ThreadX kernel-enter 例程执行以下操作

  1. 如果需要进行 ThreadX 初始化:

    • 调用任何端口特定的预处理。

    • 调用低级初始化来处理所有特定于处理器的初始化问题。

    • 调用高级初始化以执行所有 ThreadX 组件。

    • 调用任何端口特定的后处理。

  2. 调用用户提供的初始化函数tx_application_define

  3. 调用任何端口特定的预调度程序处理。

  4. 进入调度循环开始执行线程。


要回答您的问题

  • 在步骤 #2 中,ThreadX kernel-enter 例程调用 function tx_application_define,这取决于您来实现。它在本质上与用户回调例程非常相似,除了它不是作为函数指针提供的事实(即,tx_application_define符号在链接时而不是运行时被解析)。这个函数是你通常应该创建所有线程的地方。

  • 在第 4 步中,ThreadX 内核输入例程启动了一个无限循环,这实质上是调度程序本身。这是管理所有上下文切换以及线程进出执行的地方。在每次硬件中断时,PC(程序计数器)从当前执行的线程跳转到 IV(中断向量),然后从那里跳转到连接的 ISR(中断服务例程)。之后,它跳回调度程序(即进入无限循环),由调度程序确定是否需要上下文切换。执行最终会返回到最后一个执行线程或某个其他线程,具体取决于调度程序的决定。

  • 正如您所理解的,每个上下文切换都是硬件中断的结果,但并非每个硬件中断都会导致上下文切换。您通常应该避免启用中断(通过__enable_interrupt从函数内部调用函数tx_application_define),因为 ThreadX 内核输入例程会在它进入调度循环之前确保这一点。

于 2014-06-04T18:33:17.267 回答