【问题标题】:using txm_module_manager_memory_load to load Module in ThreadX使用 txm_module_manager_memory_load 在 ThreadX 中加载模块
【发布时间】:2022-09-23 01:29:06
【问题描述】:

我正在尝试以不同方式加载 2 个模块:
Module_1 使用txm_module_manager_memory_load
Module_2 使用txm_module_manager_in_place_load

结果:在加载它们并启动 Module_1 之后,它会引发 UsageFault 错误(模块 2 尚未启动),两个模块共享从 txm_module_manager_initialize 创建的相同 byte_pool。
我无法捕捉到错误,因为所有 API 都返回 TX_SUCCESS

参考x-cube-azrtos-h7 TX-MPU 示例,app_threadX 会发生什么变化以正确加载 Module_1?
或者它是关于在链接文件 STM32H7xx_FLASH.ld 中指定的东西?

编辑:以下是最新的线程状态和 \"_txm_module_manager_memory_fault_info\" 值:

    标签: module threadx azure-rtos


    【解决方案1】:

    ThreadX 将从txm_module_manager_initialize 中创建的字节池中分配一些内存,并将 Module_1 从它所在的任何位置复制到该分配的内存中。我假设 txm_module_manager_memory_load 返回 TX_SUCCESS,当您启动 Module_1 时 txm_module_manager_start 也是如此。您可以单步执行调度程序,当它从 Module_1 调度一个线程时(它将调度的第一个线程是在 txm_module_manager_start 中创建的“模块启动线程”),模块执行到多远会发生使用错误?

    【讨论】:

    • 我添加了线程的最新快照,对于从内存加载的第一个模块,它已完成,对于第二个模块,它因发生错误使用错误而终止(注意:使用txm_module_manager_in_place_load 加载两个模块工作正常
    • 您最初的问题是模块 1 引发了使用错误,而您的评论说模块 2 引发了使用错误。请单步执行代码并找出故障发生的确切位置。 TXM_MODULE_MANAGER_MEMORY_FAULT_INFO 结构包含有关故障的信息。也请在这里张贴。 github.com/azure-rtos/threadx/blob/master/ports_module/…
    • 当我对两个模块使用“txm_module_manager_in_place_load”时,程序运行良好,当我对模块 1 使用“txm_module_manager_memory_load”时,出现使用错误,在帖子中,您可以找到“_txm_module_manager_memory_fault_info”的值,但继续执行,程序是据我了解,在执行第二个模块期间终止并且没有更多调试信息。注意:我正在使用 'txm_module_manager_external_memory_enable' 为队列共享一个内存区域,当我对两者都使用 in_place 加载时它可以工作
    猜你喜欢
    • 2021-07-21
    • 2022-12-21
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多