中断服务函数放到一个单独的C文件里面,中断中全局变量数组该怎么定义?

2019-03-25 18:43发布

中断服务函数放到一个单独的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;              //清中断标
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
lcofjp
1楼-- · 2019-03-26 05:53
你需要在某个C文件中定义如下数组:
unsigned int ADCValue[6][32];
然后才可以在别的文件中引用
ienglgge
2楼-- · 2019-03-26 09:22
extern unsigned int ADCValue[6][32];  去掉extern,编译通过的话,就是没有定义这个数组。
werjufour
3楼-- · 2019-03-26 10:49
ienglgge 发表于 2018-9-25 13:42
extern unsigned int ADCValue[6][32];  去掉extern,编译通过的话,就是没有定义这个数组。

去掉extern也不行
werjufour
4楼-- · 2019-03-26 12:53
lcofjp 发表于 2018-9-23 16:11
你需要在某个C文件中定义如下数组:
unsigned int ADCValue[6][32];
然后才可以在别的文件中引用

在ADC1.C文件里面也定义了这个数组。主程序中还没有使用这个数组编译都通不过
werjufour
5楼-- · 2019-03-26 17:37
 精彩回答 2  元偷偷看……
werjufour
6楼-- · 2019-03-26 23:21
大神们,帮我瞧瞧,程序在附件里

一周热门 更多>