struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
struct sockaddr *ai_addr;
char *ai_canonname;
struct addrinfo *ai_next;
};
int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints,
struct addrinfo **res);
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶装老酒的把戏。不过,不要小看了typedef,它对于你代码的维护会有很好的作用。比如C中没有bool,于是在一个软件中,一些程序员使用int,一些程序员使用short,会比较混乱,最好就是用一个typedef来定义,如:
typedef char bool;</p>
一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码。为了用户的方便,C99标准的C语言硬件为我们定义了这些类型,我们放心使用就可以了。</p>
按照posix标准,一般整形对应的*_t类型为:
1字节 uint8_t
2字节 uint16_t
4字节 uint32_t
8字节 uint64_t</p>
附:C99标准中inttypes.h的内容
00001 /*
00002 inttypes.h
00003
00004 Contributors:
00005 Createdby Marek Michalkiewicz <marekm@linux.org.pl>
00006
00007 THISSOFTWARE IS NOT COPYRIGHTED
00008
00009 Thissource code is offered for use in the public domain. You may
00010 use,modify or distribute it freely.
00011
00012 Thiscode is distributed in the hope that it will be useful, but
00013 WITHOUTANY WARRANTY. ALLWARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00014 DISCLAIMED. This includes but is not limited towarranties of
00015 MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE.
00016 */
00017
00018 #ifndef __INTTYPES_H_
00019 #define __INTTYPES_H_
00020
00021 /* Use [u]intN_t if you need exactly N bits.
00022 XXX- doesn't handle the -mint8 option. */
00023
00024</a> typedefsigned char int8_t;
00025</a> typedefunsigned char uint8_t;
00026
00027</a> typedefint int16_t;
00028</a> typedefunsigned int uint16_t;
00029
00030</a> typedeflong int32_t;
00031</a> typedefunsigned long uint32_t;
00032
00033</a> typedeflong long int64_t;
00034</a> typedefunsigned long long uint64_t;
00035
00036</a> typedefint16_t intptr_t;
00037</a> typedefuint16_t uintptr_t;
00038
00039 #endif</p></p>
1:比特率:9600bps</p>
就是每秒中传输9600bit,也就是相当于每一秒中划分成了9600等份。</p>
如此,那么每1bit的时间就是1/9600秒=104.166666666666666666666666<wbr />66667us。约0.1ms。既然是9600等份,即每1bit紧接着下一个比特,不存在额外的间隔。也不管是啥起始bit,数据bit,奇偶bit,停止bit。</p>
2:帧格式,帧间隔。</p>
在电脑里,也就是超级终端等的端口设置。电脑的默认端口设置,也就是默认帧格式是:8个数据bit,1个停止bit,(起始1bit 是必须的)默认无奇偶,无流控。</p>
则实际就是10bit为1帧。一秒中可以发送9600/10=960个帧,也就是960字符,因为一帧里只有1个字符,1字符就是帧里面的8个数据bit</p>
3:串口通讯</p>
串口当然可以连续,没有时间间隔地发送帧,默认情形下电脑在9600bps下可以发送960帧。</p>
但在实际工作中,在异步通讯下,一般需要一个交互过程,所以,电脑发送一个帧,或者若干帧,还需要等待从设备的应答,并不是一直发送的。有问有答地实现编程者的目标。</p>
</p>
串口通信必须要设定波特率,本设计采用的波特率为9 600 bit/s。产生波特率的时钟频率是越高越好,这样才可产生较高且精确的波特率。设计选用50M主频率要产生9600bit/s波特率,每传送一位数据需要5 208.33个时钟周期。取一个最接近的数是5 208,则波特率为9 600.61,其误差约为0.006%,误码率很低可以确保通信正常。</p>
用于adruino中delayMicroseconds来从Serial中逐字读取
相关代码:
#define BAUD_RATE 115200
#define TRANS_SPEED 1000000/BAUD_RATE
int transfer_speed = TRANS_SPEED;
delayMicroseconds(transfer_speed * 10 + 25);
//+25 used to offset deviation</p>
</pre>
<img class="alignnone size-full wp-image-42" src="http://www.bmysoft.org/wp-content/uploads/2014/08/2014-08-28-232837的屏幕截图.png" alt="2014-08-28 23:28:37的屏幕截图" width="1366" height="768" /></a></p>