sylixos和其他类Unix操作系统一样,遵从一切皆文件的原则,会把各种设备抽象为设备文件。
uart设备在sylixos下会抽象为一个tty字符设备文件,文件名形如: /dev/ttyS0。那么对uart设备的调用就是对文件/dev/ttyS0的访问,而对文件的访问就离不开io五件套open,close,read,write和ioctl。相比于其他文件,对ttyS0的操作主要是ioctl命令会有些区别,其他接口用法则完全一样。主要的控制命令有设置串口波特率和设置帧格式。
一个最简单的串口应用例程如下,它会打开串口"/dev/ttyS1",配置其为8位数据位,无校验位,1位停止位,无流控,波特率为115200。无线循环中会读取接收到数据并原样发送出去。
基本流程说明见《串口应用的基本流程》。
/*********************************************************************************************************
**
** 中国软件开源组织
**
** 嵌入式实时操作系统
**
** SylixOS(TM)
**
** Copyright All Rights Reserved
**
**--------------文件信息--------------------------------------------------------------------------------
**
** 文 件 名: uartExample.c
**
** 创 建 人: Hou.JinYu (侯进宇)
**
** 文件创建日期: 2018 年 01 月 11 日
**
** 描 述: 串口示例程序,收到一组数据后将此组数据通过串口返回
*********************************************************************************************************/
#include <SylixOS.h>
/*********************************************************************************************************
宏定义
*********************************************************************************************************/
#define BUF_SIZE (512)
#define DEV_NAME "/dev/ttyS1"
/*********************************************************************************************************
** 函数名称: main
** 功能描述: 程序入口
** 输 入: argc 参数个数
** argv 参数列表
** 输 出: ERROR_CODE
*********************************************************************************************************/
int main(int argc, char *argv[])
{
int iFd;
char pcBuff[BUF_SIZE];
ssize_t sstReadLen;
/*
* 打开串口设备
*/
iFd = open(DEV_NAME, O_RDWR);
if (iFd < 0) {
return (-1);
}
/*
* 设置串口属性
* 波特率为 : 115200
* 硬件选项为: 8位数据位, 一位停止位,无校验
*/
ioctl(iFd, SIO_BAUD_SET, SIO_BAUD_115200);
ioctl(iFd, SIO_HW_OPTS_SET, CREAD | CS8);
/*
* 读取输入串口的数据,并原样发送出去
* 注意,默认情况下,读写都可能会阻塞
*/
while (1) {
sstReadLen = read(iFd, pcBuff, BUF_SIZE);
write(iFd, pcBuff, sstReadLen);
}
/*
* 关闭串口设备
*/
close(iFd);
return (0);
}
/*********************************************************************************************************
END
*********************************************************************************************************/