打印

MPLAB编译问题:用数组的指针做函数参数,编译失败

[复制链接]
1679|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zdl522|  楼主 | 2015-4-10 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Read_ID(u8 (*HLID)[4],u8 ID_num,u16 start_add)
{
        u8 Send_Times;
        u8 IDcount;
        u32 i;
        for(IDcount=0;IDcount<ID_num;IDcount++)
        {
                for(Send_Times=0;Send_Times<3;Send_Times++)
                {               
                        Uart2RebuildlongDate(0x03,start_add+2*IDcount,2,9);
                        Uart2_Send_Arry(Uart2Sendbuff,8);
                        RC2IE = 1;//enable recieve interrupt
                        i=100000;                       //60ms
                        while((!Uart2CommEndFlag)&&(i--));
                        RC2IE = 0;//disable recieve interrupt
                        if(Uart2CommEndFlag)//数据接收完成
                        {
                                Uart2CommEndFlag=0;
                                *(*(HLID+IDcount)+0)=Uart2Recdate[5];
                                *(*(HLID+IDcount)+1)=Uart2Recdate[6];
                                *(*(HLID+IDcount)+2)=Uart2Recdate[3];
                                *(*(HLID+IDcount)+3)=Uart2Recdate[4];
                                Uart1_Send_Arry(*(HLID+IDcount),4);
                                break;       
                        }
                        else
                        {
                                continue;
                        }
                }       
        }
}
把这个函数放在main.c文件里,编译没问题;但吧这个函数放在其他的.c文件编译出现这样的错误。
Error   [1098] F:\CODE\RF-TVPO\RF-TVPO_v2.0\uart2cmd.h; 12. conflicting declarations for variable "F2643" (F:\CODE\RF-TVPO\RF-TVPO_v2.0\uart2cmd.h:12)
Error   [1098] F:\CODE\RF-TVPO\RF-TVPO_v2.0\uart2cmd.c; 142. conflicting declarations for variable "_Read_ID" (F:\CODE\RF-TVPO\RF-TVPO_v2.0\uart2cmd.h:12)
在uart2cmd.h也做了声明
#ifndef _UART2CMD_H
#define _UART2CMD_H

#define H_START_ADD 0x0bb9
#define L_START_ADD 0x0bD9

#include "config.h"

u16 CRC_Test(u8* puchMSG, u8 usDataLen);
void Uart2RebuildDate(u8 Function,u8 AddressH,u8 AddressL,u8 DateH,u8 DateL);
void Uart2RebuildlongDate(u8 Function,u16 Address,u16 Date,u8 Re_len);
void Read_ID(u8 (*HLID)[4],u8 ID_num,u16 start_add);

#endif
实在是找不到问题出在哪里,但是如果把这个函数的u8 (*HLID)[4]这个参数去掉就可以编译通过
请各位帮忙分析一下问题出在哪里

沙发
yklstudent| | 2015-4-10 17:57 | 只看该作者
好好补补你的C语言知识,这个还是很重要的(话说我最近也再不断复习)

使用特权

评论回复
板凳
kamen588| | 2015-4-14 17:50 | 只看该作者
数组名就可以

使用特权

评论回复
地板
zdl522|  楼主 | 2015-4-15 13:34 | 只看该作者

数组名是可以的,用数组指针编译不通过,不知道我的程序错在哪里?

使用特权

评论回复
5
zdl522|  楼主 | 2015-4-15 13:37 | 只看该作者
yklstudent 发表于 2015-4-10 17:57
好好补补你的C语言知识,这个还是很重要的(话说我最近也再不断复习)

对头,这几天我也一直在补习,但是我还是没搞明白上述问题的原因,在主文件中编译通过了,而且功能正常,应该程序是对的;但是放在其他文件里,头文件也包含了这个函数声明,就是编译不通过,不知道问题出在哪里了

使用特权

评论回复
6
弓长月月鸟| | 2015-4-15 14:30 | 只看该作者
把Read_ID(u8 (*HLID)[4],u8 ID_num,u16 start_add) 函数里面内容一层一层的屏蔽,编译,缩小范围,看看问题出在哪里。
或者换换函数名称试试。

使用特权

评论回复
7
zdl522|  楼主 | 2015-4-20 16:16 | 只看该作者
弓长月月鸟 发表于 2015-4-15 14:30
把Read_ID(u8 (*HLID)[4],u8 ID_num,u16 start_add) 函数里面内容一层一层的屏蔽,编译,缩小范围,看看问 ...

这样测试过,问题就出在这个u8 (*HLID)[4]数组的指针,把它屏蔽掉就没问题了

使用特权

评论回复
8
弓长月月鸟| | 2015-4-20 16:26 | 只看该作者
想问下,你的main.c的文件下是否包含有其他的.h文件,有可能因为某个.h文件的包含,使得你的这段函数在main。c下编译成功,但在其他文件下没有相应的文件包含,会造成你的编译不通过。以上是个人臆断,仅供参考。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

47

帖子

1

粉丝