幸运儿不是我,因为我选择的路很难走.如果够出色也不能出头,至少要做到没第二个我.
分类: LINUX
2013-05-11 16:20:16
UART的操作是嵌入系统中最常用的通信方式,现在网上有很多朋友提出了许多思路,在一定的应用环境中能够收到良好的效果。本人在下面的介绍中提出一种在RTOS中使用最方便的UART Driver思想,希望大家讨论并批评。
1、接口规范
1.1 设备打开
bool UART_open( int port, int baudrate, int databit, char checkbit, int stopbit, int timeout)
输入:
port串口号0~n
baudrate波特率110,300,600,1200,2400,...,115200bps
databit数据位数目5~8
checkbit校验位'e','o','n'
stopbit停止位0(1),1(1.5),2(2)
timeout超时时间
返回:
true if 成功打开此串口
false if 打开串口失败
功能描述:
用指定的属性(串口速率、奇偶校验等)打开串口。
如果此串口空闲并且属性合理则本函数立即返回true;如果串口属性不合理则返回false;如果属性合理但是串口已经被其他进程(线程)使用,并且在 timeout时间以内串口仍然没有被释放则返回false;如果串口已经被使用,但是在timeout时间之内被释放,则返回true
如果timeout=0,则永久等待,直到串口被释放。
1.2 串口关闭
bool UART_close(int port)
输入:
port串口号0~n
返回:
true if 成功关闭
false if 关闭失败
功能描述:
关闭(释放)串口port。
如果此串口未被打开,返回false;如果此串口已经打开,则关闭之,返回true
1.3 从串口接收数据
int UART_read(int port, char *buffer, int buffersize, int timeout)
输入:
port串口号0~n
buffer接收数据缓冲区
buffersize接收缓冲区大小
timneout接收超时时间
返回:
<0出错
=0没有收到数据
>0收到数据的个数
功能描述:
从串口上接收数据放在缓冲区buffer里,收到的字节数目就是本函数的返回值。
如果串口没有被打开,或者buffer为空指针,或者buffersize为0,则返回<0;
如果串口已经有收到数据,将收到的数据填入buffer,并立即返回填入buffer的数据个数(字节计),但是最多填入buffersize个。
如果串口还没有收到数据,则等待接收数据,但最多等待timeout时间,如果仍然没有收到数据,则返回0;在等待的过程中如果来了数据,则接收他们直到这一包数据结束或者数据个数达到了buffersize,然后返回接收到的数据个数。
参数buffersize的作用是避免在填入buffer时发生溢出。
1.4 向串口发送数据
bool UART_write(int port, const char *buffer, int wlen)
输入:
port串口号0~n
buffer发送数据缓冲区
wlen发送的数据个数
返回:
true if 发送成功
false if 发送失败
功能描述:
向串口发送数据。
如果此串口未打开,或者buffer为空,或者wlen=0,立即返回false;
否则将buffer[0~wlen-1]发送到串口上,发送完成以后返回true。
1.5 清除接收缓冲区
bool UART_flush(int port)
输入:
port串口号0~n
返回:
true if 成功
false if 失败
功能描述:
清除串口此前收到的数据。
如果port未打开,返回false;否则清除此串口已经收到的数据,并返回true。