工具/软件:TI C/C++编译器
美好的一天!
为基于 Tiva 的设计开发应用程序时、我注意到有时它会成为硬故障异常、通常来自内存分配/代理例程、我看到内存块链已损坏。 从主代码和 ISR 例程发出新的/删除调用、因此我看到这个问题出现、然后在内存分配/取消分配调用期间发生中断。
这些库是否有任何输入版本? 或者、也许、我可以通过禁用例程设置时的中断并在返回时将其启用来改变(或挂钩)这些调用吗?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
美好的一天!
为基于 Tiva 的设计开发应用程序时、我注意到有时它会成为硬故障异常、通常来自内存分配/代理例程、我看到内存块链已损坏。 从主代码和 ISR 例程发出新的/删除调用、因此我看到这个问题出现、然后在内存分配/取消分配调用期间发生中断。
这些库是否有任何输入版本? 或者、也许、我可以通过禁用例程设置时的中断并在返回时将其启用来改变(或挂钩)这些调用吗?
我不能给你一个完整的答案、但我可以给你一些启示。 请在 TI ARM 编译器手册中搜索 标题为 "处理可重入性"的子章节。 并阅读 有关 可重入性的文章。 我不知道 TI 发布的任何有关如何处理从中断函数调用新函数/删除函数的示例。
谢谢、此致、
乔治
您使用的是哪个版本的 TI ARM 编译器? 请注意、这与 CCS 版本不同。
您是否使用 C++异常?
TI ARM 编译器的运行时支持(RTS)库(C 库)提供的新/删除功能只会调用 malloc/free。 malloc/free 执行确实有代码来执行一个关键段以实现可重入性、但是你需要注册一个锁定/解锁函数对、或者关键段不会受到保护。 请参阅 George 上述 TI ARM 编译器手册中有关可重入性的部分。
通常、您应该避免在 ISR 例程期间进行动态分配、以避免可重入性问题并避免在不可预测的时间进行动态分配。