threadx模块在运行时分配模块数据部分

问题描述

我看到在加载threadx模块时,在运行时从字节池(在_txm_module_manager_internal_load中)分配了数据部分。

  1. 是否可以预先定义(在模块序言等中)模块数据的放置位置?

  2. 模块代码如何知道全局变量位于何处?编译器无法知道它们的地址,因为数据的位置是在运行时确定的(我想在程序集端口的某个地方,数据部分有一些相对地址,该地址随着通过全局变量访问的每个模块而改变,但是我不太熟悉如何自行组装手臂。)

解决方法

  1. 每个模块的数据位置在运行时确定。这是为了允许在不同的位置多次加载同一模块,每个实例具有单独的数据。

  2. 全局变量位于数据区域中。这些模块被编译为与位置无关的代码和与位置无关的数据。加载模块时,模块启动代码随数据的加载地址一起提供。对于每种体系结构和编译器,实现此目标的细节各不相同。

,

@Andrés的回答正确,但是我想添加一些信息。您必须使用位置无关的代码和数据构建模块(例如,如果使用ARM编译器,则为ROPI和RWPI选项)。 GCC选项如下所示(我加粗了位置独立性所需的相关编译器选项):

arm-none-eabi-gcc -c -g -mcpu=cortex-m4 **-fpie -fno-plt -mpic-data-is-text-relative -msingle-pic-base** txm_module_preamble.s

让我们知道您是否还有其他问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...