SylixOS应用层中访问串口设备

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
*********************************************************************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ScilogyHunter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值