newlib printf problem with floating point

OP #1174395
Hello,

I am learning WinARM and newlib, I am using WinARM version 20060606, and
my target board is Keil MCB2300 demo board with LPC2387.

The attached file is my source code, my project is modify from
http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/lpc2378_demo1_20070629.zip,
I add the syscall.c for newlib, it works fine to print integer to COM0
or COM1, but it doesn’t work with floating point (e.g. printf(“%f”,
3.14);), the processor always crash when I print a floating point.
(sorry, I can’t sure what happen because I don’t have a JTAG debugger, I
guess the program is dead because the LED doesn’t blinking anymore.)

Could there something be wrong with the syscall.c?

One more question, does newlib-lpc library can support LPC23XX serial?

compiler message as below:
-------- begin (mode: ROM_RUN) --------
arm-elf-gcc (GCC) 4.1.1 (WinARM)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.


Assembling (ARM-only): Common/src/Startup.S
arm-elf-gcc -c -mcpu=arm7tdmi-s -mthumb-interwork -I. -x
assembler-with-cpp -DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__
-Wa,-adhlns=Common/src/Startup.lst,-gdwarf-2 Common/src/Startup.S -o
Common/src/Startup.o

Assembling (ARM-only): Common/src/swi_handler.S
arm-elf-gcc -c -mcpu=arm7tdmi-s -mthumb-interwork -I. -x
assembler-with-cpp -DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__
-Wa,-adhlns=Common/src/swi_handler.lst,-gdwarf-2
Common/src/swi_handler.S -o Common/src/swi_handler.o

Compiling C: main.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=main.lst  -ICommon/inc -Wcast-qual -MD -MP -MF .dep/main.o.d
-Wnested-externs  -std=gnu99 -Wmissing-prototypes  -Wstrict-prototypes
-Wmissing-declarations main.c -o main.o
main.c: In function 'main':
main.c:99: warning: unused variable 'f'
main.c:127: warning: 'errno' is used uninitialized in this function

Compiling C: fio.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=fio.lst  -ICommon/inc -Wcast-qual -MD -MP -MF .dep/fio.o.d
-Wnested-externs  -std=gnu99 -Wmissing-prototypes  -Wstrict-prototypes
-Wmissing-declarations fio.c -o fio.o

Compiling C: uart.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=uart.lst  -ICommon/inc -Wcast-qual -MD -MP -MF .dep/uart.o.d
-Wnested-externs  -std=gnu99 -Wmissing-prototypes  -Wstrict-prototypes
-Wmissing-declarations uart.c -o uart.o

Compiling C: syscall.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=syscall.lst  -ICommon/inc -Wcast-qual -MD -MP -MF
.dep/syscall.o.d -Wnested-externs  -std=gnu99 -Wmissing-prototypes
-Wstrict-prototypes -Wmissing-declarations syscall.c -o syscall.o
syscall.c:45: warning: no previous prototype for '_read_r'
syscall.c:50: warning: no previous prototype for '_write_r'
syscall.c:55: warning: no previous prototype for '_open_r'
syscall.c:79: warning: no previous prototype for '_close_r'
syscall.c:84: warning: no previous prototype for '_lseek_r'
syscall.c:89: warning: no previous prototype for '_fstat_r'
syscall.c:136: warning: no previous prototype for '_sbrk_r'
syscall.c: In function 'com1_write_r':
syscall.c:162: warning: pointer targets in passing argument 2 of
'UARTSend' differ in signedness
syscall.c: In function 'com0_write_r':
syscall.c:196: warning: pointer targets in passing argument 2 of
'UARTSend' differ in signedness

Compiling C: Common/src/timer.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=Common/src/timer.lst  -ICommon/inc -Wcast-qual -MD -MP -MF
.dep/timer.o.d -Wnested-externs  -std=gnu99 -Wmissing-prototypes
-Wstrict-prototypes -Wmissing-declarations Common/src/timer.c -o
Common/src/timer.o

Compiling C: Common/src/target.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=Common/src/target.lst  -ICommon/inc -Wcast-qual -MD -MP -MF
.dep/target.o.d -Wnested-externs  -std=gnu99 -Wmissing-prototypes
-Wstrict-prototypes -Wmissing-declarations Common/src/target.c -o
Common/src/target.o

Compiling C: Common/src/irq.c
arm-elf-gcc -c -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=Common/src/irq.lst  -ICommon/inc -Wcast-qual -MD -MP -MF
.dep/irq.o.d -Wnested-externs  -std=gnu99 -Wmissing-prototypes
-Wstrict-prototypes -Wmissing-declarations Common/src/irq.c -o
Common/src/irq.o

Linking: main.elf
arm-elf-gcc -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2
-DROM_RUN -D__WinARM__ -D__WINARMSUBMDL_LPC2378__  -Os -Wall
-Wcast-align -Wimplicit  -Wpointer-arith -Wswitch -ffunction-sections
-fdata-sections -Wredundant-decls -Wreturn-type -Wshadow -Wunused
-Wa,-adhlns=Common/src/Startup.lst  -ICommon/inc -Wcast-qual -MD -MP -MF
.dep/main.elf.d Common/src/Startup.o  Common/src/swi_handler.o   main.o
fio.o uart.o syscall.o Common/src/timer.o Common/src/target.o
Common/src/irq.o     --output main.elf -nostartfiles
-Wl,-Map=main.map,--cref,--gc-sections -lc  -lm  -L../arm-elf/lib
-lnosys -TCommon//LPC2378-ROM.ld

Creating load file for Flash: main.hex
arm-elf-objcopy -O ihex main.elf main.hex

Creating load file for Flash: main.bin
arm-elf-objcopy -O binary main.elf main.bin

Creating Extended Listing: main.lss
arm-elf-objdump -h -S -C main.elf > main.lss

Creating Symbol Table: main.sym
arm-elf-nm -n main.elf > main.sym

Size after:
main.elf  :
section            size         addr
.text             12712            0
.data              2104   1073741824
.bss                204   1073743928
.stack             1024   1073744384
.comment            918            0
.debug_aranges      680            0
.debug_pubnames     924            0
.debug_info        9787            0
.debug_abbrev      2195            0
.debug_line        2272            0
.debug_frame        996            0
.debug_str         2324            0
.debug_loc         2816            0
.debug_ranges        48            0
Total             39004



Errors: none
-------- end --------

Thanks for any help.
Batoo
Attached files:
OP
Batoo Lee wrote:

Hi everyone,

I can printf float/double well finally,
in the past few days I studied uC/OS-II and
changed processor mode form USER to SVC mode,
and the printf works well with float/double.
so I guess newlib needs run in privileged mode.
OP
Clifford Slocombe wrote:
> Batoo Lee wrote:
>> so I guess newlib needs run in privileged mode.
>
> Not in my experience.

Hi Clifford,
I check this problem again,
you are correct.
The problem doesn't cause by operating mode,
the problem is the stack size too small,
originally the stack size is 0x100,
and I change it to 0x400 can fix the problem.
Thank you,
Batoo
Batoo Lee wrote:

> the problem is the stack size too small,
> originally the stack size is 0x100,
> and I change it to 0x400 can fix the problem.

Ah! Sorry, should have noticed that, formatted I/O does need about 4k
for stack.

Reply

A question of your own? This thread is over 18 years old. Ask it in a thread of its own – more people read along there, and it gets answered more often and sooner.

Start a new thread

A fix, an addition or feedback on this thread? Then reply here.

Formatting
  • [c]C-Code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.