Component之SIO

2019-07-10 15:29:06 浏览数 (1)

组件INCLUDE_SIO,Serial IO,串口IO

包含了它之后,VxWorks就会调用usrSerial.c的usrSerialInit()来加载串口设备

通常BSP里都会把N_UART_CHANNELS定义为2,所以VxWorks启动后,就可以看到两个串口了

如果没有包含组件INCLUDE_PC_CONSOLE,VxWorks还会把第CONSOLE_TTY(0)个串口当作系统的标准IO设备,默认波特率是CONSOLE_BAUD_RATE(9600)。这样的话,printf()的结果就会从串口0输出。不过在X86的设备里,通常还是用pcConsole来做系统的标准IO,printf()的结果也就是从显卡输出了

如果Target没有网卡或者没有网卡驱动,在开发过程中,可以通过串口连接WDB,也就是用串口来进行调试。默认用的是WDB_TTY_CHANNEL(1),因此Target最好至少有两个串口。不过串口的传输速率比网卡慢很多,调试起来是很吃力的

我当前的Target是X86的CPU,VxWorks镜像包含了PC console组件,并使用END连接WDB,因此两个串口都是空闲的。

串口是以字节为单位来传输数据的,接下来看看应用层怎么操作它吧。

用串口线把VxWorks的串口0与Host的串口连接起来,Host端打开一个串口工具,例如我Windows端用的PuTTY,串口的配置一般就是用默认值:波特率9600,数据位8,停止位1,奇偶校验无,流控无

因为VxWorks在初始化串口时,一般用的初值也是这样的

直接在Shell里试试吧

Host的串口工具里就可以收到字符串hello了

还是写段代码吧: 这段代码打开串口,读取串口的默认配置,然后发送一段字符

执行结果为

再跑一个接收的例子

从Host端的串口工具里输入一些字符,以'q'结束

这个例子很简单,只是把接收到的信息,用printf()打印出来。在具体项目里就要用更复杂的操作来代替printf()了

最后看看串口的ioctl()都支持那些操作,例如可以用SIO_BAUD_SET或FIOBAUDRATE来设置波特率

如果想要自己扩展串口的功能,可以在驱动文件的ioctl函数添加分支,编号至少从0x100a开始

这正是:

VX默认俩串口(/tyCo/x),可做系统I与O(no PC Console)。

默认配置最常用(CS8),更多功能见Control(ioctl)。

0 人点赞