目的是使用变量,int来计算中断的实例,并在ISR中相应地对值进行相应的操作。所以,我将其声明为extern volatile int counter
,然后在我的interruptts.c文件中声明它(这是我的中断,例如SysTick
)。但这在某种程度上是行不通的。任何帮助将不胜感激,谢谢。
目前我(在我的main.c文件中):
static volatile int i = 0;
Interrupt_Handler() {
i++;
}
static int getValuei(void) {
return i;
}
在我的Interrupt.c文件中,我有:
extern void Interrupt_Handler(void);
extern int getValuei(void);
结果:中断处理程序中i
没有递增,代码停止。
答案 0 :(得分:0)
我在中断例程中使用全局变量做了很多,例如在计时器例程中使用的msec计数器。
我应该做的是在Interrupt.c文件中声明中断处理程序和全局变量。不要将变量设为静态,您希望在文件外部使用它。
最难的一点是确保你的中断真正被调用。大多数情况下,您必须启用此特定中断,但也启用全局中断。有时在中断结束时你必须再次启用它。
答案 1 :(得分:0)
我只想指出,像这样使用volatile是不正确的。它会在99%的时间内工作,但如果不工作,您将很难找到原因。
即使仅出于阅读目的,对我的访问也不是原子的,因此当您处于阅读中间时,我可能会更改。
来源: