【发布时间】:2014-06-26 20:58:17
【问题描述】:
ThreadX内核进入函数有什么作用?
这个函数不返回是什么意思?
tx_application_define函数中创建的线程是如何调度和执行的?
【问题讨论】:
标签: threadx
ThreadX内核进入函数有什么作用?
这个函数不返回是什么意思?
tx_application_define函数中创建的线程是如何调度和执行的?
【问题讨论】:
标签: threadx
ThreadX 内核输入例程执行以下操作:
如果需要进行 ThreadX 初始化:
调用任何端口特定的预处理。
调用低级初始化来处理所有特定于处理器的初始化问题。
调用高级初始化以执行所有 ThreadX 组件。
调用任何端口特定的后处理。
调用用户提供的初始化函数tx_application_define。
调用任何端口特定的预调度程序处理。
进入调度循环开始执行线程。
回答您的问题:
在第 2 步中,ThreadX 内核输入例程调用函数tx_application_define,由您来实现。它本质上与用户回调例程非常相似,除了它没有作为函数指针提供(即tx_application_define 符号在链接时而不是运行时解析)。这个函数是你通常应该创建所有线程的地方。
在第 4 步中,ThreadX kernel-enter 例程启动了一个无限循环,这实质上是调度程序本身。这是管理所有上下文切换以及线程进出执行的地方。在每次硬件中断时,PC(程序计数器)从当前执行的线程跳转到 IV(中断向量),并从那里跳转到连接的 ISR(中断服务例程)。之后,它跳回调度程序(即进入无限循环),由调度程序确定是否需要上下文切换。执行最终会返回到最后一个执行线程或某个其他线程,具体取决于调度程序的决定。
您可以理解,每个上下文切换都是硬件中断的结果,但并非每个硬件中断都会导致上下文切换。您通常应该避免启用中断(通过在函数 tx_application_define 中调用函数 __enable_interrupt),因为 ThreadX 内核输入例程会在它进入调度循环之前确保这一点。
【讨论】: