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