2012-12-10 44 views
0

我開始從Microchip編程dspic33和我有問題,當我嘗試返回一個外部變量。我的代碼在3個文件被分割,是這樣的:返回和外部變量通過函數

main.c 

#include <stdio.h>   /*printf definition ... */ 
#include "clock.h" 
volatile unsigned long count = 0; 

int16_t main(void) 
{ 

clock_init(); 

while(1) 
{ 
    if(flag) 
    { 
    printf("MAIN:count = %lu clock_time %lu",count, clock_time()); 
    flag = 0; 
    } 
} 
return 0; 
} 

clock.h 

... 
extern volatile unsigned long count; 
... 

clock.c 

#include "clock.h" 
void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void) 
{ 
count++; 
flag=1; 
IFS0bits.T1IF = 0; 
} 

unsigned long clock_time(void) 
{ 
return count; 
} 

的輸出是一樣的東西:

MAIN:count = 1 clock_time : 590106798 
MAIN:count = 2 clock_time : 590106798 
MAIN:count = 3 clock_time : 590106798 

等。 ..

我想知道爲什麼clock_time()沒有返回count的正確值。有誰知道我做錯了什麼?

+1

在這種情況下,「正確的」值是多少?是什麼讓你斷定你現在看到的是不正確的? – AnT

回答

0

你有沒有嘗試之間的等待:

printf("MAIN:count = %lu clock_time %lu",count, clock_time()); 
    wait(1000); 
    flag = 0; 

也許時鐘速度非常快,你的變量的單位是太小,無法代表它。或者很可能是變量類型的printf中的轉換。

+0

我試過類似:unsigned long tmp = clock_time(); printf(clock_time()); 它解決了這個問題,可能是你說的速度非常快的時鐘;)謝謝 – amvalente

+0

歡迎,有時會發生這樣的問題,並不容易看到會發生什麼。 –

0

它被宣佈爲clock_time_t,但你要返回unsigned long。這是一個可能的問題。

您的代碼中可能有另一個名爲clock_time的函數?我建議,因爲從你在問題中發佈的代碼中,我看不出它是如何輸出你所看到的。也許你的系統庫包含clock_time

+0

我簡化了代碼發佈到這裏,但我錯過了那一個:p在我的代碼中,我有「typedef unsigned long clock_time_t;」所以這不是問題 – amvalente