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.

[参考译文] 编译器/CC430F5135:MSP430-gcc ISR 关键属性是否冗余?

Guru**** 2502205 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/728398/compiler-cc430f5135-is-the-msp430-gcc-isr-critical-attribute-redundant

器件型号:CC430F5135

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

在 MSP430 GCC 用户指南(修订版 C)的第7.2节中、有一个"关键"属性、记录为"进入时禁用中断、退出时恢复之前的中断状态"。 当我使用此属性编译 ISR 时、它会在 ISR 的开头添加一个 PUSH R2;DINT;NOP、并在末尾添加其他指令来撤消此操作。

但是、在《MSP430x5xx 系列用户指南》(修订版 Q)的第1.3.4.1节中、它指定了在进入用户 ISR 之前、"3. SR 被压入堆栈。" 此外,"6. 除了 SCG0、SR 的所有位都被清零、从而终止任何低功耗模式。 由于 GIE 位被清零、进一步的中断被禁用。"

这使得 MSP430 GCC 中的关键属性看起来是多余的。 有人能在这里解释一下这种冗余吗? 何时应将 ISR 标记为"严重"?

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

    我不知道。  因此、我在 SDOWP 系统中提交了条目 MSPGCC-93。  欢迎您在我的签名中使用下面的 SDOWP 链接关注此条目。  这可能会导致删除关键属性、或对何时有用给出解释。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的观看、George。 使用"按 ID 搜索"字段后、我仍然无法找到 MSPGCC-93、只要我单击"只读"SDOWP 的链接即可。 您能否提供直接链接?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    新条目需要几个小时才能在系统中传播。  请稍后重试。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这个问题上是否取得了任何进展? 我在 SDOWP 中看不到任何更新。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由于 MSP430硬件处理中断接受(将 PC、SR 压入堆栈、清除 SR)和中断返回(将 PC、SR 从堆栈弹出、恢复中断状态)、因此需要执行软件指令
    当在中断矢量表中注册了 ISR 时、这些任务不是必需的。

    但是、如果需要不中断常规函  数、则可以使用 Critical 属性对其进行标记、以在进入时禁用中断并在退出时恢复之前的中断状态。

    但正确的是、在已经标记了中断属性的函数上、关键属性的使用是多余的。 GCC 至少应警告并可能禁止同时使用这些属性。