中断服务函数放到一个单独的C文件里面,中断中全局变量...

[复制链接]
15539|10
手机看帖
扫描二维码
随时随地手机跟帖
flycamelaaa|  楼主 | 2021-9-16 16:05 | 显示全部楼层 |阅读模式
中断服务函数放到一个单独的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;              //清中断标
}

使用特权

评论回复
laocuo1142| | 2021-9-16 16:06 | 显示全部楼层

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

使用特权

评论回复
stormwind123| | 2021-9-16 16:06 | 显示全部楼层
extern unsigned int ADCValue[6][32];  去掉extern,编译通过的话,就是没有定义这个数组。

使用特权

评论回复
probedog| | 2021-9-16 16:07 | 显示全部楼层
你只定义了extern unsigned int ADCValue[6][32]; 这只是代表系统其它地方有这个变量。你没有定义实际的变量,当然会提示错误了。
需要在某个C文件中,定义一个unsigned int ADCValue[6][32]

使用特权

评论回复
classroom| | 2021-9-16 16:07 | 显示全部楼层

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

使用特权

评论回复
onlycook| | 2021-9-16 16:09 | 显示全部楼层

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

使用特权

评论回复
内政奇才| | 2021-9-16 16:11 | 显示全部楼层
重点: 定义要在*.C文件中。你贴上的附件程序是在*.h文件中。
把*.h文件中的 “extern unsigned int ADCValue[6][32]; “删掉。
把*.c文件中的 extern unsigned int ADCValue[6][32]; 改为 unsigned int ADCValue[6][32] = {};

使用特权

评论回复
diweo| | 2021-9-17 12:16 | 显示全部楼层
上手虽然很容易,但还是要搞清楚一些基本概念。比如,什么叫“声明”,什么叫“定义”。

使用特权

评论回复
caosix| | 2021-9-17 16:20 | 显示全部楼层
classroom 发表于 2021-9-16 16:07
PIC在中断中使用数组,好像编译器不支持吧?尤其是8位的PIC单片机

不会吧。。中断程序中 肯定是 可以 使用 数组 (一维 指针) 的 哦 。

使用特权

评论回复
koala889| | 2021-9-18 16:47 | 显示全部楼层
extern的话,也可以在定义一层宏定义,以避免重复引用

使用特权

评论回复
yiyigirl2014| | 2021-9-22 20:21 | 显示全部楼层
你先在某个地方定义好这个数组,然后在这个文件里用的话再声明一下它在其他的文件里。

使用特权

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

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 呐咯密密 得到打赏 ¥310.00
  • 2 qbwww 得到打赏 ¥265.00
  • 3 yanzhengxin1 得到打赏 ¥200.00
  • 4 full_stack 得到打赏 ¥100.00
  • 5 laocuo1142 得到打赏 ¥55.00
  • 6 二哲科技 得到打赏 ¥50.00
  • 7 zhangjiantao 得到打赏 ¥50.00
  • 8 改名了 得到打赏 ¥50.00
  • 9 小叶三千 得到打赏 ¥50.00
  • 10 cjseng 得到打赏 ¥50.00
在线客服 快速回复 返回顶部 返回列表