我有一些通用的标题,我在其中声明它(在std.h
中):
static volatile unsigned int timestamp;
我在中断的地方增加了它(在main.c
中):
void ISR_Pit(void) {
unsigned int status;
/// Read the PIT status register
status = PIT_GetStatus() & AT91C_PITC_PITS;
if (status != 0) {
/// 1 = The Periodic Interval timer has reached PIV since the last read of PIT_PIVR.
/// Read the PIVR to acknowledge interrupt and get number of ticks
///Returns the number of occurrences of periodic intervals since the last read of PIT_PIVR.
timestamp += (PIT_GetPIVR() >> 20);
//printf(" --> TIMERING :: %u \n\r", timestamp);
}
}
在另一个模块中,我有一个必须使用它的程序(在meta.c
中):
void Wait(unsigned long delay) {
volatile unsigned int start = timestamp;
unsigned int elapsed;
do {
elapsed = timestamp;
elapsed -= start;
//printf(" --> TIMERING :: %u \n\r", timestamp);
}
while (elapsed < delay);
}
首先printf
显示正确增加timestamp
但等待printf
始终显示0
。为什么呢?
答案 0 :(得分:4)
您将变量声明为static
,这意味着它包含在其中的文件的本地变体。timestamp
中的main.c
与meta.c
中的timestamp
不同。
您可以通过在main.c
中声明volatile unsigned int timestamp = 0;
来解决此问题:
meta.c
和extern volatile unsigned int timestamp;
一样:
{{1}}