<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hello world\n<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m observing a 256 byte input limit with RTEMS 5 on riscv that I don’t know how to overcome.<o:p></o:p></p>
<p class="MsoNormal">We are using the RTEMS console driver and newlib stdio.<o:p></o:p></p>
<p class="MsoNormal">The effect is that an fgets() appears to only accept 256 characters, specifically if we connect via<o:p></o:p></p>
<p class="MsoNormal">picocom on a Linux box, we can type exactly 256 chars and then no more characters are accepted.<o:p></o:p></p>
<p class="MsoNormal">My first guess was that stdio buffers are 256 byte by default, which they seem to be judging from<o:p></o:p></p>
<p class="MsoNormal">grepping for BUFSIZ. Then using setvbuf should be the way to increase their size. But setvbuf had no effect.<o:p></o:p></p>
<p class="MsoNormal">Next guess was that it is a limit of picocom. So we tried using Python with pyserial to send data.<o:p></o:p></p>
<p class="MsoNormal">Same problem.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here’s a complete RTEMS application that has this issue. How can we increase the input buffer size?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#include <rtems.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#include <stdio.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#include <string.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">/*<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">* RTEMS OS Configuration definitions<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">*/<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_INIT<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_INIT_TASK_STACK_SIZE 24576<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_INIT_TASK_ATTRIBUTES     RTEMS_FLOATING_POINT<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_MAXIMUM_TASKS 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_RTEMS_INIT_TASKS_TABLE<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_MAXIMUM_DRIVERS                      10<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#define CONFIGURE_MAXIMUM_USER_EXTENSIONS               2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#include <rtems/shellconfig.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">#include <rtems/confdefs.h><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rtems_task Init(rtems_task_argument aUnused);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">rtems_task Init(rtems_task_argument aUnused) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    char    i_buf[1536];<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    char    o_buf[1536];<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    printf("Welcome!\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    if (setvbuf(stdin, i_buf, _IONBF, sizeof i_buf) != 0) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        printf("setvbuf i buf failed.\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    if (setvbuf(stdout, o_buf, _IONBF, sizeof o_buf) != 0) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        printf("setvbuf o buf failed.\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    rtems_task_wake_after(10);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    fflush(stdout);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    for (;;) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        printf(">> ");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        char    command_line[1536];<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        if (fgets(command_line, sizeof command_line, stdin) == NULL) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">            printf("fgets returned NULL\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">            break;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">        printf("%zu bytes: %s\n", strlen(command_line), command_line);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">    (void) rtems_task_delete(RTEMS_SELF);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Courier New"">}<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="1"><br>
Tesat-Spacecom GmbH & Co. KG<br>
Sitz: Backnang; Registergericht: Amtsgericht Stuttgart HRA 270977<br>
Persoenlich haftender Gesellschafter: Tesat-Spacecom Geschaeftsfuehrungs GmbH;<br>
Sitz: Backnang; Registergericht: Amtsgericht Stuttgart HRB 271658;<br>
Geschaeftsfuehrung: Dr. Marc Steckling, Kerstin Basche, Ralf Zimmermann<br>
</font><br>
<img src="https://www.tesat.de/images/footer.jpg" width="680" height="194" alt="banner">
</body>
</html>