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:当调试器停止时、静态变量 CAN#39;t 请参阅 main 中的内容?

Guru**** 2543680 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/909605/msp430fr2355-static-variable-can-t-see-in-main-when-debugger-stopped

器件型号:MSP430FR2355

我在 func.c....中定义了一个函数 此函数定义了一个'static unsigned int'。  我这样做是希望当我跳回 main (位于 main.c 中)时、我可以访问该变量、并且它将在下次调用函数时保留它的最后一个值。   

1. 我是否正确使用了静态变量、我对变量的期望是否正确?

2. 当我在 main 的 LPM3中停止调试器时....调试器显示变量"identifier not found"的值..... 我应该不能在 main 中看到这个吗?

谢谢

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

    否、该变量对于 main.c 是不可见的 实际上、main.c 可以具有其自身的同名变量。

    "静态"变量具有(1)个文件范围和(2)个静态寿命。 相比之下、全局变量具有(1)全局范围和(2)静态寿命。 (没有,没有人问我对这一术语的看法。)

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

    我不明白… 如果变量是在 main.c 文件中定义的,但在 main 函数之前(例如在的顶部。 C file)它们是否仅具有文件范围?  在我看来、如果我希望另一个.c 文件看到它们、我必须在 h 文件中的某个位置使用 extern、以便它们可以成为全局变量?  我在这里错过了什么

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

    静态可能意味着几个因素、具体取决于其使用位置。

    将其用于函数定义之外的全局可见内容、并且仅在该特定文件中的该点之后可见。 它对 gdb 也是不可见的。 至少按名称。 您可以使用 extern 在不分配空间的情况下告诉编译器变量是什么。 您可以在声明它的文件之外的文件中使用它。 它无法覆盖静态、因为目标文件没有全局可见符号。

    在函数中使用静态变量、您不会更改变量范围、而只是更改其寿命。 函数中的静态变量在函数调用之间保持不变。

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

    静态*不*表示全局。

    静态与自动相反(几乎没有显式使用。)

    再说一次、这些是标准 C 问题。 您还读过 K&R 吗?

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

    我在 K&R 中看过了这些信息...我发现这些信息没有通过阅读来明确显示 他们一定要有经验...当我编写代码时(我不熟悉这个,在硬件方面工作多年) 当你真正理解某个话题的时候,你就会有一个需要来。。。在这种情况下,你会多次认为你理解了一些东西,然后你意识到你必须重塑你的观点,因为你从不真正理解它的第一个地方。。。 学习是一个发展过程

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

    [引用 user="Steve Wenner">此函数定义了一个'static unsigned int'。  我最近尚未测试过它、但过去可以在 CCS 调试器中添加限定表达式以显示具有文件或函数作用域的静态变量-请参阅 https://e2e.ti.com/support/tools/ccs/f/81/p/634560/2350010#2350010