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() 没有返回正确的计数值。有谁知道我做错了什么?

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 回答