⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 send.c

📁 这是一个 在S3C44B0板子,基于UClinux的网络传输程序,send.c是发送AD采集的数据(SEND.C带有AD采集程序).SET.C是设置程序比如采集时间等等.
💻 C
字号:
#include <stdio.h>#include <fcntl.h>#include <sys/socket.h>#include <unistd.h>#include <netinet/in.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <arpa/inet.h>#define CLIENT_PORT  10000#define QUEUE_LENGTH 20#define MAXLEN 		100#define MCLK 			66000000

/*ADC寄存器地址设置*/
#define rADCCON	(*(volatile unsigned *)0x1d40000) //控制器
#define rADCPSR	(*(volatile unsigned *)0x1d40004) //比例因子
#define rADCDAT	(*(volatile unsigned *)0x1d40008) //存结果数据

/*控制位定义**/
#define CON_AIN0 (0<<2)
#define CON_AIN1 (1<<2)
#define CON_AIN2 (2<<2)
#define CON_AIN3 (3<<2)
#define CON_AIN4 (4<<2)
#define CON_AIN5 (5<<2)
#define CON_AIN6 (6<<2)
#define CON_AIN7 (7<<2)		//ad转换的通道选择寄存器

#define CON_READ_START    (0<<1)	 	//ad转换不允许通过读操作启动转换
#define CON_ENABLE_START  (1<<0)		//ad转换开始且启动后此位清零
#define CON_SLEEP 		  (1<<5)		//省电,休眠模式
#define CON_FLAG  		  (1<<6)		//转换结果标志位typedef struct{	float ad1;	float ad2;	float ad3;	float ad4;	float ad5;	float ad6;	float ad7;	float ad8;	char ip[16];	char id[21];	} ad;	//全局变量定义区ad ad_num;float adc[8];//定义一个存放采集数据的数组	int delay_time=5;char serverIP[20]="192.168.0.2";char DEV_ID[21]="00001";char localip[16]="192.168.0.100";char net_mask[16]="255.255.255.0";char gw[16]="192.168.0.1";//char localserverip[16]="172.18.136.123";char localserverip[16]="192.168.0.3";	 
//启动数据采集
inline void start_adc(int chl)
{
	int time_out;	clock_t start,end;	rADCCON = ((rADCCON | chl ) & 0xfffffffe);
	//set_clock(20);  
	rADCCON = CON_ENABLE_START | chl;
	/*避免第一次的标志位错误**/	srand(time(NULL));	start=clock();	time_out=1;
	while((rADCCON & CON_ENABLE_START)&&time_out)	{		end=clock();		if((end-start)<10000)			time_out=1	;		else			time_out=0;	}
	
}

//休眠模式函数定义
inline void stop_adc(void)
{
	rADCCON=CON_SLEEP;
}//采集并处理数据函数
void ADC(float adc[8]){		int i,j,k;	int time_out;	clock_t start,end;	
	unsigned long adc_temp,adc_temp1;		for(i=0;i<8;i++)
	{		adc_temp=0;		for(k=0;k<10;k++){
			start_adc(i << 2);		//im			srand(time(NULL));			start=clock();			time_out=1;
			while(!(rADCCON & CON_FLAG) && time_out){				end=clock();				if((end-start)<10000)					time_out=1	;				else					time_out=0;				}
			for(j=0;j<rADCPSR;j++);		//避免第二个标志位有错
			adc_temp1 = rADCDAT & 0x000003ff;
			adc_temp += adc_temp1;		//取出数据	      		}
		adc[i] = adc_temp/10;
		adc[i] = adc[i] * 2500;//转化成毫伏
		adc[i] = adc[i] / 1024;	}	}void setnet(char *ip,char *netmask,char *gw){		char buf[100];		char buf1[100];		strcpy(buf,"ifconfig eth0 ");		strcat(buf,ip);		strcat(buf," ");		strcat(buf,"netmask ");		strcat(buf,netmask);					strcpy(buf1,"route add default gw ");		strcat(buf1,gw);		system(buf);		system(buf1);		printf("ifconfig:%s\n",buf);		printf("route:%s\n",buf1);		printf("config success\n");		}//读取文件中的配置参数void readfile(){		FILE *fp;		char *dir;		char ch;		char fpathname[MAXLEN];		int i,num;		char buffer[MAXLEN];		dir="/mnt/";		strcpy(fpathname,dir);		strcat(fpathname,"temp");		fp=fopen(fpathname,"r");		if(fp!=NULL){			printf("read config file\n");			memset(buffer,0,MAXLEN);			for(num=0;num<7;num++){				i=0;				ch=fgetc(fp);				while(ch!='\n'){					buffer[i++]=ch;					ch=fgetc(fp);				}				buffer[i]='\0';				switch(num){					case 0:						memset(localip,0,sizeof(localip));						strcpy(localip,buffer);						printf("localip: %s\n",localip);						break;					case 1:						memset(net_mask,0,sizeof(net_mask));						strcpy(net_mask,buffer);						printf("netmask: %s\n",net_mask);						break;					case 2:						memset(gw,0,sizeof(gw));						strcpy(gw,buffer);						printf("gateway: %s\n",gw);						break;					case 3:						memset(serverIP,0,sizeof(serverIP));						strcpy(serverIP,buffer);						printf("serverIP: %s\n",serverIP);						break;					case 4:						delay_time=atoi(buffer);						printf("delayTime: %d\n",delay_time);						break;					case 6:						memset(DEV_ID,0,sizeof(DEV_ID));						strcpy(DEV_ID,buffer);						printf("deviceID: %s\n",DEV_ID);						break;					case 5:						memset(localserverip,0,sizeof(localserverip));						strcpy(localserverip,buffer);						printf("localServerIP: %s\n",localserverip);						break;				}//switch end			}//for end		fclose(fp);		}//if end		else{			printf("default config\n");		}}		void tcpsend(){		struct sockaddr_in sendaddr;		int socksend_serv;	int socksend_local;		int newfd=-1;	int flags;	while(1)	{		memset(&ad_num,0,sizeof(ad));		ADC(adc);//取得采集过来的数据,一共八路		ad_num.ad1=adc[0];		ad_num.ad2=adc[1];		ad_num.ad3=adc[2];		ad_num.ad4=adc[3];		ad_num.ad5=adc[4];		ad_num.ad6=adc[5];		ad_num.ad7=adc[6];		ad_num.ad8=adc[7];/*		ad_num.ad1=1142.0;		ad_num.ad2=12.0;		ad_num.ad3=12.0;		ad_num.ad4=1200.0;		ad_num.ad5=12.0;		ad_num.ad6=12.0;		ad_num.ad7=12.0;		ad_num.ad8=12.0;*/		strcpy(ad_num.ip,localip);		strcpy(ad_num.id,DEV_ID);		sendaddr.sin_family=AF_INET;		sendaddr.sin_port=htons(CLIENT_PORT);		sendaddr.sin_addr.s_addr=inet_addr(serverIP);			bzero(&(sendaddr.sin_zero),8);		socksend_serv=socket(AF_INET,SOCK_STREAM,0);		if((newfd=connect(socksend_serv,(struct sockaddr*)&sendaddr,sizeof(sendaddr)))<0){			perror("connect remote");			}		else {			printf("send remote: %s\n",serverIP);			if((send(socksend_serv,(char*)&ad_num,sizeof(ad),0))==-1)				perror("send remote");						close(newfd);		}		close(socksend_serv);			sendaddr.sin_family=AF_INET;		sendaddr.sin_port=htons(CLIENT_PORT);		sendaddr.sin_addr.s_addr=inet_addr(localserverip);			bzero(&(sendaddr.sin_zero),8);		socksend_local=socket(AF_INET,SOCK_STREAM,0);
		/*设置无阻塞模式*/
		if((flags=fcntl(socksend_local,F_GETFL,0))<0){
			perror("fcntl get socket attributes error");	
		}
		flags |= O_NONBLOCK;
		if((flags=fcntl(socksend_local,F_GETFL,0))<0){
			perror("fcntl set socket attributes error");	
		}		if((newfd=connect(socksend_local,(struct sockaddr*)&sendaddr,sizeof(sendaddr)))<0){			perror("connect local");			}		else {			printf("send local: %s\n",localserverip);			if((send(socksend_local,(char*)&ad_num,sizeof(ad),0))==-1)				perror("send local");						close(newfd);		}		close(socksend_local);		sleep(delay_time);	}//end while}//主函数,用于接收服务器发过来的数据以用来设置配置文件int main(int argc,char **argv){				rADCPSR=160;	readfile();		setnet(localip,net_mask,gw);	tcpsend();	return 0;									}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -