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.

[参考译文] 编译器/TM4C123FH6PM:是否有新的/删除?

Guru**** 2513185 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/850715/compiler-tm4c123fh6pm-new-delete-is-not-reenterant

器件型号:TM4C123FH6PM

工具/软件:TI C/C++编译器

美好的一天!

为基于 Tiva 的设计开发应用程序时、我注意到有时它会成为硬故障异常、通常来自内存分配/代理例程、我看到内存块链已损坏。 从主代码和 ISR 例程发出新的/删除调用、因此我看到这个问题出现、然后在内存分配/取消分配调用期间发生中断。

这些库是否有任何输入版本? 或者、也许、我可以通过禁用例程设置时的中断并在返回时将其启用来改变(或挂钩)这些调用吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不能给你一个完整的答案、但我可以给你一些启示。  请在 TI ARM 编译器手册中搜索 标题为 "处理可重入性"的子章节。  并阅读 有关 可重入性的文章。   我不知道 TI 发布的任何有关如何处理从中断函数调用新函数/删除函数的示例。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您使用的是哪个版本的 TI ARM 编译器?  请注意、这与 CCS 版本不同。

    您是否使用 C++异常?

    TI ARM 编译器的运行时支持(RTS)库(C 库)提供的新/删除功能只会调用 malloc/free。  malloc/free 执行确实有代码来执行一个关键段以实现可重入性、但是你需要注册一个锁定/解锁函数对、或者关键段不会受到保护。  请参阅 George 上述 TI ARM 编译器手册中有关可重入性的部分。

    通常、您应该避免在 ISR 例程期间进行动态分配、以避免可重入性问题并避免在不可预测的时间进行动态分配。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我看来、我只需要在任何 malloc/free 调用之前插入全局中断禁用、并在这些调用退出时恢复全局中断。 但是、这种方法需要安装自己的 malloc/free 函数、这是可行的吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    深入研究 RTS 代码我刚刚意识到锁定/解锁 mechnism 已经嵌入到 malloc/free 代码中、因此我可以在那里寄存中断禁用/启用。 谢谢你。