Hallo Zusammen, ich versuche gerade einen ADC auszulesen und das Ergebnis über den UART zu schicken. (Ähnlich wie das bei einem Beispiel auf der nxp-Seite gezeigt wird.http: //www.standardics.nxp.com/support/documents/microcontrollers/pdf/tn06004 .pdf ). Dazu habe ich einen Feld definiert, in den ich die Zeichenkette mit sprintf() einlese. Das klappt auch so lange, wie ich nur einen fest definierten Zeichensatz ausgebe. Sobald ich jedoch die Werte des ADC einlesen will (mit %2.2f) bekomme ich beim Compilieren den angehängten Fehler: Ich arbeite mit dem YAGARTO-IDE (Eclipse). Seltsam an der Sache ist, dass ich nirgends das Verzeichnis "newlib-1.14.0" finden kann. Nach ein wenig suchen im Netz, habe ich diese auch gefunden (http://sourceware.org/newlib/), weiss aber leider nicht, wie ich diese unter Windows und Eclipse einbinden bzw. kompilieren soll. Ich bin um jede Hilfe und jeden Hinweis dankbar. beste Grüße Thomas ... arm-elf-gcc -c -mcpu=arm7tdmi -O0 -gdwarf-2 -mthumb-interwork -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm -Wa,-ahlms=src/adc.lst -MD -MP -MF .dep/adc.o.d -I . -I ./inc src/adc.c -o src/adc.o arm-elf-gcc ./src/crt.o ./src/main.o ./src/time.o ./src/serial.o ./src/blinky.o ./src/adc.o -mcpu=arm7tdmi -nostartfiles -T./prj/olimex_lpce2294_ram.ld -Wl,-Map=test.map,--cref,--no-warn-mismatch -o test.elf c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: region ram is full (test.elf section .text) c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: section .text [40000000 -> 40008a2b] overlaps section .data [40000000 -> 40000823] c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: section .bss [40000824 -> 400011ff] overlaps section .text [40000000 -> 40008a2b] c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: test.elf: section .text lma 0x40000000 overlaps previous sections c:/programme/yagarto/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/li b\libc.a(syscalls.o): In function `_sbrk': ../../../../../../newlib-1.14.0/newlib/libc/sys/arm/syscalls.c:500: undefined reference to `end' collect2: ld returned 1 exit status make: *** [test.elf] Error 1 make: Target `all' not remade because of errors. Der Quellcode, an dem es wohl scheitert ist folgender: ... char hallo[100]; Value1 = ADC_read(1); //Convert AIN0 word=((double)Value1) * (3.3/1024); counter = sprintf(hallo, "%2.2f", word) ; //Die einzelne char-Zeichen senden. while(i<counter) { putchar_1(hallo[i]); i++; } ....
Thomas wrote: >...Ich arbeite mit dem YAGARTO-IDE (Eclipse). > Seltsam an der Sache ist, dass ich nirgends das Verzeichnis > "newlib-1.14.0" finden kann. Nach ein wenig suchen im Netz, habe ich > diese auch gefunden (http://sourceware.org/newlib/), weiss aber leider > nicht, wie ich diese unter Windows und Eclipse einbinden bzw. > kompilieren soll. Ich bin um jede Hilfe und jeden Hinweis dankbar. Newlib ist in Yagarto bereit enthalten (die Dateien heissen libc.a und libm.a (für verschiedene Varianten). > In function `_sbrk': > ../../../../../../newlib-1.14.0/newlib/libc/sys/arm/syscalls.c:500: > undefined reference to `end' Im Linkerscript muss ein "end" bereitgestellt werden, welche die Startaddresse des Heaps festlegt (sbrk ist die "Verbindung" der libc zum Heap-Speicher. Üblicherweise durch eine Zeile PROVIDE (end = .); je nach Memory-Layout nach der Linker-Section für .bss oder die stacks. Martin Thomas
Hallo Martin, vielen Dank für die Hilfe. Zumindest tritt der Fehler jetzt nicht mehr auf. Allerdings überschreibe ich wohl mehrmals den gleichen RAM? Zumindest laut Fehlermeldung: c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: region ram is full (test.elf section .text) c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: section .text [40000000 -> 40008a2b] overlaps section .data [40000000 -> 40000823] c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: section .bss [40000824 -> 400011ff] overlaps section .text [40000000 -> 40008a2b] c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: test.elf: section .text lma 0x40000000 overlaps previous sections Ich verwende das Linker-Script, welches auf der Yagarto-Seite mit dem Test-Projekt "LPC2294Test.zip" dabei ist (Vgl. Anhang). Ich habe zwar nicht das Olimex-Board , sondern das von Phytec (lpc2295). woran kann das liegen. Bzw. wo finde ich Infos, um als "Laie" das Linker-Script anpassen kann. Vielen Dank schon einmal. Beste Grüße Thomas
c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: region ram is full (test.elf section .text) c:\programme\yagarto\bin\..\lib\gcc\arm-elf\4.1.1\..\..\..\..\arm-elf\bi n\ld.exe: section .text [40000000 -> 40008a2b] overlaps section .data [40000000 -> 40000823] Sieht nach einem Linker-Skript aus, das auch den Programmcode in einen internen RAM-Speicherbereich legt (.text ab 0x40000000). Typisches Script für "RAM"-Debugging (da kein Flashen nötig weniger Einschränkgungen bei Breakpoints).stdio-Funktionen der newlib sind recht speicherhungrig, interner RAM-Speicher wohl zu klein dafür. Möglichkeiten u.a. - Code in Flash-Speicher (Debugging "über JTAG" mühseliger) - keine Fliesskommaformate in printf nutzen (als Integers vorberechnen): isprintf statt sprintf spart dann ein paar kB, evtl. dann sogar ganz auf stdio verzichten... - kompakte ftoa-Funktion suchen und ausgabe per "uart_puts" - vgl. Artikelsammlung Festkommaarithmetik Martin Thomas
Vielen dank, ich werde es gleich mal ausprobieren. Beste Grüße Thomas
Hallo, bin gerade auf diesen Forumbeitrag gestoßen. Diesen Part versteh ich aber leider nicht: Im Linkerscript muss ein "end" bereitgestellt werden, welche die Startaddresse des Heaps festlegt (sbrk ist die "Verbindung" der libc zum Heap-Speicher. Üblicherweise durch eine Zeile PROVIDE (end = .); je nach Memory-Layout nach der Linker-Section für .bss oder die stacks. Ich benutze ein AT91 von ATMEL sowie die libc.a! Mein Basispaket mit Linker usw habe ich aus einem Projekt namens "Using Open Source Tools for AT91SAM7S Cross Development revision C" dort lagen ein paar Beispiele bei. Yagarto - Ecplise ebenso. Hat jemand einen Tip? Vielen Dank im voraus. Tobias
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.