我正在编写一些直接与我们设计组的硬件接口的例程。我会尽量简洁地解释这个场景。
我们的硬件对运行我所描述的固件的嵌入式 CPU 产生各种类型的中断。由于我们调试计划的性质,有时我们希望限制所服务的中断数量。此中断限制通过外部寄存器接口传递到正在运行的固件中。
所以!我有两个功能:inthandler()
和limit_interrupts()
. 它们基本上看起来像这样:
在文件 interrupt_handler.cpp 中:
void inthandler(){
if (num_ints_serviced < int_limit)
{
...handle interrupt...
num_ints_serviced++;
}
}
在文件 external_command_handler.cpp 中:
void limit_interrupts(){
int_limit = <read int limit from external register>;
}
目前,我有int_limit
并num_ints_serviced
声明为全局变量。我想知道是否有办法避免为此使用全局变量。
我对如何做到这一点有一个模糊的想法:
- 声明为静态 int,以便每次调用
num_ints_serviced
时都不会重置其值。inthandler()
(然而,这带来了另一个问题,因为在我们测试的某个时刻,我们确实想将该计数器重置为 0。目前这只是调用另一个函数reset_in_counter()
来修改全局的问题。) - 不知何故弄乱了范围,
int_limit
以便它可以在interrupt_handler.cpp中本地声明,但从external_command_handler.cpp修改。也许使用命名空间?我不确定具体情况。
我知道最佳实践表明您应该避免使用全局变量,但它们有一些用途。我想知道这是否只是其中一种用途,也许我只是让这个问题变得太难了(毕竟,使用全局变量适用于这种情况)。
提前感谢您的任何建议。