私はそれを宣言するいくつかの一般的なヘッダーを持っています (で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
。なんで?