How to add serial driver to RTEMS?
Joel Sherrill <joel@OARcorp.com>
joel.sherrill at OARcorp.com
Fri Sep 3 13:20:26 UTC 2004
Jay/Yanjun..
Is this serial driver something which should be added
to libcpu/arm?
--joel
Yanjun Luo wrote:
> Hi all,
> My serial port driver running now!
>
> Thanks for Jay's kindly help, after I clean up the code,
> I'll send a patch. If anyone what the code now, I'll send
> my mass code to him:-)
>
> As I know before, 9200's USART is very similar with DBGU,
> so I port Jay's DBGU code to support USART, acctually I
> only changed part of the DBGU'd driver.
>
> Regards,
> Yanjun Luo.
>
>
> On Wed, 1 Sep 2004 23:46:06 -0500, Jay Monkman wrote
>
>>On Wed, Sep 01, 2004 at 07:14:27PM +0800, Yanjun Luo wrote:
>>
>>>my code:
>>>-----------------------------------------------------------------
>>>#define TEST_STRING "This is only a USART test!\n"
>>>
>>> fd0 = fopen ("/dev/console", O_RDWR);
>>> if(fd0 == -1) printf("/dev/console open failed!!\n");
>>> else
>>> printf("console opened!\n");
>>> fwrite(TEST_STRING,1,sizeof(TEST_STRING),fd0);
>>>-----------------------------------------------------------------
>>
>>This is wrong. The second argument to fopen() is a string, like "r+"
>>or "a". You are using the argument for open(), which takes a number.
>>
>>fopen() returns a FILE*, and open() returns an int. On failure, fopen
>>returns a NULL, so your test (fd0 == -1) is wrong.
>>
>>Your call to open() probably failed because you didn't increase the
>>maximum number of file descriptors. The default is 3, just enough for
>>stdin, stdout, and stderr. You set the value by defining
>>CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS before #include-ing
>>confdefs.h.
>>
>>Here's my test program:
>>
>>#include <bsp.h>
>>#include <stdlib.h>
>>#include <stdio.h>
>>#include <stdlib.h>
>>#include <errno.h>
>>#include <sys/types.h>
>>#include <sys/stat.h>
>>#include <fcntl.h>
>>#include <string.h>
>>
>>rtems_task Init(
>> rtems_task_argument ignored
>>)
>>{
>> int fd;
>> extern int errno;
>> FILE *fp;
>> char string[] = " testing ... 1 ... 2 ... 3\n";
>>
>> printf("Starting test\n");
>>
>> printf("Trying open()\n");
>> fd = open("/dev/console", O_RDWR);
>> if (fd < 1) {
>> printf("open() returned an error (%d). errno = %d\n",
>> fd, errno);
>> } else {
>> printf("Going to write() to /dev/console\n");
>> write(fd, string, strlen(string));
>> close(fd);
>> }
>> printf("open() done\n");
>>
>> printf("Trying fopen()\n");
>> fp = fopen("/dev/console", "r+");
>> if (fp == NULL) {
>> printf("fopen() returned NULL. errno = %d\n", errno);
>> } else {
>> printf("Going to fwrite() to /dev/console\n");
>> fwrite(string, strlen(string), 1, fp);
>> fclose(fp);
>> }
>> printf("fopen() done\n");
>>
>> exit( 0 );
>>
>>}
>>
>>/* configuration information */
>>
>>#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 10
>>
>>#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
>>
>>#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>>
>>#define CONFIGURE_MAXIMUM_TASKS 1
>>
>>#define CONFIGURE_INIT
>>
>>#include <confdefs.h>
>
>
--
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