FreeBSD programming question

Malcolm Kay malcolm.kay at internode.on.net
Wed Aug 6 06:58:45 PDT 2003


On Wed, 6 Aug 2003 07:00, J. Seth Henry wrote:
> Not sure if this is the right list or not, but I could really use some
> pointers.
>
> How can I code trap serial port interrupts in my C program?
>

For any modern hosted system interrupt trapping and servicing is in the 
province of the system -- it should not be a userland activity.

> For example, I want to read values from a serial device every
> user-specified number of seconds, calculate some stuff and then sit for
> a while. Should the serial device decide it wants to send some data
> unsolicited, I would like to enter an interrupt service routine, handle
> the communication, and then return to the previous loop.

There are a number of techniques which may or may not suit your needs;
it is not too clear just what you are trying to do.

Generally the system will provide some buffering of input so it is not usually
important that your code processes each character immediately on arrival.

In many cases using placing the select(2) system call in a loop will meet the 
needs.

In more difficult cases you may need to look at threading pthread(3) or 
forking fork(2) or vfork(2)

>
> I can get the loop going by using sleep(n), but I don't know how to
> write the ISR in C, and (additionally) make it such that it will run on
> any *nix like platform.

You might be able to do something at system level by adding your driver to the 
kernel possibly as a kernel module. This is not generally the way to go if 
userland alternatives work and it certainly will be very operating system and 
platform specific possibly even requiring significant editing from one OS 
version to the next.

>
> Any pointers, HOWTO's, or examples would be greatly appreciated!
>
> Thanks,
> Seth
>

Malcolm Kay


More information about the freebsd-questions mailing list