在支持MPU的平台上使用模块和ModuleManager与ThreadX一起使用"default_module_start“被认为是ModuleManager的一部分,即使在app_module.c中也可以调用Tx?例如,tx_thread_create在default_module_start中工作,但在模块、线程和通过异常时不工作;
另一个问题是为什么ModuleManager不只是使用Tx来处理威胁,而是使用完全不调用Tx的自定义函数
发布于 2022-08-11 17:07:51
函数demo_module_start是模块的一部分(此函数在sample_threadx_module.c中)。它在模块上下文中运行。该函数在启动模块时由txm_module_thread_shell_entry.c调用。
模块在非特权模式下运行,但它们调用ThreadX API (a.k.a )。核函数)。为了执行ThreadX API,该模块使用SVC指令(用于ARM处理器)进入监控程序(特权)模式。因此,在模块库中,所有内核调用都只是将函数参数传递给内核的简单调用,而实际的ThreadX函数是以内核(特权)模式执行的。
如果这回答了你的问题,或者你还有更多的问题,请告诉我。
编辑:
您可以从模块线程调用TX。默认情况下,它们通过SVC指令诱捕内核。如果要从模块直接调用TX (即不设陷阱),则模块需要处于特权模式执行中,您可以通过修改模块前导中的模块属性来配置该模式(例如,请参阅https://github.com/azure-rtos/threadx/blob/master/ports_module/cortex_m7/gnu/example_build/txm_module_preamble.S -将属性从0x00000007更改为0x00000000)。
创建模块线程与创建普通线程略有不同。管理器将TXM_MODULE_THREAD_ENTRY_INFO放入模块线程堆栈,为线程分配内核堆栈,构建模块线程堆栈(与普通线程有不同的返回模式)。
经理可以有你想要的任何优先权。大多数(如果不是全部的话)我们的模块管理器示例都指定了1 (https://github.com/azure-rtos/threadx/blob/master/ports_module/cortex_m7/gnu/example_build/sample_threadx_module_manager.c)的优先级。
https://stackoverflow.com/questions/73321859
复制相似问题