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.

[参考译文] MSP430FR2355:存储说明符 static 和 extern --如何?

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/904669/msp430fr2355-storage-specifiers-static-and-extern----how-to

器件型号:MSP430FR2355

我在 a.c (main)中定义了一个用于 ISR 的变量。  我在 b.c 中还有一个函数、在 a.c 中从 main 调用一次 。该函数使用该变量、因此在文件 b.c 中、我为其提供了 extern 的存储说明符。  现在、我遇到的问题是 b.c 修改该变量、但当 b.c 中的函数超出范围时、我会丢失该变量、因此我想将其定义为 b.c 中的"静态 extern "、但 Code Composer 不允许这样做。 是否有人遇到过这种情况、如果是、如何解决?  似乎这可能是一个常见的问题

谢谢

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

    它是全局变量吗?

    如果在 ISR 中使用、它也应该是易失性的。

    您应该能够在头文件中将其定义为 extern、并在两个文件中包含头。

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

    我会尝试一下…

    ISR 不是仅使用它来更改变量、因此我认为不需要易失性??  这个总是让我感到困惑...例如,如果我在 ISR 中分配了一个变量 A 寄存器,我认为 volatile 是绝对必要的,但是如果由于 ISR 中的软件(即 i++)而发生了变量更改,它应该是 volatile?  我猜是的、bcz ISR 是随机事件(即硬件)、但它实际上是软件更改而不是硬件???

    您的想法

    Steve

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

    如果变量可能在本地上下文之外更改、则必须使用 volatile。 因此、听起来您不需要易失性。

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

    那么、这是否意味着如果我在文件 b.c 中有一个用于定义外部变量并更改该变量的函数(软件中没有 ISR)、但随后在 main (a.c)中使用该变量、我必须使用"volatile"?  我认为这是什么"静态"?

    当我用 extern 在.h 文件中声明变量、然后在 main (a.c)中使用该变量时、编译器不喜欢、但它会在 B.C.中存在的函数中定义  所说的函数是从 main 调用的....