串口的简单问题

向老师请教,是不是我在buildfile里加了devb-ser8250这个串口驱动,就是有了/dev/ser1,然后我就可以在应用程序中利用open、read、write这样的函数和tcsetattr设置串口参数来实现串口通信了呢,可为什么有的时候在一些文章中看到有的人却不用这些系统提供的函数,而自己对地址进行in8和out8来实现打开和读写呢?他们为什么要这么做呢?自己是个菜鸟,希望老师能给予帮助,非常感激。

对,当然先决条件是板子上有8250芯片。

用in8/out8自己实现的情形,或者是因为他们的芯片与8250不完全兼容,或者是他们的芯片有特殊的功能,需要自己来控制。

谢谢老师,那也就是说,当他们的芯片与8250不完全兼容,这时他们要实现串口通信,就要他们自己写驱动,实际上他们用in8/out8写的实现读写的函数与支持8250芯片的devb-ser8250做的是一样的事情,只是devb-ser8250是QNX公司已经写好并为我们封装好的了,然后提供了外部的接口,比如open、read、write之类的,我们直接用就行了,不用管内部具体的东西。老师可以这么理解吗?还有比如我想当串口有数据来的时候,就用中断通知我,则我interruptattach()应该写在程序的什么地方呢,是open()之后吗?麻烦老师了。

“驱动”的意思,是一个程序,它负责管理相应的硬件,同时向用户程序提供一个统一的,使用这个硬件的接口。

“用中断来通知”应用程序的想法是不正确的。“中断”通常是为了控制硬件的驱动程序用的,使用硬件的用户程序是不应该知道硬件的具体细节的。否则你的用户程序就只能在某一个板子的某一个特定芯片上工作。

如果你的应用程序需要“有数据来时,就通知我”的话,就要使用驱动提供的接口。具体来说,可以用 select(),也可以直接read()

谢谢老师为我答疑解惑:)