Vivian LSR 2021-05-13 22:43 采纳率: 0%
浏览 25

隐式定义的错误处理,为什么加了头文件依旧不成功?

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <linux/input.h>
#include <stdlib.h>
#include <asm/types.h>
#include <pthread.h>
#include <string.h>
#include <termios.h>

int jiaoyan(char SerBfr[])
{
	char BCC = 0; 
	int i;
	for(i = 0; i<(SerBfr[0]-2); i++) 
	{ 
		BCC ^= SerBfr[i]; 
	} 
	SerBfr[SerBfr[0]-2] = ~BCC;
}
int main()
{
	int card = 0;
	int com_fd1 = open("/dev/ttySAC1",O_RDWR);
	if (-1 == com_fd1)
	{
		printf("打开串口1失败!\n");
		return -1;
	}
	struct termios ter;//首先,为了安全起见和以后调试程序方便,可以先保存原先串口的配置,在这里可以使用函数tcgetattr(fd, &old_cfg)。
						//该函数得到fd指向的终端的配置参数,并将它们保存于termios结构变量old_cfg中。该函数还可以测试配置是否正确、该串口是否可用等。
						//若调用成功,函数返回值为0,若调用失败,函数返回值为-1,
	struct termios old_ter;
	int ret = tcgetattr(com_fd1, &old_ter);
	if (0 == ret)
	{
		printf("保存串口配置成功!\n");
	}else
	{
		printf("保存串口配置失败!\n");
		return -1;
	}

	cfmakeraw(&ter);//设备参数的设置
	ter.c_cflag |= CLOCAL | CREAD;
	cfsetispeed(&ter, B9600);// 输入波特率
 	cfsetospeed(&ter, B9600);// 输出波特率
	
	ter.c_cflag &= ~CSIZE; /*用数据位掩码清空数据位设置*/
	ter.c_cflag |= CS8;
	ter.c_cflag &= ~PARENB;//无奇偶校验位
	ter.c_cflag &= ~CSTOPB;/* 将停止位设置为一个比特 */

	ter.c_cc[VTIME] = 0;
	ter.c_cc[VMIN] = 1;		//设置为至少有一个字节返回时才去读取

	tcflush(com_fd1, TCIFLUSH);//清除缓冲
	ret = tcsetattr(com_fd1,TCSANOW,&ter);
	if (0 == ret)
	{
		printf("串口激活成功!\n");
	}else
	{
		printf("串口激活失败!\n");
		return -1;
	}

	unsigned char SerBfr_A[7] = {0};//命令的写入:请求天线范围内所有的卡、、此种serbfr函数为校验函数,就是把加密命令解码
	SerBfr_A[0] = 0x07;             //注意数组的定义和数组命令的提取中【 】
	SerBfr_A[1] = 0X02;
	SerBfr_A[2] = 0X41;
	SerBfr_A[3] = 0X01;
	SerBfr_A[4] = 0X52;
	SerBfr_A[5] = 0;
	SerBfr_A[6] = 0X03;
	//printf("SerBfr[5] = %d\n",SerBfr_A[5] );
	jiaoyan(SerBfr_A);//校验函数
	//printf("SerBfr[5] = %d\n",SerBfr_A[5] );
	while(1)
	{
		
		char message[10] ={0};//存放读取数据
		bzero(message,10);//置字符串前n个字节为0.清零作用
		//message[2] = 0x01;
		write(com_fd1,SerBfr_A,7);
		read(com_fd1,message,8);
		if (0x00 == message[2] && 0x02 == message[3]) //判断数组2 3位元素是否符合
		{
			printf("找到卡了!\n");
			unsigned char SerBfr_B[8] = {0};
			SerBfr_B[0] = 0x08;
			SerBfr_B[1] = 0x02;
			SerBfr_B[2] = 0x42;
			SerBfr_B[3] = 0x02;
			SerBfr_B[4] = 0x93;
			SerBfr_B[5] = 0x00;
			SerBfr_B[6] = 0;
			SerBfr_B[7] = 0x03;
			jiaoyan(SerBfr_B);

			char message_b[12] ={0};
			bzero(message_b,12);
			//message_b[2] = 0x01;
			write(com_fd1,SerBfr_B,8);
			
			read(com_fd1,message_b,12);
			if (0x00 == message_b[2] )
			{
				printf("得到了卡号:%hd%hd%hd%hd\n",message_b[4],message_b[5],message_b[6],message_b[7] );
			/*	if ( 103 == message_b[4] && 116 == message_b[5] && 184 == message_b[6] && 125 == message_b[7] )
				{
					//printf("KEY3=%d\n",KEY);
					card = 1;
					break;
					//printf("KEY4=%d\n",KEY);				              
				}  */
			}
			
		}else
		{
			printf("没找到!\n");
			sleep(1);
		}
	}


	close(com_fd1);


	return 0;
}

编译后显示

已经包含了相应的头文件,为什么还是无法成功

 

  • 写回答

3条回答 默认 最新

  • CSDN专家-Time 2021-05-13 22:47
    关注

    C语言程序编译后出现警告:
    warning: implicit declaration of function ‘client_tcpinit’ [-Wimplicit-function-declaration]

    原因:相关的头文件没有声明这个函数,在相关头文件中声明即可

    例如client_tcpinit函数 在 client.c中定义,在client.h中没有声明,编译时会导致出现以上警告
     

    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制