将中断处理程序和变量从 main 移动到包含文件

Move an interrupt handler and variables from main to a include file

我有一个关于如何将中断处理程序正确移动到包含文件的新手问题。我的 main.c 文件中有一个以这种方式定义的 SysTick 处理程序:

volatile int systick_timer_counter = 0;

void SysTick_Handler(void) {
    systick_timer_counter++;
}

我使用这个 systick_timer_counter,每 10 毫秒增加一次,在经过一段时间后触发一些检查,然后重置它。

我想要的是在一些不在我的 main.c 文件中但在另一个函数的 .c 文件中的函数中使用此 systick_timer_counter。所以我想创建一个名为 systick_counter 的文件来包含我需要使用它的地方。

我想问的是,我应该如何以正确的方式执行此操作?我可以只创建一个 .c 文件并在其中放置变量和中断 header,还是我应该添加更多内容或更改变量定义?

听起来你的意思是你想要定义一个全局变量 一个可从其他模块访问的模块(源文件)。

假设我已经正确解释了你的问题,是的,可以做到 通过使用 extern 关键字。但是,这对我来说是不负责任的 并不是说 不必要地使用全局变量是不好的做法 。它 导致 hard-to-maintain 代码,因为外部全局可能是 从代码库中的任何地方更改。你想限制范围和 尽可能多地展示您的标识符。

在这种情况下,我建议您保留 systick_timer_counter 局部于定义它的模块,并且 使用该模块中的函数来访问它。这就像定义一个 class 使用方法,使用一种没有显式 classes 的语言。正在做 这样,其他模块无法更改值,除非调用 reset_systick().

int systick_timer_counter = 0;

void reset_systick()
{
    systick_timer_counter = 0;
}

void SysTick_Handler()
{
    systick_timer_counter++;
}

int return_systick()
{
    return systick_timer_counter;
}

static 关键字添加到您希望只能从文件中访问的变量也是一个好主意。

静态整数 systick_timer_counter = 0;