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