通过函数返回和extern变量

时间:2012-12-10 18:25:46

标签: c

我正在开始编程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值。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

您是否尝试过等待:

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

也许时钟非常快,变量的单位太小而无法代表它。或者可能是变量类型的printf中的转换。

答案 1 :(得分:0)

它被声明为clock_time_t,但您将返回unsigned long。这是一个可能的问题。

您的代码中可能有另一个名为clock_time的函数?我建议,因为根据您在问题中发布的代码,我不知道它是如何输出您所看到的。也许您的系统库包含clock_time