中断服务函数放到一个单独的C文件里面,中断中全局变量数组该怎么定义才能使用?
在主程序和中断中都要用到这个数组。
我定义后编译通不过,发生这样的错误:ADC1.o(.text+0xae): In function `_ADC1Interrupt':
C:UsersAdministratorDesktopADADC1.c:61: undefined reference to `ADCValue'
不知道原因在哪里?
头文件如下:
#ifndef ADC1_H
#define ADC1_H
#define AINPUTS 0xffex //Analog inputs 将复用引脚AN5设置为模拟输入引脚。
//#define AINPUTS 0xC0FF //Analog inputs 将复用引脚AN8~AN13这6个端口设置为模拟输入引脚。
/***声明全局变量****/
extern unsigned int ADCValue[6][32];
#endif
中断C源文件如下:(其他函数设置省略,直接给出中断服务函数)
#include<p24fxxxx.h>
#include "ADC1.h"
void __attribute__((interrupt,no_auto_psv)) _ADC1Interrupt(void)
{
int n,*BufPtr;
char gNum;
if(AD1CON2bits.BUFS)
BufPtr=&ADC1BUF0; //指针指向ADC1BUF0单元,取低8字缓冲器中的数据
else
BufPtr=&ADC1BUF8; //指针指向ADC1BUF8单元,取高8字缓冲器中的数据
for(n=0;n<6;n++)
{
ADCValue[n][gNum]=*BufPtr; //传送采集的6个通道的数据
BufPtr++;
}
gNum++;
if(gNum>=32)gNum=0;
IFS0bits.AD1IF=0; //清中断标
}
此帖出自
小平头技术问答
你只定义了extern unsigned int ADCValue[6][32]; 这只是代表系统其它地方有这个变量。你没有定义实际的变量,当然会提示错误了。
需要在某个C文件中,定义一个unsigned int ADCValue[6][32]
去掉extern也不行,提示是什么。 。只能一个文件中定义数组,可以在多个文件extern
在ADC.h文件中声明extern unsigned int ADCvalue[6][32]
一周热门 更多>