Hallo zusammen, ich entwickle unter Linux, Eclipse, Codesourcery - gcc Version 4.6.1, gleichzeitig auch unter Atollic Lite gcc 4.5.1 (Windows). Mit Codesourcery (welches ich bevorzugen würde) habe ich folgende Probleme: * Der Code ist ca. um Faktor 2 größer als unter Atollic (ich vermute nicht verwendeter Code wird mitgelinkt) * Ab einer bestimmten Codegröße / Speichergröße funktioniert dass Programm nicht mehr (macht in main Blödsinn oder wirft schon bei der Initialisierung einen Hardfault. Da Startupfile, Linkerscript (habe ich 1:1 von Atollic für den F4xx) und Sourcecode unter Atollic und Sourcery exakt der selbe sind und unter Atollic alles problemlos läuft vermute ich den Fehler in den Compiler und Linkeroptions. Diese sehen bei mir wie folgt aus: Assembler: arm-none-eabi-gcc -x assembler-with-cpp -DSTM32F4 -Wall -Wa,-adhlns="$@.lst" -c -fmessage-length=0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mfix-cortex-m3-ldrd -mcpu=cortex-m4 -mthumb -g -gdwarf-2 C: arm-none-eabi-gcc -DSTM32F4 -O1 -Wall -Wa,-adhlns="$@.lst" -c -fmessage-length=0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mfix-cortex-m3-ldrd -mcpu=cortex-m4 -mthumb -g -gdwarf-2 Linker: arm-none-eabi-gcc -T"stm32_flash.ld" -Wl,-Map,Projekt.map -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mfix-cortex-m3-ldrd -mcpu=cortex-m4 -mthumb -g -gdwarf-2 Ich vermute den Fehler in diesen Flags. Evtl. findet wer einen Fehler oder stellt mir seine (funktionierenden) und das Linkerscript zur Verfügung. Vielen Dank im Voraus, Michael
Keine Ahnung, ob -mfix-cortex-m3-ldrd bei einem Cortex-M4 etwas bringt oder eher Schaden anrichtet. Probier doch mal ohne "-O1". Wenn schon Cortex-M4, warum dann nicht -mfloat-abi=hard? Was sagen die Register im Falle des "hard faults"? Wie sehen die Optionen bei Atollic aus? Das ist arges Gestochere. Das ganze Projekt mit Makefile, startup, linker script und Source in einem .zip wäre eine bessere Basis.
> * Der Code ist ca. um Faktor 2 größer als unter Atollic (ich vermute > nicht verwendeter Code wird mitgelinkt) Korrekt. GCC kennt die Optionen: "-ffuction-sections -fdata-sections" und mit der Linkeroption "-Wl,--gc-sections" kann man die unbenutzten Funktionen (=Sections) rauswerfen. Erfordert etwas Linkerskript Magie, wenn scheinbar unbenutzte Sachen drin bleiben sollen (Vectortabelle, Deskriptoren, Firmware Marker o.ä). Außerdem benutzt man "-Os" für minimale Codegröße. > * Ab einer bestimmten Codegröße / Speichergröße funktioniert dass > Programm nicht mehr (macht in main Blödsinn oder wirft schon bei der > Initialisierung einen Hardfault. Man gebe im Linkerskript die korrekte Größe des RAM an, und reserviere optional etwas für den Stack. Schau doch mal ins Map file. > Keine Ahnung, ob -mfix-cortex-m3-ldrd bei einem Cortex-M4 etwas bringt > oder eher Schaden anrichtet. Schaden kann es keinen anrichten. Ich sehe aber nix in den Cortex M4 Errata, was diese Option erfordern würde. Sie kann also weggelassen werden.
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.