Using TTY Drivers with i386/pc386 BSP

Joel Sherrill joel.sherrill at OARcorp.com
Wed Apr 4 19:03:40 UTC 2001


configure more file descriptors.  The default is just enough
for stdin, out, and error to save memory.  Also you probably
need to increase CONFIGURE_NUMBER_OF_TERMIOS_PORTS to reflect
that you will have multiple ones open concurrently.  See

http://www.oarcorp.com/rtems/releases/4.5.0/rtemsdoc-4.5.0/share/rtemsdoc/html/c_user/c_user00379.html

for descriptions.

Mike Siers wrote:
> 
> Hi,
> I am trying to use the tty serial device drivers for the
> pc386 BSP.  The code below is my test code to open up the
> serial port, configure it, and write out some text data.
> I tested this code under OpenBSD with the exact same hardware
> and it works fine.  When I run the code under RTEMS it says
> the /dev/ttyS1 device is initialized but the open command
> fails.  Any help would be greatly appreciated.
> 
> Thanks
> Mike Siers
> 
> ===========================================================
> 
> #include <stdio.h>
> #include <string.h>
> #include <unistd.h>
> #include <fcntl.h>
> #include <errno.h>
> #include <termios.h>
> 
> #define CONFIGURE_INIT
> #include <rtems.h>
> #include <tty_drv.h>
> 
> /* functions */
> rtems_task Init(rtems_task_argument argument);
> 
> #include <bsp.h>
> 
> #define CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
> rtems_driver_address_table Device_drivers[3] = {
>   CONSOLE_DRIVER_TABLE_ENTRY,
>   TTY1_DRIVER_TABLE_ENTRY,
>   {NULL, NULL, NULL, NULL, NULL, NULL}
> };
> 
> #define CONFIGURE_MAXIMUM_TASKS             4
> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> #define CONFIGURE_EXTRA_TASK_STACKS         (3 * RTEMS_MINIMUM_STACK_SIZE)
> 
> #include <confdefs.h>
> 
> rtems_task Init(rtems_task_argument argument)
> {
>   int              i;
>   int              iStatus;
>   int              iLength;
>   int              iFile;
>   struct termios   options;
>   char            *pData  = "YEP-YEP-YEP\r\n";
> 
>   puts( "\n\n*** SERIAL TEST ***" );
> 
>   iFile = open("/dev/ttyS1", O_RDWR|O_NOCTTY);
>   if ( iFile == -1 ) {
>     puts("*** PORT /dev/ttyS1 OPEN FAILED ***");
>   }
>   else {
>     fcntl(iFile, F_SETFL, 0);
> 
>     tcgetattr(iFile, &options);
>     cfsetispeed(&options, B9600);
>     cfsetospeed(&options, B9600);
>     options.c_cflag     |=  (CLOCAL|CREAD|CS8);
>     options.c_lflag     &= ~(ICANON|ECHO|ECHOE|ISIG);
>     options.c_oflag     &= ~(OPOST);
>     options.c_cc[VMIN]  =  0;
>     options.c_cc[VTIME] =  10;
>     tcsetattr(iFile, TCSANOW, &options);
> 
>     iLength = strlen(pData);
>     for (i=0; i<20; i++) {
>       iStatus = write(iFile, (void *)pData, iLength);
>       if ( iStatus < iLength ) {
>         puts("*** PORT /dev/ttyS1 WRITE FAILED ***");
>       }
>     }
> 
>     close(iFile);
>     iFile = (int)-1;
>   }
> }
> 
> ===========================================================

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel at OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985



More information about the users mailing list