除了使用全局之外,如何使用'flag'变量?

时间:2014-04-29 06:27:40

标签: c embedded flags pic

我使用几个标志来设置迷你嵌入式项目中的标志。我想知道使用这些变量指示项目中某些状态的最佳方法是什么。我是使用c18编译器和pic18f控制器。

  

flag1..flag 2..flag3..denote state1,state2,state3..and对应   行动已经完成。

让全球化是一种选择。

但是,我可以通过哪种方法来处理“标志”。那么在嵌入式系统中呢?

1 个答案:

答案 0 :(得分:2)

首先,每当你有很多“旗帜”时,请小心翼翼。在嵌入式系统中,很容易得到“flag spaghetti”,它包含许多复杂的依赖项。因此,检查你有哪些标志:它们是相关的,它们是否可以共存等。如果是这样,通常最好将它们合并到枚举中。如果标志指定状态,那么为了更好的程序稳定性,考虑将整个程序编写为状态机。并在程序中的特定位置以一致的方式设置标志。而不是在所有地方这样做。

至于如何存储它们:C程序中从来没有理由使用全局变量,其中全局变量的定义是在文件范围内声明的变量,对整个程序是可见的。

如果您使用的是单线程/单进程程序,那么在文件范围内声明变量就可以了。但是您必须将其声明为static,以便它是私有文件范围变量而不是全局变量

volatile与范围或程序设计无关。为了防止不正确的编译器优化,如果主程序和ISR之间共享变量,则应始终声明变量volatile

(请注意volatile不保证任何原子访问,它不能防止ISR和主程序之间的竞争条件。)