【发布时间】:2018-02-04 13:44:00
【问题描述】:
多年前我了解到,在应用程序世界中,全局变量是“不好的”或“不受欢迎的”,因此尝试避免使用它们并很少使用它们已成为一种习惯。
似乎在嵌入式世界中,当涉及到硬件中断时,它们几乎是不可避免的。还必须将它们设置为易失性,以便编译器在看到它们从未在运行的程序中被触及时不会优化它们。
这两种说法都是真的吗?在我描述的情况下,有没有办法避免这些变量而不会向后弯曲太远?
【问题讨论】:
-
Globals 不好是无稽之谈。只需要知道您在做什么并了解 .data 消耗(固定)和堆栈(动态)之间的权衡。特别是在资源有限的嵌入式环境中,并且在堆栈消耗方面存在问题,这很难确定全局变量在哪里容易。它们是在同一二进制文件中的函数/对象之间进行通信的一种但不是唯一的方式。语言的一部分,以及在函数/对象之间进行通信的最简单/最便宜(资源)的方式。
-
你的标题问题是静态的,你的意思是全局的吗?
-
@old_timer,@Chris Stratton:你们都是对的。我想我的意思是全局变量。这对我来说是一个糟糕的选择
-
现在已经指出解决问题 - 您可以对其进行编辑,这就是您在 SO 上响应 cmets 应该做的事情。全局变量是完全可以避免的,在嵌入式系统中应该避免尤其是。阅读:Jack Ganssle's A pox on globals。它准确地回答了你的问题。
-
@Lundin 的建议; “你可以使用放置在文件范围内的变量”是真实而重要的,但也需要应用最大内聚/最小耦合原则。例如,将所有代码放在一个文件中就达不到目的了。
标签: variables static coding-style embedded conventions