Ich habe ein LPC4088QSB von EA und darauf eine Beispiel App mit mbed und der freien Segger emWin Grafiklib laufen. Das Ganze mit dem mbed Online Compiler funktioniert auch nach einer Anleitung auf der mbed site. Dazu muss man die emWin lib von lpcware.com runterladen die nur als kompiliertes Archiv in der kostenlosen Version verfügbar ist. Die Lib ist mit hardware floating point Unterstützung kompiliert, aber da gibt es ja auch noch die Varianten abi-hard und abi-soft. Wenn ich zum Debuggen das Projekt nun für LPCXpresso exportiere meckert der Linker weil die 'floating point usage' nicht passen: 'my program uses VFP registers, libemWin_m4pf does not'. Der Linker weiss also wie die calling convention aussieht, und meine Frage ist nun: wie komme ich an diese Info wenn ich eine Lib oder ein objectfile habe? Ich habe schon die tools wie ar und objdump auf die Lib losgelassen, finde da aber keine Option die mir Infos liefert wie die Quellen compiliert wurden.
>Ich habe schon die tools wie ar und objdump auf die Lib >losgelassen, Wozu? >Varianten abi-hard und abi-soft. Stell nacheinander beide mal ein. Bei einer wirds schon klappen. Muss man da so einen Film von drehen?
Die soft Variante funktioniert, aber erst nachdem ich die mbed quellen runtergeladen habe und die mbed lib auch mit der soft variante erstellt hatte. Und merkwürdigerweise schluckt der mbed Online Compiler die emWin lib obwohl der eigentlich mit der hard Variante arbeitet. Da bin ich neugierig und möchte wissen warum das so ist. Richtig rund lief das auch erst mit -O2 Compiler Option, ohne gab es hard faults in printf oder einfachen FP Operationen.
Probier mal
1 | arm-none-eabi-readelf -A datei.o |
Die Zeile mit "Tag_ABI_VFP_args:" gibt Aufschluss.
danke, das geht doch schon mal in die richtige Richtung. Die VFP_Args werden allerdings nicht gelistet, dann wird es irgendein default sein?
1 | Attribute Section: aeabi |
2 | File Attributes |
3 | Tag_CPU_name: "Cortex-M4" |
4 | Tag_CPU_arch: v7E-M |
5 | Tag_CPU_arch_profile: Microcontroller |
6 | Tag_THUMB_ISA_use: Thumb-2 |
7 | Tag_ABI_PCS_wchar_t: 4 |
8 | Tag_ABI_FP_denormal: Needed |
9 | Tag_ABI_FP_exceptions: Needed |
10 | Tag_ABI_FP_number_model: IEEE 754 |
11 | Tag_ABI_align_needed: 8-byte |
12 | Tag_ABI_align_preserved: 8-byte, except leaf SP |
13 | Tag_ABI_enum_size: small |
14 | Tag_ABI_optimization_goals: Aggressive Size |
15 | Tag_CPU_unaligned_access: v6 |
Jojo S. schrieb: > Die VFP_Args > werden allerdings nicht gelistet, dann wird es irgendein default sein? Dann ists vermutlich soft, also Übergabe nicht über die FPU-Register, weil das würde angezeigt.
ja, das kann ich jetzt nachvollziehen: der vorherige elf-output wurde mit den Compiler Optionen "-mfpu=fpv4-sp-d16" und "-mfloat-abi=soft" generiert. mit "-mfpu=fpv4-sp-d16" und "-mfloat-abi=hard" kommen die VFP Tags hinzu:
1 | Tag_ABI_HardFP_use: SP and DP |
2 | Tag_ABI_VFP_args: VFP registers |
Der mbed Online Compiler kommt trotzdem mit der soft-lib klar, d.h. die linken gegen eine soft-mbed lib oder kann der Linker stubs zur Konvertierung einfügen? In den LPCXpresso Einstellungen habe ich soetwas jedenfalls nicht gefunden.
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.