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.

[参考译文] 编译器:虚拟函数

Guru**** 2535750 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/570640/compiler-virtual-function

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

我正在为MSP430编写简单的'C'代码。  如何创建虚拟函数? 我有一个CRC例程,它从我的程序和中断例程中的几个点被调用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么该功能需要是虚拟的? 为什么它不能只是一个简单的函数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您正在执行一个函数,并且发生了使用相同函数的中断,则中断中的第二个调用可能会损坏第一个调用所使用的变量。 我可以禁用问题中断,但这会导致另一个问题。 我无法承受禁用在进入中断时可能导致的延迟。 我试图不被强迫在中断中内联函数代码,因为我缺少闪存,不想使用额外的闪存。 即使您可以使其更好地进行优化,但在调试有时根本不值得时,对可维护性的不利影响也会出现。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要的是相对于中断重新进入的函数。 执行此操作的最佳方法是确保函数在执行函数期间不使用任何全局状态(如全局变量)。 尝试将所有输入都作为功能的参数。 如果有太多,请将它们放在结构或类中。 如果你绝对不能避免使用全球状态,你必须做一些更复杂的事情。 考虑将函数调用移出中断处理程序并将其添加到队列中,并定期检查队列。 有许多可能的解决方案,具体取决于程序的性质。