首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ModuleManager专用设备中绘制模块与ThreadX之间的界限

在ModuleManager专用设备中绘制模块与ThreadX之间的界限
EN

Stack Overflow用户
提问于 2022-08-11 13:50:09
回答 1查看 64关注 0票数 0

在支持MPU的平台上使用模块和ModuleManager与ThreadX一起使用"default_module_start“被认为是ModuleManager的一部分,即使在app_module.c中也可以调用Tx?例如,tx_thread_create在default_module_start中工作,但在模块、线程和通过异常时不工作;

另一个问题是为什么ModuleManager不只是使用Tx来处理威胁,而是使用完全不调用Tx的自定义函数

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)的优先级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73321859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档