和鑫鑫合作的数据采集系统的第一版终于完成了,有一些心得:
1、对socket连接的总体过程居然没有清晰的认识,编了半天居然没有connect,低级
2、结构体都不会用了,
typedef struct mydata
{}Data;
Data *mydata;
然后就没有给mydata分配空间,狂晕。
接着写出mydata=(struct Data *)malloc(sizeof(Data));
typedef了,当然就不要出现struct!!!
还用了strlen(Data),白痴编程。
3、编译应用程序使用头文件路径/home/zozowit/code/ad/uClinux-dist/linux-2.4.x/include
编译驱动模块使用头文件路径/home/zozowit/code/ad/uClinux-dist/uClibc/include
编译模块时-DMODULE -D__KERNEL__不可少
MODCFLAGS_MOD = -DMODULE -D__KERNEL__ -I$(INCLUDE) -Wall -O2 -fno-strict-aliasing -fno-common -pipe -fno-builtin -D__linux__ -g -DNO_MM -mapcs-32 -march=armv4 -mtune=arm7tdmi -mshort-load-bytes -msoft-float -nostdinc -iwithprefix include
子文件当然也要编译!!!
4、时间获取方法:
time_t timep;
struct tm *p;
char buf[20];
time(&timep);
p = localtime(&timep);
sprintf(buf, "%d-%d-%d %d:%d:%d",(1900 + p->tm_year),(p->tm_mon + 1),p->tm_mday,p->tm_hour, p->tm_min, p->tm_sec);/* 不失为itoa的良方
5、传结构体新学
Data *mydata;
write(sock_fd, (void *)mydata, sizeof(Data));
read(sock_fd, (void *)mydata, sizeof(Data));
6、A/D转换实际上是read的一部分,并非初学时误认为:启动一次转换,硬件才运行一次,于是应该在启动转换程序外加个循环,让硬件不停产生电压。
错的,电压就在那,A/D转换只是获取电压值然后转成数字量,故应该在应用程序的read外加循环。