我使用几个标志来设置迷你嵌入式项目中的标志。我想知道使用这些变量指示项目中某些状态的最佳方法是什么。我是使用c18编译器和pic18f控制器。
flag1..flag 2..flag3..denote state1,state2,state3..and对应 行动已经完成。
让全球化是一种选择。
但是,我可以通过哪种方法来处理“标志”。那么在嵌入式系统中呢?
答案 0 :(得分:2)
首先,每当你有很多“旗帜”时,请小心翼翼。在嵌入式系统中,很容易得到“flag spaghetti”,它包含许多复杂的依赖项。因此,检查你有哪些标志:它们是相关的,它们是否可以共存等。如果是这样,通常最好将它们合并到枚举中。如果标志指定状态,那么为了更好的程序稳定性,考虑将整个程序编写为状态机。并在程序中的特定位置以一致的方式设置标志。而不是在所有地方这样做。
至于如何存储它们:C程序中从来没有理由使用全局变量,其中全局变量的定义是在文件范围内声明的变量,对整个程序是可见的。
如果您使用的是单线程/单进程程序,那么在文件范围内声明变量就可以了。但是您必须将其声明为static
,以便它是私有文件范围变量而不是全局变量
volatile
与范围或程序设计无关。为了防止不正确的编译器优化,如果主程序和ISR之间共享变量,则应始终声明变量volatile
。
(请注意volatile
不保证任何原子访问,它不能防止ISR和主程序之间的竞争条件。)