printf() woes

Jeff Johnston
Wed Jan 30 23:34:00 GMT 2008

Rick Mann wrote:
> On Jan 30, 2008, at 11:10 AM, Jeff Johnston wrote:
>> Rick Mann wrote:
>>> Hi. I'm using newlib 1.14 on an Atmel ARM processor, and printf() is 
>>> behaving strangely.
>>> The following code
>>>    printf("1. Hello worldCRLF1\r\n");
>>>    printf("2. Hello worldCRLF\r\n");
>>>    printf("3. Hello worldCRLF\r\nHello worldCRLF\r\n");
>>>    printf("4. Hello worldLF\nHello worldLF\n");
>>>    printf("5. Hello worldNULL");
>>>    printf("6. Hello worldLF\n");
>>> prints:
>>> 3. Hello worldCRLF1
>>> 4. Hello worldLF
>>>                Hello worldLF6. Hello worldLF
>>> Using snprintf() works just fine.
>> Did you attempt to write the result out?
> I'm not sure I understand what you mean. I put, in the original post, 
> the output of those lines of code. It fails to print many of them.

What I meant is did you output the snprintf() output to the terminal
(e.g. via write syscall) to see what that output produces on the 
terminal.  It may not be newlib's problem.

>>> Newlib's printf() is doing something with newlines, and printf() 
>>> calls without newline, and not handling it the way I really want. 
>>> Perhaps it's a configuration things somewhere, but I don't really 
>>> know where to look.
>>> Any suggestions?
>> I would suggest upgrading to newlib 1.16.0 to see if any fixes were 
>> made that solve your problem.  Looking through the ChangeLog, none are 
>> obvious, but it still helps to be current so others can better help you.
> Is there a way to upgrade newlib without rebuilding all of gcc?

Yes.  You can build newlib in a separate build directory.  Just make 
sure you have installed all the cross-tools (including gcc) somewhere 
and put the install dir on your path.

>> Next, I would suggest debugging inside _sfvwrite() to see what it 
>> thinks it is doing.  I would also suggest putting breakpoints inside 
>> the _write syscall to see what it is being called with each time.  
>> This should help you pinpoint the problem.
> Sadly, I have no debugging capabilities right now (other than printf--ha!).

Ok, use the write syscall to fd 2.

-- Jeff J.

More information about the Newlib mailing list