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:再次被外部占用?

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/962816/msp430fr2355-foiled-by-extern-yet-again

器件型号:MSP430FR2355

就在我以为我理解外部的时候… 认为这是有效的:

int main (void)
{

易失性 uint 翻转= 0;
#pragma vector = TIMER2_B0_vector
__interrupt void TakeAD_Sample ()
{
extern volatile uint overroll;
翻转++;
}

这两个文件都在同一个文件中.... CCS 告诉我,翻转是一个未解析的符号....当然,如果我将它放在主函数之外,但我试图避免使用全局变量,因为我听说它们应该很少使用。  有人能告诉我如何解决这个问题吗?

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

    名称翻转是 main()的局部(范围),因此不能在其外部引用。 当封闭函数未执行时(在调用栈中处于活动状态)、此特定变量甚至不存在。 但是、即使它是静态的、名称也会具有函数作用域。

    在其他情况下(静态?)、不使用全局变量通常是一个好主意 可以了。 但是、如果您需要一个、请使用一个。  

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

    因此、文件顶部的"static"将使变量仅可用于该文件中的函数、对吧?  当我在 main 和 ISR 之间移动时、变量也不会被销毁、对吧?

    最后、另一个文件中的任何函数都无法看到静态的、对吧?

    可以

    外部静态?

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

    是的,"静态"无论在哪里都有"静态寿命",但其范围取决于其定义的位置----函数内的函数范围和外部的文件范围。 还有块作用域、例如"if (b){static int x;++x;}"。 我不在那里、但我猜是"静态"关键字是为了描述静态寿命(与"自动"相反)而发明的、并且限制范围的范围逐渐用完。

    "外部静态"并不是很矛盾、但它混合了两个概念。 "extern "不会使某些内容在外部可见;也许奇怪的是、没有"外部可见"的关键字、而是由缺少关键字表示(在我们使用"条目"的古代)。  

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

    谢谢...我想我已经明白了

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

    当我阅读 K&R 时、我了解了所有这些内容

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

    我有多本 C 语言书籍、包括两本 K&R、但我发现您直到您才真正理解 实际上必须解决和实施...书籍提供了良好的基础、但许多问题超出了范围 books....it's 中的简单示例、所有这些都不是试用和错误、有时会询问您之前走过这条路的人

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

    我对那些特别难以"静止"的人表示同情。 我认为 C 的大部分内容都可以在一句话中解释为执行级别。 "静态"需要一个段落、如果没有"例外"一词、则无法完成。  

    K&R 的风格有点微风习习,让他们可以解释为"这是一种,你会明白这一点"。 一旦您意识到外部可见项目具有(必须具有)静态寿命、但您不能将其称为"静态"、心理模型就会开始变得像雨后春笋般变化。