0

Microchip 社の dspic33 のプログラミングを開始していますが、extern 変数を返そうとすると問題が発生します。私のコードは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 の正しい値を返さないのか疑問に思っています。私が間違っていることを誰かが知っていますか?

4

2 に答える 2

0

次の間で待機してみましたか:

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

時計が非常に速く、変数の単位が小さすぎて表現できない場合があります。または、おそらく変数型のprintfでの変換。

于 2012-12-10T18:31:30.207 に答える
0

と宣言されてclock_time_tいますが、あなたは戻ってきていますunsigned long。これは考えられる問題です。

clock_timeコードのどこかに別の関数という名前が付けられている可能性がありますか? 質問に投稿したコードから、あなたが見ているものをどのように出力できるかがわからないので、それをお勧めします。システム ライブラリにclock_time.

于 2012-12-10T18:31:45.113 に答える