问题标签 [threadx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
threadx - 有没有办法在 azure-rtos (threadx) 的用户模式下运行线程?
我一直在玩 azure-rtos (THREADX) 并尝试为基于 cortex R5 的系统移植操作系统。查看端口文件后,似乎操作系统以主管(SVC)模式运行线程。
例如,在函数_tx_thread_stack_build
中,在为线程构建堆栈时, 的初始化值CPSR
使得模式位对应于 SVC 模式。此初始化值稍后用于在跳转到线程入口函数之前初始化 CPSR。
_tx_thread_stack_build
以下是将CPSR 的初始化值存储在线程堆栈上的函数片段。供您参考,请参阅文件tx_thread_stack_build.S。
再举一个例子,函数tx_thread_context_restore.S
从 IRQ 模式切换到 SVC 模式以保存被切换出的线程的上下文,这表明 OS 在这里假设线程正在 SVC 模式下运行。供您参考,请参阅文件tx_thread_context_restore.s
以下是正在切换的线程的函数保存上下文的片段。
这引出了一个问题,有没有办法在 USER 模式下运行线程?在操作系统中,线程通常以 USER 模式运行,而其提供的内核和服务以 SVC 模式运行,而 Azure RTOS 似乎并非如此。
global - threadx 模块在运行时分配模块数据部分
我看到加载threadx模块时,数据部分是在运行时从字节池(在_txm_module_manager_internal_load)分配的。
有没有办法提前(在模块序言等)定义模块数据的位置?
模块代码如何知道其全局变量的位置?编译器无法知道它们的地址,因为数据的位置是在运行时确定的(我想在程序集移植的某个地方,数据部分的某个相对地址会随着通过它访问全局变量的每个模块而改变,但是我对手臂组件不太熟悉,无法自己找到它)。
threadx - 使用 TX_THREAD_ENABLE_PERFORMANCE_INFO 构建 threadx 的问题
使用TX_THREAD_ENABLE_PERFORMANCE_INFO选项构建 thredx并链接到项目后,处理器挂起。没有这个选项它工作正常。此选项有哪些要求(堆栈、内存、闪存等)?
threadx - ThreadX 模块管理器内存
尝试使用 IAR 在 STM32-H7 上构建模块和 module_manager 示例,从“threadx-6.1.5_rel”中提供的示例和https://docs.microsoft.com/en-us/azure/rtos/threadx-模块/第 3 章我一直被称为“module_fault_handler()”,这似乎是因为调用 txm_module_manager_start() 后出现内存错误。
在 module_manage 初始化期间提供的示例中,我看到:
txm_module_manager_initialize((VOID *) 0x90000000, 0xE000); txm_module_manager_external_memory_enable(&my_module, (void *) 0x90000000, 128, TXM_MODULE_MANAGER_SHARED_ATTRIBUTE_WRITE);
我不清楚硬编码值来自何处和/或如何计算它们,看到文件 sample_threadx_module.icf 我无法弄清楚这一点。先感谢您
multithreading - Azure RTOS 如何用单个事件发出多个线程的信号?
我想用一个事件向多个线程发出信号,最好的方法是什么?例如:只要 1 秒过去,RTC 中断就会发生并设置其相关的事件标志,之后任何线程等待此事件,开始运行并完成其工作。
如果我这样使用它,只会通知其中一个线程。我可以为同一个 RTC 事件使用多个事件标志,但是这次 RTC 将依赖于线程,这在松散耦合方面会很糟糕。
这些方法中哪种方法最好?就更好的软件设计而言,有没有第三种方法可以解决这个问题?还是我担心太多?
请给我一些建议。
module - ThreadX 模块尺寸
假设我有一个 ThreadX 模块闪烁(或下载)有没有办法在运行时从模块管理器常驻应用程序中检索模块代码和数据大小?提前谢谢你,最好的问候
fault-tolerance - 如何确定 filex 的最佳容错内存?
在filex 示例文件中,给fx_fault_operator_enable函数 RAM 缓冲区的大小为FX_FAULT_TOLERANT_MAXIMUM_LOG_FILE_SIZE,即 3K。
我想尽可能地减少这个定义和 RAM 缓冲区。
我需要哪些参数来决定FX_FAULT_TOLERANT_MAXIMUM_LOG_FILE_SIZE所需的大小?我可以进一步减少 RAM 缓冲区吗?
我想这应该是我并行打开文件的数量以及我写给它们的数量的函数,但我不知道如何真正计算它。
编辑
在读取容错函数中,看起来缓存大小至少是文件系统中日志的大小,例如,如果FX_FAULT_TOLERANT_MAXIMUM_LOG_FILE_SIZE为 3K,那么缓存也至少为 3K。我对吗??
git - RTOS 的合适 git 管理策略是什么?
我有一个 RTOS 代码,很快我们将开始一个新的 RTOS 项目(我说“RTOS”是为了维护这个问题,但我们使用的是 ThreadX)
代码是 git 管理的,但管理得不是很好。对于初学者来说,它不会忽略构建文件,它没有.gitignore文件或 gitmodules。
我的问题是如何对 RTOS 项目进行 git 管理?gitignore 或 gitmodule 的示例会有所帮助
引起我注意的一个问题是:我应该将所有 RTOS 代码放在一个子模块中吗?为了保持它独立于主代码?
memory-management - STM32 Cortex M0 上的 ThreadX 内存分配
我正在尝试在 STM32L0 Cortex M0+ 控制器上测试 ThreadX 的示例/演示代码。特别是在 GitHub 上找到的 sample_thread.c 代码。我使用了皮质 M0 端口的示例代码并编译了代码。在这一点上,一切都很好,或者我认为,端口看起来已经正确映射到我的控制器;即内存起始地址和RAM 是正确的。
我遇到的问题是,在为线程分配空间时,我在某些动态内存分配功能期间遇到了硬故障。我发现硬故障是在函数 _tx_byte_pool_search() 中触发的,它发生在检查块指针时,在一个实例中:
执行此行时,其中一个块指针以内存区域外的无效地址结束,通常为 0xAAAAAAAA。我试图了解 ThreadX 究竟是如何构建这些内存块的,但我不应该这样做。此功能应该按预期工作,但事实并非如此。所以我在想我做错了什么,但是已经没有想法可以检查了。如果有更多经验的人可以提供一些有用的方向或想法。
我在 _tx_initialize_low_level.S 中设置了启动代码,以提供 first_unused_memory 的地址,该地址用于 tx_application_define()。我认为这个地址基本上是内存分配工作所需要的。也许我错过了一些东西。
谢谢大家的帮助。