Hi, How can i use sprintf function with WinArm gcc compiler. When i try use the sprintf function , comes next error: Linking: main.elf arm-elf-gcc -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2 -DROM_RUN -Os -Wall -Wcast-align -Wcast-qual -Wimplicit -Wpointer-arith -Wswitch -Wredundant-decls -Wreturn-type -Wshadow -Wunused -Wa,-adhlns=crt0.lst -I../Common_WinARM/inc -MD -MP -MF .dep/main.elf.d crt0.o ../Common_WinARM/src/Startup.o ../Common_WinARM/src/swi_handler.o ../Common_WinARM/src/irq.o ../Common_WinARM/src/target.o ../Common_WinARM/src/timer.o main.o efsl_time_LPC.o extint.o adc.o spi.o humi.o write_sd.o --output main.elf -nostartfiles -Wl,-Map=main.map,--cref -lc -lnewlib-lpc -lm -lc -lgcc -lefsl -L../../ -TLPC2138-ROM.ld c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_close_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_fstat_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_lseek_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_read_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_sbrk_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_write_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_ioctl_r.o) does not support interworking, whereas main.elf does c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_sbrk_r.o)(_sbrk_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(freer.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(freer.o): In function `_malloc_trim_r': mallocr.c:(.text+0x2c): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_sbrk_r.o)(_sbrk_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(freer.o): thumb call to arm mallocr.c:(.text+0x3c): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_sbrk_r.o)(_sbrk_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(freer.o): thumb call to arm mallocr.c:(.text+0x48): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_fstat_r.o)(_fstat_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(makebuf.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(makebuf.o): In function `__smakebuf': makebuf.c:(.text+0x1c): warning: internal error: dangerous error makebuf.c:(.text+0xb2): undefined reference to `isatty' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_sbrk_r.o)(_sbrk_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(mallocr.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(mallocr.o): In function `_malloc_r': mallocr.c:(.text+0x2e8): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_sbrk_r.o)(_sbrk_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(mallocr.o): thumb call to arm mallocr.c:(.text+0x388): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_close_r.o)(_close_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): In function `__sclose': stdio.c:(.text+0xc): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_lseek_r.o)(_lseek_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): In function `__sseek': stdio.c:(.text+0x2a): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_lseek_r.o)(_lseek_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): In function `__swrite': stdio.c:(.text+0x6e): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_write_r.o)(_write_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): thumb call to arm stdio.c:(.text+0x86): warning: internal error: dangerous error c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_read_r.o)(_read_r): warning: interworking not enabled. first occurrence: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): thumb call to arm c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/int erwork\libc.a(stdio.o): In function `__sread': stdio.c:(.text+0xaa): warning: internal error: dangerous error c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_close_r.o): In function `_close_r': _close_r.c:(.text+0x38): undefined reference to `device_table' c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_read_r.o): In function `_read_r': _read_r.c:(.text+0xa0): undefined reference to `device_table' c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_write_r.o): In function `_write_r': _write_r.c:(.text+0xe8): undefined reference to `device_table' c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_ioctl_r.o): In function `_ioctl_r': _ioctl_r.c:(.text+0x48): undefined reference to `device_table' collect2: ld returned 1 exit status make.exe: *** [main.elf] Error 1 > Process Exit Code: 2 > Time Taken: 00:06 Thanx Timo
Timo wrote: > Linking: main.elf > arm-elf-gcc -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2 [...] > main.elf -nostartfiles -Wl,-Map=main.map,--cref -lc -lnewlib-lpc -lm -lc > -lgcc -lefsl -L../../ -TLPC2138-ROM.ld [...] > c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: > Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_close_r.o) does > not support interworking, whereas main.elf does [...] The precompiled newlib-lpc library (libnewlib-lpc.a) in the WinARM-package 6/06 does not support interwork. You can compile your own with interwork-support: - add thumb-interwork switch to the compiler-parameters in WinARM\utils\newlib_lpc*_src\makefile - rebuild the lib (make lib) - copy the ".a-file" to a location where the linker searches for libraries Hope this helps, Martin Thomas
Martin Thomas wrote: > Timo wrote: > >> Linking: main.elf >> arm-elf-gcc -mthumb -mcpu=arm7tdmi-s -mthumb-interwork -I. -gdwarf-2 > [...] >> main.elf -nostartfiles -Wl,-Map=main.map,--cref -lc -lnewlib-lpc -lm -lc >> -lgcc -lefsl -L../../ -TLPC2138-ROM.ld > [...] >> c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/bin/ld.exe: >> Warning: c:\winarm\arm-elf\bin\../lib\libnewlib-lpc.a(_close_r.o) does >> not support interworking, whereas main.elf does > [...] > > The precompiled newlib-lpc library (libnewlib-lpc.a) in the > WinARM-package 6/06 does not support interwork. You can compile your own > with interwork-support: > - add thumb-interwork switch to the compiler-parameters in > WinARM\utils\newlib_lpc*_src\makefile > - rebuild the lib (make lib) > - copy the ".a-file" to a location where the linker searches for > libraries > > Hope this helps, > Martin Thomas Hi Martin, Can you clarify me how the process goes. I'am so new with the makefiles. Timo
Hi Martin I have the same problem and I'm new to winarm. I translated a code written for Keil to winarm, but using the newlib I have some problem. In first it seems that the newlib aren't written for my processor (LPC2378). Moreover I attempt to compile with the thumb-interwork switch, but I had some problems : Where I should activate the switch in the makefile ? Moreover, before compiling with the switch I attempt to compile the library "as is", that is I entered into the directory (C:\Programmi\WinARM\utils\newlib_lpc_rel5a_src) with a dos shell and write ARMmake (I renomined the make.exe because of conflicts with the Borland C++ Builder installed on my PC). The result is: C:\Programmi\WinARM\utils\newlib_lpc_rel5a_src>armmake Touch Version 4.2 Copyright (c) 1998 Borland International arm-elf-ar cr libnewlib-lpc.a _close_r.o arm-elf-ar cr libnewlib-lpc.a _fstat_r.o arm-elf-ar cr libnewlib-lpc.a _ioctl_r.o arm-elf-ar cr libnewlib-lpc.a _lseek_r.o arm-elf-ar cr libnewlib-lpc.a _open_r.o arm-elf-ar cr libnewlib-lpc.a _read_r.o arm-elf-ar cr libnewlib-lpc.a _sbrk_r.o arm-elf-ar cr libnewlib-lpc.a sys_dev.o arm-elf-ar cr libnewlib-lpc.a sys_mam.o arm-elf-ar cr libnewlib-lpc.a sys_pll.o arm-elf-ar cr libnewlib-lpc.a sys_time.o arm-elf-ar cr libnewlib-lpc.a sys_vic.o arm-elf-ar cr libnewlib-lpc.a sys_vpb.o arm-elf-ar cr libnewlib-lpc.a uart0_poll.o /usr/bin/sed: -e expression #1, char 61: unterminated `s' command arm-elf-ld -v -otest2.prg -L. crt0.o test2.o _close_r.o _fstat_r.o _ioctl_r.o _ lseek_r.o _open_r.o _read_r.o _sbrk_r.o sys_dev.o sys_mam.o sys_pll.o sys_time.o sys_vic.o sys_vpb.o uart0_poll.o uart0_int.o uart1_poll.o uart1_int.o _write_r. o interrupt_sup.o uart0_ishell.o uart1_ishell.o -Tlpc210x.ld GNU ld version 060606 20060606 arm-elf-ld: cannot find -lgcc armmake: *** [test2.prg] Error 1 C:\Programmi\WinARM\utils\newlib_lpc_rel5a_src> As you can see it seems that the makefile starts the Borland Touch. I can't find the point in the makefile in order to correct this. Where I can find a step by step tutorial ? For a programmer that comes from Keil it's very difficult to start with WinARM. Thanks in advance for help.
Francesco Cuzzocrea wrote: > Hi Martin > I have the same problem and I'm new to winarm. I translated a code > written for Keil to winarm, but using the newlib I have some problem. In > first it seems that the newlib aren't written for my processor > (LPC2378). I guess you mean newlib-lpc not newlib. The newlib is a "generic" libc and newlib-lpc is an "add-on" to fill newlib's stubs to interface with the LPC-hardware. newlib-lpc is made be Aeolus Yes, I guess the newlib-lpc is not written for the LPC23xx/24xx. These parts use a different vector-controller which needes a slightly different setup. > Moreover I attempt to compile with the thumb-interwork > switch, but I had some problems : Where I should activate the switch in > the makefile ? Moreover, before compiling with the switch I attempt to > compile the library "as is", that is I entered into the directory > (C:\Programmi\WinARM\utils\newlib_lpc_rel5a_src) with a dos shell and > write ARMmake (I renomined the make.exe because of conflicts with the > Borland C++ Builder installed on my PC). The result is: > > C:\Programmi\WinARM\utils\newlib_lpc_rel5a_src>armmake > Touch Version 4.2 Copyright (c) 1998 Borland International Borland? Does not look good. GNU shell utils should be used (MinGW, cygwin etc). > /usr/bin/sed: -e expression #1, char 61: unterminated `s' command hmm. This does not look that good. Please check source-archive of WinARM again. There should be another makefile which I used to build newlib-lpc. > arm-elf-ld -v -otest2.prg -L. crt0.o test2.o _close_r.o _fstat_r.o > _ioctl_r.o _ > lseek_r.o _open_r.o _read_r.o _sbrk_r.o sys_dev.o sys_mam.o sys_pll.o > sys_time.o > sys_vic.o sys_vpb.o uart0_poll.o uart0_int.o uart1_poll.o uart1_int.o > _write_r. > o interrupt_sup.o uart0_ishell.o uart1_ishell.o -Tlpc210x.ld > GNU ld version 060606 20060606 > arm-elf-ld: cannot find -lgcc not good. Maybe because of fixed path-names in the original makefile from Aeolus. Try to find the other makefile and use it for another test. > As you can see it seems that the makefile starts the Borland Touch. I > can't find the point in the makefile in order to correct this. > Where I can find a step by step tutorial ? For a programmer that comes > from Keil it's very difficult to start with WinARM. Yes esp. the handling how stdio is attached to the hardware is a little different but the concept is the same. Please note that stdio-functions from the newlib need more memory than the ones from Keil's libc. If you just need sprintf without floating-point-support it might be a good idea to look for an alternate implementation which does not depend on newlib/newlib-lpc. IRC there is some code for a sprintf-replacement in the examples of the TNKernel source-package.
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.