我正在尝试在 STM32L0 Cortex M0+ 控制器上测试 ThreadX 的示例/演示代码。特别是在 GitHub 上找到的 sample_thread.c 代码。我使用了皮质 M0 端口的示例代码并编译了代码。在这一点上,一切都很好,或者我认为,端口看起来已经正确映射到我的控制器;即内存起始地址和RAM 是正确的。
我遇到的问题是,在为线程分配空间时,我在某些动态内存分配功能期间遇到了硬故障。我发现硬故障是在函数 _tx_byte_pool_search() 中触发的,它发生在检查块指针时,在一个实例中:
*next_block_link_ptr = *this_block_link_ptr;
执行此行时,其中一个块指针以内存区域外的无效地址结束,通常为 0xAAAAAAAA。我试图了解 ThreadX 究竟是如何构建这些内存块的,但我不应该这样做。此功能应该按预期工作,但事实并非如此。所以我在想我做错了什么,但是已经没有想法可以检查了。如果有更多经验的人可以提供一些有用的方向或想法。
我在 _tx_initialize_low_level.S 中设置了启动代码,以提供 first_unused_memory 的地址,该地址用于 tx_application_define()。我认为这个地址基本上是内存分配工作所需要的。也许我错过了一些东西。
谢谢大家的帮助。