5892|14

135

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

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

 
中断服务函数放到一个单独的C文件里面,中断中全局变量数组该怎么定义才能使用?
在主程序和中断中都要用到这个数组。
我定义后编译通不过,发生这样的错误:ADC1.o(.text+0xae): In function `_ADC1Interrupt':
C:\Users\Administrator\Desktop\AD\ADC1.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
#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;              //清中断标
}


最新回复

重点: 定义要在*.C文件中。你贴上的附件程序是在*.h文件中。 把*.h文件中的 “extern unsigned int ADCValue[6][32]; “删掉。 把*.c文件中的 extern unsigned int ADCValue[6][32]; 改为 unsigned int ADCValue[6][32] = {}; 楼主需要补习一下 C语言程序设计。   详情 回复 发表于 2018-12-20 09:38
点赞 关注(1)
 

回复
举报

6040

帖子

205

TA的资源

版主

沙发
 
你需要在某个C文件中定义如下数组:
unsigned int ADCValue[6][32];
然后才可以在别的文件中引用

点评

在ADC1.C文件里面也定义了这个数组。主程序中还没有使用这个数组编译都通不过  详情 回复 发表于 2018-9-25 18:18
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

板凳
 
extern unsigned int ADCValue[6][32];  去掉extern,编译通过的话,就是没有定义这个数组。

点评

请大声帮我好好看看@dcexpert  详情 回复 发表于 2018-9-25 18:26
去掉extern也不行  详情 回复 发表于 2018-9-25 18:14
 
 
 

回复

135

帖子

1

TA的资源

一粒金砂(中级)

4
 
ienglgge 发表于 2018-9-25 13:42
extern unsigned int ADCValue[6][32];  去掉extern,编译通过的话,就是没有定义这个数组。

去掉extern也不行

点评

去掉extern也不行,提示是什么。 。只能一个文件中定义数组,可以在多个文件extern  详情 回复 发表于 2018-9-26 10:23
 
 
 

回复

135

帖子

1

TA的资源

一粒金砂(中级)

5
 
lcofjp 发表于 2018-9-23 16:11
你需要在某个C文件中定义如下数组:
unsigned int ADCValue[6][32];
然后才可以在别的文件中引用

在ADC1.C文件里面也定义了这个数组。主程序中还没有使用这个数组编译都通不过
 
 
 

回复

135

帖子

1

TA的资源

一粒金砂(中级)

6
 
ienglgge 发表于 2018-9-25 13:42
extern unsigned int ADCValue[6][32];  去掉extern,编译通过的话,就是没有定义这个数组。

请大声帮我好好看看@dcexpert
 
 
 

回复

135

帖子

1

TA的资源

一粒金砂(中级)

7
 
大神们,帮我瞧瞧,程序在附件里

AD.zip

93.74 KB, 下载次数: 3

 
 
 

回复

1万

帖子

25

TA的资源

版主

8
 
本帖最后由 dcexpert 于 2018-9-25 19:54 编辑

你只定义了extern unsigned int ADCValue[6][32]; 这只是代表系统其它地方有这个变量。你没有定义实际的变量,当然会提示错误了。
需要在某个C文件中,定义一个unsigned int ADCValue[6][32]
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

9
 

去掉extern也不行,提示是什么。 。只能一个文件中定义数组,可以在多个文件extern
 
 
 

回复

637

帖子

2

TA的资源

版主

10
 
PIC在中断中使用数组,好像编译器不支持吧?尤其是8位的PIC单片机
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

11
 
在ADC.C文件中定义unsigned int ADCvalue[6][32]
在ADC.h文件中声明extern unsigned int ADCvalue[6][32]
 
 
 

回复

6366

帖子

4929

TA的资源

版主

12
 
在main.C文件中定义unsigned int ADCvalue[6][32]
在ADC.c文件中声明extern unsigned int ADCvalue[6][32]
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

13
 
楼上是正统做法。推荐。
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

14
 
编译器不支持
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

15
 
重点: 定义要在*.C文件中。你贴上的附件程序是在*.h文件中。
把*.h文件中的 “extern unsigned int ADCValue[6][32]; “删掉。
把*.c文件中的 extern unsigned int ADCValue[6][32]; 改为 unsigned int ADCValue[6][32] = {};

楼主需要补习一下 C语言程序设计。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表