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.

[参考译文] MSP430FR2433:有关 SLAU132X 的"&quot"部分中的"&quot";使用 C/C++中断例程&quot"的阐述

Guru**** 2550550 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1006739/msp430fr2433-clarification-about-the-using-c-c-interrupt-routines-section-of-slau132x

器件型号:MSP430FR2433

在"MSP430优化 C/C++编译器用户指南"(SLAU132X)的第134页上、有一段内容。

如果 C/C++中断例程不调用任何其他函数、则只保存和恢复中断处理程序使用的寄存器。 但是、如果 C/C++中断例程调用了其他函数、这些函数可以修改中断处理程序不使用的未知寄存器。 因此、如果调用了任何其他函数、例程会保存所有调用保存寄存器。 (这不包括分组寄存器。) 不要 直接调用中断处理函数。

在我看来、这一段所讨论的是调用函数或不调用函数的 ISR、以及对这些情形需要注意的事项。 我对这方面的了解有点少、所以对我来说很模糊。 我对该段有这些问题。 有人能给我讲些什么吗?

  1. 在第一句中、
    1. 它是指所有寄存器、包括 CPU 寄存器、
    2. "保存这些寄存器"是否意味着它们的数据被保存到程序执行堆栈、和
    3. "恢复这些寄存器"是否意味着它们的数据从程序执行堆栈中恢复?
  2. 在第三句中、
    1. 什么是调用保存寄存器、和
    2. "如果调用了任何其他函数、例程会保存所有调用保存寄存器、这意味着什么?"
  3. 在第四句中、什么是分组寄存器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    C 编译器将寄存器分为两组:被调用方保存的组和调用方保存的组。 调用函数不会保存第一个组、并且被调用函数在返回前不得更改它们。 如果它确实使用它们、则必须先保存并恢复它们、然后再返回。

    调用函数保存调用方保存的寄存器、可在被调用函数内使用、无需恢复它们。

    在调用另一个函数之前、ISR 只需要保存/恢复调用方保存的寄存器(及其使用的任何其他寄存器)。GCC 中有一个错误、在这段时间内、调用另一个函数会导致在 ISR 中生成代码以保存每个寄存器。 甚至被调用函数负责的那些函数也是如此。 不完全符合 ABI。 (slaa664)

    保存/恢复寄存器的常用位置是堆栈。 在 SRAM 较小的系统上、这可能是一个关键资源。

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

    有什么想法、什么是分组寄存器?

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

    我唯一不适用的想法是 MSP430没有多组寄存器。

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

    感谢您回答我的问题。 我现在理解该段试图说什么。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="51142" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1006739/msp430fr2433-clarification-about-the-using-c-c-interrupt-routines-section-of-slau132x/3719669 #3719669"]任何关于分组寄存器的想法?[/quot]

    分组寄存器适用于 ARM 器件。 猜测注释"(这不包括分组寄存器。)" 不应出现 在《MSP430优化 C/C++编译器 v20.12.0.STS 用户指南》中。

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

    切斯特:

    David 早些时候的回答有点暗示它是 ARM。 感谢您的确认。