【发布时间】:2013-09-25 01:45:58
【问题描述】:
我正在编写一些与我们设计组的硬件直接交互的例程。我会尽量简洁地解释这个场景。
我们的硬件会对运行我所描述的固件的嵌入式 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 声明为全局变量。我想知道是否有办法避免为此使用全局变量。
我对如何做到这一点有一个模糊的想法:
- 将
num_ints_serviced声明为静态int,这样就不会在每次调用inthandler()时重置其值。 (但是,这带来了另一个问题,因为在我们的测试中,我们确实希望将该计数器重置为 0。目前只需调用另一个函数reset_in_counter()即可修改全局。) - 不知何故弄乱了
int_limit的范围,因此它可以在interrupt_handler.cpp 中本地声明,但从external_command_handler.cpp 修改。也许使用命名空间?我不确定具体情况。
我知道最佳实践表明您应该避免使用全局变量,但它们有一些用途。我想知道这是否只是其中一种用途,也许我只是让这个问题变得太难了(毕竟,使用全局变量适用于这种情况)。
提前感谢您的任何建议。
【问题讨论】:
标签: c++ namespaces scope globals