Forum: Compiler & IDEs ARM C-Compiler


von Jürgen (Gast)


Lesenswert?

Hallo,

ich beabsichtige von meinem doch sehr betagten 8051 auf ARM Cortex 
umzusteigen, die Entwicklung ging mit dem Keil Compiler und Brendes 
Emulator eigentlich recht komfortabel aber ich bin jetzt doch auf seine 
(8051) Grenzen gestoßen. (Touch Screen SD Card etc.)
Ich habe mich jetzt mal nach einer komfortablen und vor allem 
bezahlbaren Entwicklungsumgebung umgeschaut und bin auf den 
MikroElektronika
mikroC PRO for ARM http://www.mikroe.com/mikroc/arm/ gestoßen
der in Deutschland vertrieben für 252.-€ von 
http://www.tigal.com/lang/DE  vertrieben wird.
Die haben auch genau die „Platine“ die mir so vorschwebt (mikromedia for 
Stellaris/STM32 M3/STM32 M4.
Meine Frage: hat jemand von Euch diesen Compiler in Gebrauch und kann 
dazu etwas sagen?
Ich setze ihn nur für private zwecke ein.
Gruß Jürgen

: Verschoben durch Admin
von W.S. (Gast)


Lesenswert?

Ach, die haben auch ein Mikro-Pascal im Angebot. Nett, aber kann auch 
keine SVC's.

Mein Rat: Lade dir zu allererst die Demoversion des Keil für Arm 
herunter. Die ist erstmal gut für 32 K Code (glaub ich..) und es ist ein 
fähiger Compiler, mit dem man die Features der Hardware auch wirklich 
benutzen kann. Du kannst ja später dir ne Demo eines anderen Compilers 
besorgen und mal gegen den dir dann schon bekannten Keil testen. Häufig 
genug stecken bei anderen Angeboten nur eine IDE plus GCC dahinter. Ich 
hatte bei der "Lernbetty" hier im Forum diverse Grrrr-Momente mit dem 
GCC erlebt: keine Pragmas, umständliche Interrupt-Deklarationen, 
überhaupt keine SVC's (!!!), undokumentierte Seltsamkeiten beim Linken, 
kurzum mein Rat: Lern als Maßstab erstmal die originalen ARM-Tools 
kennen und teste dann das, was du dir evtl. kaufen willst.

Nebenbei: Es ist ja nicht mehr lange hin bis zur nächsten Embedded, wo 
man sowas auch mal aus der Nähe sehen kann vor dem Kauf.

W.S.

von Jürgen (Gast)


Lesenswert?

eigendlich wollte ich keine odyssee starten und diverse Compiler 
"durchprobieren". Selbst wenn der Keil mit Abstand der beste ist wäre 
für mich einfach zu teuer. ich wollte nur wissen ob jemand besagten 
Compiler verwendet oder schon benutzt hat und einigermassen einstufen 
kann in brauchbar oder Finger weg.
Jürgen

von A. B. (funky)


Lesenswert?

Wenn du kein C++ benötigst dann würde ich CooCox verwenden.
http://www.coocox.org/

Das läuft so outofthebox und ist unlimitiert zu verwenden. C++ wird aber 
nicht supported.

Keil fällt als Privatanwender sowieso flach, ausser man hat einen 
scheissenden Goldesel im Stall stehen. Und 32kB Code zu erreichen ist 
bei den ARMs nun auch keine Utopie, v.a. wenn man ein OS und 
irgendwelche Libraries verwendet. Wenn man sich da einen Compiler 
aussucht, welcher dieses 32kB Limit hat, dann sollte man schon einen 
nehmen, bei welchem das Upgrade auf die Vollversion realistisch ist.

Den von dir genannten Compiler kenne ich nicht, ich würde dir aber schon 
empfehlen mal 2-3 verschiedene Compiler bzw. IDEs auszuprobieren. Wie 
gut die Compiler sind, kann man auf die schnelle sowieso nicht 
herausfinden, aber ob man mit der IDE klarkommt merkt man schon eher
http://www.mikrocontroller.net/articles/STM32 hat noch andere IDEs 
aufgeführt.

Die Keil IDE z.B. ist  total unkomfortabel und auf nem Stand von 
(gefühlt) 1990. Andere (Eclipse-basierte) IDEs bieten da deutlich mehr.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nicht kommerziell eingesetzt ist Rowley Crossworks auch nicht 
uninteressant.

http://www.rowley.co.uk/arm/index.htm

Die "persönliche" Lizenz kostet 150 USD.

Crossworks läuft unter Windows, Linux und OS X und neuerdings auch auf 
Linux/Arm

von temp (Gast)


Lesenswert?

Ja, Crossworks ist nicht schlecht. Leider aber etwas eigen. Hier ist 
zwar auch der gcc drunter aber eben nur anders. Programme die mit dem 
gnu-arm-tool gcc erstellt werden lassen sich problemlos in Keil, 
LpcXresso, Coocox (etwas umständlich) debuggen. Der verwendete 
Startupcode ist dafür nicht relevant. Das ist bei Crossworks anders. 
Wenn man nicht den Crossworks-Startupcode verwendet und deren Libs und 
Linkerscripts, enden die meisten Versuche in Hardfaults. Jedenfalls beim 
LPC1769. Ich muss wirklich sagen leider, weil der Debugger sonst 
wirklich sehr gut ist. Wenn man als Ziel ein Programm hat was nur aus 
freien Bestandteilen besteht, hat man somit ein Problem. Für mich 
inakzeptabel.

von Mgast (Gast)


Lesenswert?

A. B. schrieb:
> Die Keil IDE z.B. ist  total unkomfortabel und auf nem Stand von
> (gefühlt) 1990. Andere (Eclipse-basierte) IDEs bieten da deutlich mehr.

Du findest Eclipse komfortabel? Was daran jetzt genau? Die Startzeiten? 
Das sonderbare Workspace-Konzept in dem man nicht einfach "mal eben" ein 
Projekt oeffnen kann? Oder sind es die durch die Bank unfähigen 
Debugger-Plugins für MCUs die dir das Leben erleichtern?

von Pieter (Gast)


Lesenswert?

moin moin,

zur Zeit nutze ich das oben angegebene mikroPascal.
Gut:
- Project aufmachen, Typ einstellen
 oder
- Projectdatei starten, compelieren, flashen..fertig.

- kein handtieren mit make, script usw.

Schlecht:
- Die IDE hat einige ShortCuts die anders belegt sind, als z.B in 
Delphi.
- Der Preis.
- keinen direkten Sourcecodes der Libs.

Mit Gruß
Pieter

von Peter S. (psavr)


Lesenswert?

>Du findest Eclipse komfortabel
Ja, komfortables Codebrowsing, konfigurierbarer Editor, Syntax- und 
Spelling-Check und noch so vieles..

>Die Startzeiten?
Dauert nicht länger als andere IDEs; AVR-Studio, Visual-Studio, 
Windriver-Workbench, IAR, Keil-uVision etc. brauchen mindestens so 
lange!

>nicht einfach "mal eben" ein Projekt oeffnen kann?
Geht doch prima mit Eclipse! Habe alle Projekte aufgelistet im Project 
Explorer, kann kann auch mehrere Projekte parallel nebeneinader geöffnet 
haben. Und wenn ich ein neues Projekt beginne kopiere ich einfach ein 
ähnliches, bereits bestehendes Projekt und benenne es um! Dauert 30 
Sekunden!

>Oder sind es die durch die Bank unfähigen Debugger-Plugins
Einmal richtig eingerichtet läuft der GDB aalglatt

von A. B. (funky)


Lesenswert?

Mgast schrieb:
> Du findest Eclipse komfortabel? Was daran jetzt genau? Die Startzeiten?
> Das sonderbare Workspace-Konzept in dem man nicht einfach "mal eben" ein
> Projekt oeffnen kann? Oder sind es die durch die Bank unfähigen
> Debugger-Plugins für MCUs die dir das Leben erleichtern?

Ich behaupte nicht, das Eclipse eine super Umgebung für die 
Mikrocontroller Entwicklung ist(out of the box schon gar nicht...siehe 
eben die Plugins usw)...ich bin z.B. daran gescheitert das mit einem 
Codesourcery Compiler zum laufen zu kriegen.

Aber vom Editor her ist Eclipse dem von Keil 100mal überlegen.

von A. B. (funky)


Lesenswert?

PS: Bezgl. Startzeiten: das Eclipse länger braucht zum Laden als der VI 
oder Emacs stimmt.ok!
Aber auf nem einigermassen aktuellen System ist das absolut erträglich.

Ich habe nicht den Anspruch an eine aktuelle Entwicklungsumgebung, das 
sie auf nem 486 Grabbelkisten PC blitzschnell startet, was manch einer 
hier ja anscheinend schon erwartet(siehe auch andere Threads bzgl. Atmel 
Studio usw.)

Ich weiss auch nicht gar nicht genau worauf die ganzen anderen IDEs 
basieren, aber CooCox benutzt zum Beispiel Eclipse.

von W.S. (Gast)


Lesenswert?

A. B. schrieb:
> Ich habe nicht den Anspruch an eine aktuelle Entwicklungsumgebung, das
> sie auf nem 486 Grabbelkisten PC blitzschnell startet

Ist eben Java - und Java IST eben langsam im Vergleich zu jeder im 
Maschinencode vorliegenden IDE.

Geht es euch hier eigentlich um Oberflächensachen, wie bunt, wie in 
Projekte,Workspaces usw. organisiert?

Ich weiß ja, daß ich mit meiner Art, ohne IDE und ohne Debugger zu 
arbeiten, hier der Exot bin und daß die meisten erstmal drauflos daddeln 
wollen und sich dann davon überraschen lassen müssen, was zum Schluß an 
Code herauskommt. OK, beim GCC ist das erwiesenermaßen auch bitter 
nötig.

Aber mir ging es erstmal um die Qualitäten des Compilers und nicht um 
irgendwelche IDE's. Und ich glaube, der Jürgen wollte genau DAS auch zu 
allererst wissen.

W.S.

von temp (Gast)


Lesenswert?

Übertreibts mal nicht mit dem Schlechtmachen des gcc. Die vielen 
verschiedenen gcc die mit den IDEs kommen und den freien wie 
https://launchpad.net/gcc-arm-embedded unterscheiden sich kaum. Die 
meisten Unterschiede liegen in Anpassungen der newlib. Wenn man die 
Funktionen, die aus der newlib kommen und immer mal wieder zu Problemen 
führen (printf, malloc u.s.w.), durch eigene angepasste Implementationen 
ersetzt, ist man die Sorgen los. Ich habe bisher noch keinen Fehler im 
gcc gefunden der definitiv ein Compiler-Fehler war. Ich entwickle und 
debugge zu 90% unter VC. Das was dabei rauskommt, ist aber zu 90% mit 
dem gcc unter Linux übersetzt und läuft auch da. Hin und wieder mag der 
gcc mal was nicht was der VC frisst und umgekehrt. Aber wenn der Code 
unter beiden Compilern übersetzt ist, läuft er auch auf beiden. Ich 
wüsste nicht was ein Compiler so viel besser machen kann wie der gcc, 
dass es einen 4-5stelligen Betrag rechtfertigt. Das lässt sich auch auf 
den embedded Bereich übertragen. Ob der Keil-Compiler eventuell 10% 
kleineren Code macht oder nicht, will ich nicht mal wissen. Das größte 
Optimierungspotential liegt bei einem selbst. Sobald es aber um 
Assembler oder Assemblercode in C-Dateien geht, ist man mit Keil auf 
einer einsamen Straße. Das ist nur zu sich selbst kompatibel. Deswegen 
benutze ich den Keil zwar zum Debuggen, aber nur in Verbindung mit gcc. 
(und makefiles).

von W.S. (Gast)


Lesenswert?

temp schrieb:
> Ob der Keil-Compiler eventuell 10%
> kleineren Code macht oder nicht,

Ja, das willst du nach eigenem Bekunden nicht wissen.

Ich aber.

Mir haben die kürzlich gesammelten Erfahrungen mit der Lernbetty 
gereicht, um im Nachhinein die Anschaffung des Keils als genau richtige 
Entscheidung zu bestätigen. Und: unter den professionellen Tools ist er 
noch einer der billigeren. Guck auf der nächsten Embedded mal zu IAR 
oder Green Hills und Konsorten oder zu ARM selber.

Das Schreiben der gesamten Lernbetty-Quellen und das Ausprobieren 
derselben hat mich nicht mal halb soviel Zeit gekostet wie den GCC zum 
Laufen zu bringen. Wenn ich das auf die Dinge umrechne, die ich 
beruflich mache, dann hat sich die Anschaffung des Keils schon beim 
allerersten Projekt voll und ganz bezahlt gemacht.


Aber mal zum GCC selber:

Erstmal stören die elenden Probleme, die man bei GCC mit dem Linken 
kriegt und die man auch durch Lesen der Doku nicht in den Griff kriegt - 
stattdessen ist Probieren angesagt. Stichwort: fälschlich vom Linker 
eingesetzte Stubs.

Zweitens die diversen Dinge, die der GCC eben überhaupt nicht kann und 
für die man Workarounds braucht, die natürlich wieder Code+Zeit kosten.

Drittens die Unterschiede im erzeugten Code. Der Code vom GCC ist lausig 
im Vergleich zu dem vom ARM. Bei der Lernbetty hab ich fast Faktor 1.5 
feststellen müssen. Also mal im Klartext: Das, was der ARM in einen 32 K 
großen Codespeicher hineinbekommt, erfordert beim GCC fast 48 K. Das ist 
ne Menge Holz und es macht schon nen preislichen Unterschied, ob man nen 
32K Flash Controller einsetzen kann oder auf nen >=64K Flash Controller 
zurückgreifen muß, den man obendrein mit Faktor 1.5 schneller takten muß 
für die gleiche Funktionalität.


Und nochwas:
temp schrieb:
> Sobald es aber um
> Assembler oder Assemblercode in C-Dateien geht,...

...erschlage ich jeden mit nem nassen Feudel, der auch nur ansatzweise 
so etwas zu praktizieren beabsichtigt. Assembler gehört in ne separate 
Assemblerquelle und nicht in ne C-Quelle.

Wohlgemerkt, ich hab nix gegen den GCC, aber in seiner arm-none-eabi 
Ausführung ist er ein recht mäßiger Compiler, der viel Streß verursacht 
und nicht wirklich gut an die Zielarchitektur angepaßt ist. Im 
Bastlerumfeld hat niemand was dagegen, aber ihn beruflich einsetzen zu 
wollen, hätte ich ernste Bedenken.

W.S.

von temp (Gast)


Lesenswert?

W.S. schrieb:
> Drittens die Unterschiede im erzeugten Code. Der Code vom GCC ist lausig
> im Vergleich zu dem vom ARM. Bei der Lernbetty hab ich fast Faktor 1.5
> feststellen müssen.

Stell mal 2 Projekte zum Vergleich hier rein die diesen Unterschied 
beweisen. Bis dahin: Märchen!!!

von Arc N. (arc)


Lesenswert?

Ich würde mir zumindest mal die Tools (Eclipse, gcc + 
Eigenentwicklungen) und Cortex-M3 von SiLabs ansehen...
http://www.silabs.com/products/mcu/Pages/32-bit-mcu-software.aspx
http://www.silabs.com/products/mcu/Pages/32-bit-microcontrollers.aspx

von (prx) A. K. (prx)


Lesenswert?

Oftmals werden bei solchen Grössenvergleichen Libs mitgerechnet. Und die 
können sehr unterschiedlich ausfallen, insbesondere wenn man bei gcc 
die newlib erwischt.

von Ersi (cell85)


Lesenswert?

Keil MDK-ARM Pro mit Ulink Pro ... Wer halt einen Esel hat. Ich benutz 
den in der Firma, gibt meiner Meinung nach nichts besseres.

Und jetzt soll bald die neue Version mit besserem Editor rauskommen 
juhuu

von qwer (Gast)


Lesenswert?

>Wohlgemerkt, ich hab nix gegen den GCC, aber in seiner arm-none-eabi
>Ausführung ist er ein recht mäßiger Compiler, der viel Streß verursacht
>und nicht wirklich gut an die Zielarchitektur angepaßt ist. Im
>Bastlerumfeld hat niemand was dagegen, aber ihn beruflich einsetzen zu
>wollen, hätte ich ernste Bedenken.
>
>W.S.

An Deiner Stelle würde ich mit meiner Unwissenheit nicht bei jeder
unpassenden Gelegenheit hausieren gehen.

Das ist nicht erst langsam peinlich.

von fbi (Gast)


Lesenswert?

A. B. schrieb:
> ...ich bin z.B. daran gescheitert das mit einem
> Codesourcery Compiler zum laufen zu kriegen.

Sollte mittels: http://gnuarmeclipse.livius.net plugin gehen.
Damit Yagarto einzurichten war jedenfalls einfacher als die Beschreibung 
von Yagarto selbst.
Ansonsten find ich Rowley ziemlich gut, zumal die meinen Segger J-Link 
direkt unterstützen. Insbesondere auch Databreakpoints, die gehen via 
GDB-Server nicht (zumindest hab ich es noch nicht hinbekommen).

von A. B. (funky)


Lesenswert?

Sven S. schrieb:
> Und jetzt soll bald die neue Version mit besserem Editor rauskommen
> juhuu

Welche Version benutzt du und bei welcher Version soll ein neuer Editor 
kommen? Also bei der 4.50 war das glaub ich, da haben sie schon 
irgendeien neuen Editor-Core verwendet...aber die Änderungen sind ja 
eher...marginal.

von A. B. (funky)


Lesenswert?

W.S. schrieb:
> Ich weiß ja, daß ich mit meiner Art, ohne IDE und ohne Debugger zu
> arbeiten, hier der Exot bin und daß die meisten erstmal drauflos daddeln
> wollen und sich dann davon überraschen lassen müssen, was zum Schluß an
> Code herauskommt. OK, beim GCC ist das erwiesenermaßen auch bitter
> nötig.
>
> Aber mir ging es erstmal um die Qualitäten des Compilers und nicht um
> irgendwelche IDE's. Und ich glaube, der Jürgen wollte genau DAS auch zu
> allererst wissen.

Nunja...wenn du auf anhieb so Fehlerfreien Code produzierst...dann 
Respekt. Ich jedenfalls möchte einen funktionierenden Debugger nicht 
mehr missen...gerade auf embedded Ebene wo man früher nur mit Oszi und 
irgendwelchen Status LEDs debuggen konnte(zumindest kenne ich das so von 
PsOC1, da das dortige Debugsystem überhaupt nicht funktioniert hat) und 
bei anderen Controllern wars ja auch nicht anders.

Und was hat bitte eine funktionierende & komfortable IDE Oberfläche mit 
dem typischen affigen Totschlagargument "muss wohl alles klicki&bunti 
sein" zu tun? Gerade wenn man zu zweit oder noch mehreren an einem 
Projekt arbeitet, möchte ich Projekteinstellungen usw nicht missen. Soll 
da jeder mit seinem eigenen Sammelsurium aus Makefiles und sonstigem 
rumgewurstel loslegen?

Ich maße mir nicht an die Qualität eines Compilers beurteilen zu können. 
Ich programmiere und wenn die Funktionalität erreicht ist, welche ich 
erwarte dann bin ich glücklich. Ich wüsste jetzt auch nicht, was an GCC 
so schlecht sein soll? Ich benutze ihn unter Linux und die Kompilate 
funktionieren. Viel eher treibt mich dort KDEDevelop zu Verzweiflung, 
aber das steht auf einem anderen Blatt.

von A. B. (funky)


Lesenswert?

fbi schrieb:
> Sollte mittels: http://gnuarmeclipse.livius.net plugin gehen.

hmm...muss ich mir nochmal anschauen. Ich hatte es auch nach der Yagarto 
Anleitung versucht und konnte dann nach langer Zeit auch mal 
kompilieren, aber das mit dem Debugger hat überhaupt nicht funktioniert. 
Wobei ich das auch nicht auf Eclipse&Co schieben will, da ich zu dem 
Zeitpunkt nur nen China-Clone Debugger hatte. Die verhalten sich nicht 
ganz so wie die Originale.
Outofthebox hat CooCox wiegesagt sehr gut funktioniert, aber da ist C++ 
nicht unterstützt weswegen ich es dann erstmal liegen gelassen habe.

von W.S. (Gast)


Lesenswert?

A. B. schrieb:
> Ich maße mir nicht an die Qualität eines Compilers beurteilen zu können.
> Ich programmiere und wenn die Funktionalität erreicht ist, welche ich
> erwarte dann bin ich glücklich. Ich wüsste jetzt auch nicht, was an GCC
> so schlecht sein soll?

Bitte etwas genauer. Hier geht es um den arm-none-eabi-gcc und es gibt 
ja eine ganze Reihe Portierungen auf diverse Zielarchitekturen, bei 
denen der erzeugte Code jeweils besser oder schlechter sein mag.

Aber weiter oben hat ja jemand dumm herumgerülpst, ohne auch nur im 
Mindesten sich zum Lesen zu bequemen, also geb ich hier mal ein 
konkretes Zahlenbeispiel:

Die Basiskomponente der Lernbetty heißt BettyBase und man kann sie in 
compilierter Form (einmal Arm/Keil und einmal GCC) hier in der 
Codesammlung herunterladen. Darin enthalten sind 7 Fonts und ein Bild, 
zusammen 22900 Bytes groß. Der Rest ist Code und kleinere konstante 
Daten.

BettyBase per Arm/Keil erzeugt: 38780 Bytes,
dasselbe  per GCC erzeugt:      48448 Bytes

Zieht man die Fonts+Bild ab, so ergibt das 15880 Bytes bei Keil und 
25548 Bytes bei GCC. Das macht ein Verhältnis von 1 : 1.6 aus oder mit 
anderen Worten: Wo der Keil mit 2 Befehlen auskommt, braucht der GCC 
rund 3 Befehle. Sowas nenne ich keinen guten Code. OK, er funktioniert, 
das ist wahr und gut und damit ist die Benutzbarkeit gegeben, aber mehr 
auch nicht. Zum Basteln ist das allemal ausreichend und auch du wärest 
damit glücklich. Auch ich finde das in Anbetracht der übrigen Umstände 
in Ordnung, aber man sollte sich den realistischen Blick bewahren und 
die Dinge so sehen wie sie sind. Genau deswegen mein Rat ganz weit oben: 
erstmal den Keil herunterladen und damit anfangen - damit man mal ne Art 
Referenz bekommt. Dann kann man immer noch je nach Projekt auf den GCC 
umschwenken oder eben bei kleineren Sachen unterhalb 32K beim Keil 
bleiben. Hier lese ich jedoch andauernd Beiträge von Leuten, die außer 
dem GCC noch nie was anderes gehabt haben und dennoch recht überheblich 
große Töne spucken.

W.S.

von LTC1043 (Gast)


Lesenswert?

W.S. schrieb:
> BettyBase per Arm/Keil erzeugt: 38780 Bytes,

wurde ohne Optimierung erzeugt

> dasselbe  per GCC erzeugt:      48448 Bytes

wurde mit -O3 erzeugt

Desshalb kannst du wohl nicht aufgrund der Grösse des Hex-Files auf die 
Qualität des Compilers/Linkers schliessen.

Mit
-O3
    Optimize yet more. -O3 turns on all optimizations specified by -O2 
and also turns on the -finline-functions, -funswitch-loops, 
-fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize, 
-fvect-cost-model, -ftree-partial-pre and -fipa-cp-clone options.

wird wohl eher auf Speed optimiert, wenn dir die Grösse wichtig ist 
solltest du wohl

-Os
    Optimize for size. -Os enables all -O2 optimizations that do not 
typically increase code size. It also performs further optimizations 
designed to reduce code size.

verwenden.

Cheers

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

W.S. schrieb:
> Wo der Keil mit 2 Befehlen auskommt, braucht der GCC
> rund 3 Befehle.

Das ist eine Milchmädchenrechnung, weil du damit nicht nur den vom 
Compiler generierten Code, sondern auch die Bibliotheken vergleichst. 
Wenn du Compiler vergleichen willst, vergleiche die Größe einer 
ungelinkten Funktion.

von temp (Gast)


Lesenswert?

Ich habe mir grade mal das zip "LernBetty_R0.03aktualisiert.zip" 
reingezogen.
So wie das makefile gebaut ist wundert's mich nicht. Wenn man -O3 gegen 
-Os ersetzt landet man schon bei 41k. Wenn dann noch die beim gcc 
üblichen
-ffunction-sections -fdata-sections und --gc-sections beim ld verwendet 
werden, wird das bin nur noch 34.924 Bytes lang.
Ob das so noch funktioniert kann ich nicht sagen, da ich dafür keine 
Hardware habe.

von klausr (Gast)


Lesenswert?

So, LernBetty_R0.03aktualisiert.zip wollte ich auch mal schnell 
durchlaufen lassen... ging aber nicht. Verwendet man ein Datei- bzw. 
Betriebsystem, was Groß- und Kleinschreibung unterscheidet, muss man 
schon etwas anpassen:

klaus@LittlX:~/src/stm32/LernBetty_R0.03/BettyBase$ grep -i Tasten.h *
Appfinder.c:#include "tasten.h"
BettyWorkMenu.c:#include "tasten.h"
cmd.c:#include "tasten.h"
Interrupts.c:#include "tasten.h"
Interrupts.c~:#include "Tasten.h"
main.c:#include "tasten.h"
setup.c:#include "tasten.h"
Systemtick.c:#include "Tasten.h"
Tasten.c:#include "Tasten.h"
tasten.h:/* SwissBetty-TV-Fernbedienung: Tasten.h */

(Tasten.h ist nur ein Beispiel). Dies könnte man bei einer zukünftigen 
Release evtl. noch vereinheitlichen.

von W.S. (Gast)


Lesenswert?

Andreas Schwarz schrieb:
> Das ist eine Milchmädchenrechnung, weil du damit nicht nur den vom
> Compiler generierten Code, sondern auch die Bibliotheken vergleichst.

Milchmädchen hin oder her..
Im Grunde ist das egal, denn wenn der Compiler eben auch ne Menge 
umfänglicher Bibliotheksfunktionen braucht, um lauffähigen Code zu 
erzeugen, dann ist das Ergebnis halt länger und in aller Regel auch 
langsamer.

Ich hatte schweren Ärger beim GCC-Linker mit Wrapper-Funktionen für den 
SVC, die ich in Assembler geschrieben habe, weswegen ich mir den 
erzeugten Code per Reassembler angeschaut habe. Von da her weiß ich, wie 
umständlich der Code vom Gcc im Vergleich zu dem vom Arm dabei gewesen 
ist.

Ach ja, ich habe wirklich nix dagegen, wenn hier jemand aus der 
GCC-Riege sich mal hinsetzt und für die Yagarto-Distribution eine 
vernünftige Dokumentation schreibt, wo man nachlesen kann, wie dort 
was aufgerufen und benutzt werden muß, damit man ein gutes Ergebnis vom 
GCC bekommt. Das wäre endlich mal was Nützliches.

W.S.

von temp (Gast)


Lesenswert?

W.S. schrieb:
> Milchmädchen hin oder her..
> Im Grunde ist das egal, denn wenn der Compiler eben auch ne Menge
> umfänglicher Bibliotheksfunktionen braucht, um lauffähigen Code zu
> erzeugen, dann ist das Ergebnis halt länger und in aller Regel auch
> langsamer.

Das ist gelinde gesagt Blödsinn. Wenn ich mich dazu entscheide z.B. die 
printf aus der newlib zu verwenden, dann weiss ich auch was für ein 
Klotz das ist. Dafür hat man dann auch den vollen Umfang aller 
erdenklicher Formatierungsoptionen. Warum soll das aber großartig 
langsamer werden? Das eine hat mit dem anderen nicht unbedingt was zu 
tun. Ohne --gc-sections beim Linken kommt eben einiges an nicht 
verwendeten Code ins Binary. Das sollte einem aber auch klar sein bevor 
man meckert. Beim Keil sind diese Optionen sogar in der GUI anklickbar, 
wenn man auf gcc umschaltet. Dokumentationen zum gcc sind nun zur Genüge 
vorhanden.

von A. B. (funky)


Lesenswert?

W.S. schrieb:
> Genau deswegen mein Rat ganz weit oben:
> erstmal den Keil herunterladen und damit anfangen - damit man mal ne Art
> Referenz bekommt. Dann kann man immer noch je nach Projekt auf den GCC
> umschwenken oder eben bei kleineren Sachen unterhalb 32K beim Keil
> bleiben. Hier lese ich jedoch andauernd Beiträge von Leuten, die außer
> dem GCC noch nie was anderes gehabt haben und dennoch recht überheblich
> große Töne spucken.

Naja, Referenz hin oder her...also ich finde 32kB bei ARM Projekten nun 
nicht unrealistisch, da die Prozessoren grösser sind man somit 
wahrscheinlich ein OS und verschiedene Libs verwendet etc.
Von daher ist das mit dem Keil ja gut und schön, aber kaufen wird man 
sich den als Privatanwender nicht (können), ausser man hat wirklich zu 
viel Geld für sein Hobby.
Und ob man als Privatanwender nun Bock hat, je nach Projekt zwischen 5 
IDEs zu switchen wage ich auch eher zu bezweifeln.
Von daher liebe direkt den OpenSource Weg gehen und sich mit 
Konfiguration von Eclipse und einem GCC rumschlagen, oder halt was 
fertiges kaufen. Für 200-300€ bekommt man ja fertige Compiler samt IDE 
welche hier auch schon angesprochen wurden.

Die Privatleute welche die (vermeintlich) schlechtere Codequalität des 
GCC im Vergleich zu Keil, Imagecraft und was es da sonst noch so gibt, 
bemerken&beurteilen können dürfte sich ziemlich in Grenzen halten.

Und ob mein Kompilat bei nem ARM nun 5kB mehr oder weniger hat, 
interessiert doch da normalerweise keine Sau...Speicher haben die Dinger 
ja nun massig.
(ja ich seh schon was ich damit lostrete, und mir gleich die gute alte 
Zeit um die Ohren gehauen wird, als man noch jedes Bit sparen musste)

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Man lese zuerste den mit "Benchmarking" beginnenden Abschnitt im EULA 
der ARM Keil Software-Werkzeuge. Solche Forumulierungen gibt es bei 
anderen Anbietern in ähnlicher Form.

Alle Monate (manchmal alle paar Tage) wieder kommt ein "wer hat den 
Besten"-Thread für Compiler, IDEs, Debugger, Debuginterfaces etc im 
Zusammenhang ARM-basierten Controllern. Es düfte schon so ziemlich alles 
geschrieben worden sein aber wie auch immer: Ein Compiler/Toolchain X 
wird zu einem Vergleichszeitpunkt etwas kompakteren Code als Toolchain G 
erzeugen und Compiler R die schnellste Laufzeit erreichen - jeweils bei 
"bestmöglichen" Einstellungen. Aber das kann in ein paar Wochen schon 
wieder anders sein. Neutrale Vergleiche wird es kaum geben, denn ein 
Compilerhersteller will zum Kauf der neuen noch "besseren" Version 
animieren, dabei die Ausgabe seines Produkts mit den ihm bestens 
bekannten Möglichkeiten seines Produkts hervorheben und die Mitbewerber 
aus Unkenntnis der möglichen Optionen (siehe auch oben) oder einfach mit 
Absicht schlechter darstellen. Details zum Test gibt es ohnehin nicht, 
verbieten ja die EULAs. Wäre ja sonst auch lausiges Marketing.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

temp schrieb:
> W.S. schrieb:
>> Milchmädchen hin oder her..
>> Im Grunde ist das egal, denn wenn der Compiler eben auch ne Menge
>> umfänglicher Bibliotheksfunktionen braucht, um lauffähigen Code zu
>> erzeugen, dann ist das Ergebnis halt länger und in aller Regel auch
>> langsamer.
>
> Das ist gelinde gesagt Blödsinn.

Eher ist das Gegenteil der Fall.

Auf Geschwindigkeit optimierter Code ist praktisch immer größer, schon 
aufgrund vieler wegfallender Sprungmarken, wenn kleine Schleifen etc. 
linear abgelegt werden.
Und es geht bei der Geschwindigkeit ja nicht nur um die reinen Bytes, 
die gespart werden. Da hängt bei vielen ARMs noch der ganze 
Rattenschwanz mit Cache mit Waitstates usw. dran.

Wenn man dann natürlich wie oben geschrieben mit -O3 optimiert (ich 
glaube das jetzt mal ungeprüft), darf man sich nicht wundern, wenn der 
Code größer wird.

> tun. Ohne --gc-sections beim Linken kommt eben einiges an nicht
> verwendeten Code ins Binary. Das sollte einem aber auch klar sein bevor
> man meckert. Beim Keil sind diese Optionen sogar in der GUI anklickbar,
> wenn man auf gcc umschaltet. Dokumentationen zum gcc sind nun zur Genüge
> vorhanden.

Chris D.

von W.S. (Gast)


Lesenswert?

So, Leute. Damit wir hier nicht im luftleeren Raum diskutieren mal ein 
paar Fakten:

Codesize für die BettyBase mit unterschiedlicher Optimierung
(alle nur übersetzt, nix tatsächlich ausprobiert)

Size der erzeugten BettyBasexxx.bin Dateien
Arm/Keil:
-O0         42144 Bytes
-O1         40020
-O2         38780
-O3         38784
-Otime      39796
-Ospace     38780

GCC (Yagarto 4.7.2)
-O0         48916
-O1         42612
-O2         42724
-O3         48448
-Ofast      48512
-Os         41380

Zieht man die konstanten 22900 Bytes für Grafik+Fonts ab,
dann gibt das für den reinen Code
Arm/Keil:
-O0         19244 Bytes
-O1         17120
-O2         15880
-O3         15884
-Otime      16896
-Ospace     15880

GCC (Yagarto 4.7.2)
-O0         26016
-O1         19712
-O2         19824
-O3         25548
-Ofast      25612
-Os         18480

und im Verhältnis:
-O0         1 : 1.35
-O1         1 : 1.15
-O2         1 : 1.25
-O3         1 : 1.61
-O(fast)    1 : 1.51
-O(size)    1 : 1.16

ist schon interessant, mal den direkten Vergleich an derselben Quelle zu 
haben. Gelle?

Wenn man sich also vor der Falle -O3 oder -Ofast hütet, dann sieht das 
Ganze schon ein bissel gelinder aus. Aber wie gesagt, nicht am lebenden 
objekt ausprobiert.

W.S.

von temp (Gast)


Lesenswert?

Meiner ist länger!!!

Mit folgenden Änderungen im Makefile und dem gcc aus den gnu-arm-tools:

CPUFLAGS = -mcpu=arm7tdmi-s
OPTFLAGS = -Os
CFLAGS = -Wall -mthumb-interwork -msoft-float -DGCC -ggdb 
-Wa,-adhln=$*.lst

#hier
CFLAGS += -ffunction-sections -fdata-sections

INC = -I$(INCLUDEPATH) -I.
ASFLAGS = --gstabs -mthumb-interwork -mfpu=softfpa  -a=$*.lst
LDFLAGS = -Tlpc2220_Base.ld -Map BettyBase.map -eHard_Reset

#und hier
LDFLAGS += --gc-sections

LIBS = --start-group -lgcc -lc -lm --end-group
THUMBFLAGS = -mthumb



-O0     41860
-O1     36004
-O2     35956
-O3     40576
-Os     34924
-Ofast  40576

minus 22900=

-O0     18960 (0.98)
-O1     13104 (0.76)
-O2     13056 (0.82)
-O3     17676 (1.04)
-Os     12024 (0.75)
-Ofast  17676


Warum im Makefile 2 mal CFLAGS=xxx bei euch steht ist mir unklar. Die 
Zeile
   CFLAGS = -Wall -mthumb-interwork -msoft-float -ggdb
ist somit Müll, da später sie später wieder überschrieben wird.

Beseitigt das bitte mal, das trägt nur zur Verwirrung bei.

von temp (Gast)


Lesenswert?

Noch ein Nachtrag. Nur zum Beispiel. Die Funktion:
1
const float FRound[5] = { 10.0, 100.0, 1000.0, 10000.0, 100000.0 };
2
3
float FF_round (float aValue, byte Digits)
4
{ float f;
5
  int n;
6
  n = Digits-1;
7
  if (n<0) n = 0;
8
  if (n>4) n = 4;
9
  f = floor((fabs(aValue) * FRound[n]) + 0.5);
10
  if (aValue<0) f = -f;
11
  f = f / FRound[n];
12
  return f;
13
}

aus conv.c wird nirgends im gesamten Code verwendet. Deshalb schmeißt 
der Compiler sie mit geeigneten Einstellungen auch raus. Ebenso die 
Konstanten FRound[5]. Bevor nicht geklärt ist ob solche Funktionen beim 
Keil drin sind oder nicht erübrigt sich jeglicher Vergleich. Außer man 
argumentiert sich selbst die Welt schön.

von Oliver S. (oliverso)


Lesenswert?

W.S. schrieb:
> -O(size)    1 : 1.16

Das entspricht ja ungefähr den bekannten Vorurteilen.

W.S. schrieb:
> -O(fast)    1 : 1.51

Jetzt müsste man nur noch eine Laufzeitanalyse machen, welcher Code denn 
nun schneller ist, und um wieviel ;)

Alles in allem nichts neues.

Oliver

von W.S. (Gast)


Lesenswert?

temp schrieb:
> Warum im Makefile 2 mal CFLAGS=xxx bei euch steht ist mir unklar.

Das kann ich dir erklären:

Ich selber arbeite mit Keil und habe den GCC hier ausschließlich per 
Batchfile benutzt, um die diversen -Oxx auszuprobieren. Ich selbst 
verwende also weder GCC noch Makefile und bin deshalb für diese Frage 
der falsche Ansprechpartner.

Aber Siegfried u.a. benutzen Make und da es offenbar nicht nur für mich, 
sondern auch für andere einen erheblichen nicht gedeckten Bedarf an 
Dokumentation gibt, haben die Makefile-Benutzer eben einfach einige alte 
Files (makefile, Linkersteuerfile, Eclipse-Files...) von anderen 
Projekten herüberkopiert und drin solange geändert, bis es lief.

So pflanzt sich das fort...

Wirklich gute Makefiles zu schreiben ist offenbar nicht einfach und sich 
zwischen den schier unendlichen Optionen des GCC durchzuwursteln 
ebenfalls. Da wundert es mich nicht, daß man schon seit Jahren von 
Insidern den Tip bekommt, einfach ein altes File herzunehmen und nur das 
Nötigste darin zu editieren.

btw: das hatte ich wirklich ernst gemeint:
"Ach ja, ich habe wirklich nix dagegen, wenn hier jemand aus der
GCC-Riege sich mal hinsetzt und für die Yagarto-Distribution eine
vernünftige Dokumentation schreibt, wo man nachlesen kann, wie dort
was aufgerufen und benutzt werden muß, damit man ein gutes Ergebnis vom
GCC bekommt."

W.S.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

W.S. schrieb:

> da es offenbar nicht nur für mich, sondern auch für andere einen
> erheblichen nicht gedeckten Bedarf an [make] Dokumentation gibt,

Was fehlt dir denn an der make-Dokumentation?

http://www.gnu.org/software/make/manual/

Wenn ich was nicht weiß über make dann liegt das bestimmt nicht daran, 
weil es nicht in der Doku steht, sondern daran, daß ich zu faul bin, sie 
zu lesen.

> [...] und sich zwischen den schier unendlichen Optionen des GCC
> durchzuwursteln [ist] ebenfalls [nicht einfach].

Ja, ist eben so.

Einerseits wollen Anwender maximale Flexibilität und nach Möglichkeit 
Feinjustierungen vornehmen, andererseits wird darüber geklagt, daß es 
die entsprechenden Stellschräubchen und -hebel gibt.

Ist wie mit einem A380: Mit dem Wissen und der Erfahrung von einem 
Tretroller kommt man da nicht weit.  In dem Maße, in dem man das Gerät 
optimal einsetzen möchte, muss man sich auch damit auseinandersetzen.

Natürlich kann man auch sagen "mach ich net, mehr als ein Mausclick ist 
nicht zumutbar".  Ist voll okay, aber dann bitte nicht nölen, wenn das 
Ergebnis suboptimal ist :-)

> Ach ja, ich habe wirklich nix dagegen, wenn hier jemand aus der
> GCC-Riege sich mal hinsetzt und für die Yagarto-Distribution eine
> vernünftige Dokumentation schreibt, wo man nachlesen kann, wie dort
> was aufgerufen und benutzt werden muß, damit man ein gutes Ergebnis
> vom GCC bekommt.

Neben dem Ausloten der Möglichkeiten (etwa LTO) gibt es auch die 
Möglichkeit, bei schlechtem Code einen GCC-Problembereicht anzulegen und 
die Entwickler darüber in Kenntnis zu setzen.

Allerdings beobachte ich bei den avr-gcc Anwendern teilweise nen 
ziemlichen Kindergarten:

Jahrelang werden bestimmte Macken des Compilers in allen möglichen Foren 
quer über den Planeten breitgetreten, die wüstesten Hacks erarbeitet und 
ausgetauscht, Mannjahre in Rants und Flames and Beiträgen investiert, 
aber kein Schwein macht nen Bugreport — über Jahre hinweg wohlgemerkt...

von W.S. (Gast)


Lesenswert?

Johann L. schrieb:
> Was fehlt dir denn an der make-Dokumentation?

Garnichts. Ich benutze Make nicht, Dafür fehlt es mir an Doku für den 
arm-none-eabi-ld und zwar massiv. Guck dir mal meinen hier in diesem 
Forumsteil geposteten Versuch an, Hilfe bei den massiven Problemen zu 
bekommen, die ich mit diesem Linker hatte. Dieses Mistteil hat 
unaufgefordert zwischen zwei thumb Funktionen einen arm-stub gebaut, was 
natürlich voll in die Hose ging. Irgendwas dazu in der Yagarto-Doku 
(soweit man dieses ascii-File so nennen darf..) war nicht auffindbar. Im 
Prinzip bräuchte ich nen Parameter 
"-DoNotInsertArmStubsBetweenThumbCodes", da der Linker offenbar per 
default alles falsch macht, was man ihm nicht explizit verboten hat. Bin 
ich vom Keil, von IAR, von Fujitsu und von allen anderen C-Toolchains 
nicht gewohnt.

Johann L. schrieb:
> Einerseits wollen Anwender maximale Flexibilität und nach Möglichkeit
> Feinjustierungen vornehmen, andererseits wird darüber geklagt, daß es
> die entsprechenden Stellschräubchen und -hebel gibt.

Es sollte die Toolchain per Default bereits alle soweit richtig machen, 
daß zumindest lauffähiger Code dabei herauskommt. Meine - allerdings 
kurzen - Erfahrungen mit dem GCC sind jedoch gegenteilig. Ich  habe 
schlußendlich per ellenlangem Probieren und Reassemblieren eine Art 
Kochrezept hinbekommen, mit dem es funktioniert. Aber das finde ich 
intellektuell extrem unbefriedigend.

W.S.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

W.S. schrieb:
> Dafür fehlt es mir an Doku für den arm-none-eabi-ld
> und zwar massiv. Guck dir mal meinen hier in diesem
> Forumsteil geposteten Versuch an, Hilfe bei den massiven Problemen zu
> bekommen, die ich mit diesem Linker hatte. Dieses Mistteil hat
> unaufgefordert zwischen zwei thumb Funktionen einen arm-stub gebaut, was
> natürlich voll in die Hose ging.

Wenn ich das Goorakel nach "arm stubs in thumb mode" frage, ist der 
erste Treffer "ld and the ARM family":

http://sourceware.org/binutils/docs/ld/ARM.html

Wenn man den Suchbegriff nicht hat — etwa weil man noch nicht mit den 
Tools nicht vertraut ist — ist die Lektüre der Doku unverzichtbar.

> Irgendwas dazu in der Yagarto-Doku (soweit man dieses ascii-File
> so nennen darf..) war nicht auffindbar.

Ich selbst betrachte fehlende oder lückenhafte Doku als Bug — nicht nur 
bei Tools wie GCC oder Binutils, auch bei "normaler" Software.

Wie es im Yagarto-Fall konkret aussieht vermag ich nicht zu sagen weil 
ich mich weder mit diesen Tools noch mit ARM auskenne.

Es ist jedoch nicht unüblich, daß spezielle Distributionen nur die 
Punkte erklären, wo sie von den Standard-Tools abweichen, d.h. von GCC, 
Binutils etc.  Die komplette GCC / Binutils-Doku zu liefern sprengt 
i.d.R. den Rahmen, und die Eigenheiten der Distro gehen verloren.

Neben den Release-Notes der Distro und deren Doku und README gehören 
also auch immer die entsprechenden Dokumente von GCC et al. zur Lektüre. 
Ja, es ist viel Holz, aber das gehört zur professionellen Arbeit eben 
dazu.

Zeit, die man durch Nichtlesen der Doku spart, ist nicht etwa gesparte 
Zeit, sondern man packt dadurch ein Vielfaches an Zeit-Schulden ins 
Projekt!

> Im Prinzip bräuchte ich nen Parameter
> "-DoNotInsertArmStubsBetweenThumbCodes", da der Linker offenbar per
> default alles falsch macht, was man ihm nicht explizit verboten hat. Bin
> ich vom Keil, von IAR, von Fujitsu und von allen anderen C-Toolchains
> nicht gewohnt.

Häufigerst Fehler mit Linken + GNU-Tools ist, daß der Linker von Hand 
aufgerufen wird.

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Zunächst erst einmal Danke an Euch, die Ihr mit der Codegröße 
experimentiert und die Ergebnisse hier zur Verfügung stellt. Ich denke, 
das interessiert viele stumme Mitleser :-)

Ich muss selbst auch gestehen, dass ich viele Einstellungen im GCC immer 
noch nicht kenne (und kannte - danke an temp für die Makefileauszüge) 
und deshalb sicher auch suboptimalen Code verwende (-Ox ist natürlich 
bekannt :-) Ist bei uns auch nicht so dramatisch, weil wir bei der 
Controllerauswahl nicht auf den Euro achten müssen - wir haben also 
Platz.
Und wir machen damit leider einfach zu wenig (vielleicht drei, vier 
kleinere Controllerprojekte pro Jahr), um wirklich tief in den Compiler 
einsteigen zu können. Es fehlt die Zeit :-/

Und wie W.S. es schon sagte, wird es so sein, dass viele einfach 
Makefiles anderer übernehmen, ohne zu verstehen, was da genau passiert. 
Und so kommt es dann zu echtem Gefrickel.

Aber ich denke, als erstes Fazit kann man für einen Großteil der 
Anwender sagen: der GCC ist auf jeden Fall keine schlechte Wahl

Chris D.

von m.n. (Gast)


Lesenswert?

Chris D. schrieb:
> Aber ich denke, als erstes Fazit kann man für einen Großteil der
> Anwender sagen: der GCC ist auf jeden Fall keine schlechte Wahl

... bezüglich der Kosten :-)

Bezüglich der Verwendung, hatte ich ähnliche Probleme wie W.S., auch 
wenn ich es nicht so drastisch formulieren würde.

von temp (Gast)


Lesenswert?

@ W.S.


Unter
Beitrag "Re: kann arm-none-eabi-ld mit thumb umgehen?"

habe ich dir die Auflösung des Rätsels mit dem ld gepostet. Und es 
handelt sich nicht um einen Bug.

von W.S. (Gast)


Lesenswert?

Hmm... erstmal danke für den Tip.

Aber..
wozu ist dann .thumb gut, wenn es nicht zu einem Objektcode führt, der 
in thumb assembliert ist und dann eben auch als thumb behandelt wird - 
und man stattdessen .thumb_func schreiben muß?

Ich könnte mir allenfalls eine Funktion vorstellen, die als ARM-code 
ausgewiesen werden soll, aber tatsächlich THUMB-code enthält - aber das 
wäre doch blanker Irrsinn und ich könnte mir dafür beim besten Willen 
keinen Anwendungsfall vorstellen. Also, aus welcher Logik kommt das her 
und wie muß man das begreifen?

Bei Keil/Arm ist das eindeutig: wo thumb steht, wird auch thumb draus 
gemacht und der Linker kann das eindeutig dem Objektfile entnehmen. Da 
gibt es gar keine Unklarheiten: thumb ist thumb und arm ist arm.

Uff, ich fühle mich beim GCC immer weniger zuhause. Es reicht da eben 
nicht zu sagen "fahr rechts rum!" sondern "fahr rechts rum, fahr aber 
nicht gradaus, fahr auch nicht links rum und fahr auch nicht zurück und 
bleib auch nicht stehen!"  stressig - zumindest für unsereiner.


W.S.

von temp (Gast)


Lesenswert?

W.S. schrieb:
> Aber..
> wozu ist dann .thumb gut, wenn es nicht zu einem Objektcode führt, der
> in thumb assembliert ist und dann eben auch als thumb behandelt wird -
> und man stattdessen .thumb_func schreiben muß?


Eindeutig steht das auch in der Doku:

http://sourceware.org/binutils/docs/as/ARM-Directives.html


Ich will mir nicht zutrauen zu beurteilen ob es dafür sinnvolle 
Anwendungen gibt. Allerdings ist es wie bei vielen Sachen: kaum macht 
man's richtig, schon geht es. Ich verstehe nur nicht, warum du so 
penetrant Seitenhiebe verteilen musst. Der gcc ist für eine Unmenge vom 
Prozessoren verfügbar ohne dass man dafür einen 5stelligen Betrag auf 
den Tisch legen muss. Und die Ergebnisse sind zu mindestens ähnlich zu 
denen der kommerziellen Compiler.
Der Fallstrick mit den .thumb_func Schlüsselwort hat im übrigen nichts 
mit dem gcc zu tun. Der as und ld gehören zu den binutils.
Es steht dir ja frei den Keil zu benutzen.
Im übrigen habe ich im Leben noch keine einzige Zeile für einen Arm7 
geschrieben. Ich beschränke mich auf Cortex M3 und M0. Trotzdem hat die 
Suche im Web nach einer Lösung für dein Problem ca. eine Stunde 
gedauert. Vielleicht hättest du die investieren sollen bevor du in 
mehreren Threads  den gcc geprügelt hast.

von W.S. (Gast)


Lesenswert?

temp schrieb:
> Eindeutig steht das auch in der Doku:

erstmal danke für den Link, aber wenn ich dort folgendes bei 
".thumb_func"
lese:

"This directive is not neccessary when generating EABI objects. On these 
targets the encoding is implicit when generating Thumb code."

dann ist mir jetzt sonnenklar, daß wir hier einen echten Bug entdeckt 
haben. Der Assembler wird mit

echo Assembliere BettyApiGcc
ARM-NONE-EABI-AS -mcpu=arm7tdmi-s --gstabs -mthumb-interwork 
-mfpu=softfpa -a=BettyApiGcc.lst -o BettyApiGcc.o BettyApiGcc.asm
if Errorlevel==1 goto ende

aufgerufen und in der Quelle steht eindeutig .thumb drin. Deswegen 
sollte die obige Direktive lt. Doku implizit aktiviert sein - aber sie 
ist es offenbar nicht, denn wir erhalten einen Objektcode, wo zwar thumb 
code drin ist, aber selbiger als arm code ausgewiesen wird, wodurch der 
Linker Mist baut.

So. Was machen wir jetzt?

- für die Lernbetty-User, die den GCC benutzen wollen, die zugehörigen 
Files verbessern und das WARUM dazu in die Doku schreiben?

- für die Lernbetty-User, die Make benutzen wollen, ein gutes Makefile 
kreieren und ebenfalls das WARUM dazu dokumentieren?

- entdeckte Bugs jemandem zur Kenntnis zu geben, der sich darum kümmern 
kann?


W.S.

von temp (Gast)


Lesenswert?

W.S. schrieb:
> So. Was machen wir jetzt?
>
> - für die Lernbetty-User, die den GCC benutzen wollen, die zugehörigen
> Files verbessern und das WARUM dazu in die Doku schreiben?
>
> - für die Lernbetty-User, die Make benutzen wollen, ein gutes Makefile
> kreieren und ebenfalls das WARUM dazu dokumentieren?
>
> - entdeckte Bugs jemandem zur Kenntnis zu geben, der sich darum kümmern
> kann?

Ich würde sagen zu erst nimmmst du mal deine arrogante, 
besserwisserische Art etwas zurück. Bug hin oder her das interessiert 
mich nicht mal so sehr. Selbst bei deinem geliebten Keil stehen die 
.thumb_func Anweisungen in den Startupcodes die für den GCC mitgeliefert 
werden. Ebenso bei Crossworks und allen anderen die Assembler für den 
Startupcode verwenden. Die Leute von diesen Firmen sind auch nicht so 
überheblich und packen jedesmal wenn sie .thumb_func schreiben müssen 
ein paar gehässige Kommentare mit dazu. Wie die wohl darauf gekommen 
sind, dass das da hin gehört? Such mal hier im Forum, da findest du auch 
Treffer. Der einzige Bug den ich sehe ist der in der Doku. Obwohl ich 
die Unterschiede zwischen arm-eabi und arm-none-eabi noch nicht 
verstanden habe. Und hier gehts um den none-eabi. Vielleicht ist es ja 
nichtmal ein Bug.
Jedenfalls hast du die Doku ja vorher nicht mal gelesen. Also kann die 
dich nicht auf den Holzweg geführt haben.
Mach ganz einfach nicht so ein Federlesen drum, schreibs rein in deinen 
Code und gut ist.
Daß der as (oder ld) irgendwann mal anders geht wirst du wohl nicht 
erleben. Vielleicht kommt mal noch ein Kommandozeilenschalter dazu. Es 
wäre ja extrem gefährlich wenn der as bzw. ld von einer Version zur 
nächsten völlig anderen Code generiert.

von Jörg B. (joerg-sh)


Lesenswert?

Hallo Jürgen,
ich kann von Produkten von Mikroe nur abraten.

Schau da mal in die Foren, die brauchen um Fehler in Ihren Produkten zu 
lösen zum Teil Monate.

Ich habe die ~ 250€ jedenfalls bereut.


Grüße

Jörg

von hal9001 (Gast)


Lesenswert?

guck mal bei rowley crossworks. Da gibt es eine billige
version für privatuser. die benutze ich auch und bin zufrieden damit...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

W.S. schrieb:

> echo Assembliere BettyApiGcc
> ARM-NONE-EABI-AS -mcpu=arm7tdmi-s --gstabs -mthumb-interwork
> -mfpu=softfpa -a=BettyApiGcc.lst -o BettyApiGcc.o BettyApiGcc.asm

Erste Frage ist, warum arm-none-eabi-as von Hand aufgrufen wird und 
nicht durch den Treiber, also arm-none-eabi-gcc.  Oder rurst du etwa den 
Compiler (cc1 für C bzw. cc1plus für C++) auch von Hand auf?  Der 
Treiber setzt einiges an Optionen.

Häufiger Anwender-Fehler ist, daß die Subtools (foo-as, foo-ld) händisch 
aufgerufen werden und Optionen oder Pfade nicht stimmen.

> [...] denn wir erhalten einen Objektcode, wo zwar thumb code drin
> ist, aber selbiger als arm code ausgewiesen wird, wodurch
> der Linker Mist baut.
>
> So. Was machen wir jetzt? [...]
>
> - entdeckte Bugs jemandem zur Kenntnis zu geben, der sich darum kümmern
> kann?

Wenn es ein wirklich Fehler ist, und sei es nur in der Doku, dann ist 
das keine schlechte Option.

Keine Software ist fehlerfrei, und kein Entwickler ist unfehlbar -- es 
sei denn, du benutzt nur Software aus dem Vatikan.

von Hmm (Gast)


Lesenswert?


von W.S. (Gast)


Lesenswert?

temp schrieb:
> Ich würde sagen zu erst nimmmst du mal deine arrogante,
> besserwisserische Art etwas zurück. Bug hin oder her das interessiert
> mich nicht mal so sehr. Selbst bei deinem geliebten Keil stehen..


Ach nö, das ist nicht die Ebene, auf der ich hier weiter diskutieren 
will. Was fällt dir eigentlich ein, hier solche Äußerungen loszulassen??

W.S.

von szulass (Gast)


Lesenswert?

W.S. schrieb:
> temp schrieb:
>> Ich würde sagen zu erst nimmmst du mal deine arrogante,
>> besserwisserische Art etwas zurück. Bug hin oder her das interessiert
>> mich nicht mal so sehr. Selbst bei deinem geliebten Keil stehen..
>
>
> Ach nö, das ist nicht die Ebene, auf der ich hier weiter diskutieren
> will. Was fällt dir eigentlich ein, hier solche Äußerungen loszulassen??
>
> W.S.

Wo er recht hat...

Und das ist nicht der einzige Thread, wo Du so rüberkommst.

von Maximilian (Gast)


Lesenswert?

Hach, wäre das schön, wenn du dich einfach verziehen würdest.

Wird nur wohl nicht geschehen. :-(

von Joe (Gast)


Lesenswert?

Was ich hier heraushöre - ist das die 250 Euro oder wie viel auch immer 
für den Keil gut angelegt sind wenn man keine Zeit oder Lust hat sich 
die umfangreiche GCC Doku reinzuziehen. Ja, und dann noch ewig 
herumprobieren muss bis man ein akzeptables Ergebnis gefunden hat. Nee, 
ich spare schon mal und investiere die Zeit lieber in was anderes. Jedem 
das seine.

von Joe (Gast)


Lesenswert?

au Sch... - ich habe mir jetzt erst die Preise richtig angesehen.

von (prx) A. K. (prx)


Lesenswert?

LOL, der war gut. ;-)

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Ja :-D

Da ist die Doku dann doch nicht mehr ganz so umfangreich ... ;-)

Ich bin temp jedenfalls dankbar für die angegebenen, mir bislang 
unbekannten Optionen - denn mit denen wird der Code offenbar deutlich 
kleiner, in der Spitze nur noch 3/4 vom bisher besten Keil-Kompilat.
Das ist schon eine Hausnummer.

Wenn man wirklich viel aus einer Software rauskitzeln möchte, kommt man 
am Lesen des Handbuchs nicht vorbei ("Ach?").

Der eine beschwert sich, weil man nicht genug einstellen kann, dem 
anderen ist es zu viel. Allen wird man es wohl nicht Recht machen 
können.

Chris D.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Chris D. schrieb:
> denn mit denen wird der Code offenbar deutlich kleiner, in der Spitze nur
> noch 3/4 vom bisher besten Keil-Kompilat.

Du meinst GCC erzeugt kompakteren Code als der ARM compiler? Höchst 
unwahrscheinlich. Was bedeutet "in der Spitze"? Eine einzelne Funktion?
Zeig mal die Optionen, die Du bei letzterem verwendet hast. Übrigens 
kann man sich mit "size", bzw. "fromelf" genauere Informationen zu 
Code/Daten Segmenten ausgeben lassen.

Viele Grüße
Marcus

von Davis (Gast)


Lesenswert?

> Was bedeutet "in der Spitze"?

Die "beste" Optimierung: 
Beitrag "Re: ARM C-Compiler"

> Höchst unwahrscheinlich.

Warum? Wenn die Ergebnisse von oben stimmten, dann eher höchst 
wahrscheinlich. Nicht vergessen: alle haben das Drachenbuch im Schrank.

von Jürgen (Gast)


Lesenswert?

Hallo,
zuerst mal Danke für die vielen Antworten, ihr haut Euch die Sachen ja 
ganz schön um die Ohren. Zuerst vorweg ich bin Amateur und betreibe den 
"Sport" als reines Privatvergnügen.
Mir geht es eher darum bequem einzusteigen als das letzte Quäntchen 
Performance auszuquetschen. Was mir an Mikroe noch gefallen hat ist das 
Board das ich eingangs erwähnte.
Es wird zu 90% das abdecken was ich noch vorhabe. Es geht mir 
haupsächlich um eine komfortable Bedienoberfläche und Visualisierung mit 
Speichermöglichkeiten. (SD-Card). Ich hatte dafür auch schon mit Arduino 
geliebäugelt aber der Aufbau mit dem Umfang wie Mikroe es bietet besteht 
aus 3 Platinen und schaut ganz schön gebastelt aus. Der 8051 wird auch 
noch einige Zeit zum einsatz kommen.

@Pieter 250.- € ist zwar nicht nachgeschmissen aber bevor ich unzählige 
Abende damit verbringe bis der Compiler läuft und ich die ersten LED's 
zum leichten bringe investiere ich das Geld.
@Jörg ich werde mal die Foren durchforsten

Gruß Jürgen

von Bernd N (Gast)


Lesenswert?

Wenn du von der 8x51 Architektur kommst dann ist der Übergang zu ARM 
durchaus ein paar Tests wert. Es gibt ARM Boards für rund 20 Euro oder 
für das was du dir vorgenommen hast würde auch das folgende Board 
passen...

http://www.steitec.net/ARM-Boards/ARM-LPC1768-Cortex-M3-LCD-Board.html

Die Frage nach dem Compiler stellt sich beim Testen noch nicht allzu 
sehr aber für Hobbyzwecke fällt der Keil dann heraus. Wurde schon 
genannt...

http://www.coocox.org/Index.html

Brendes Emulator... lange her :-)

>> Emulator eigentlich recht komfortabel aber ich bin jetzt doch auf seine
>> (8051) Grenzen gestoßen. (Touch Screen SD Card etc.)

Bin mir sicher das man ein solches Vorhaben durchaus mit einem 8x51 
Derivat durchziehen kann, das bringt moderne 8x51 Typen noch lange nicht 
an deren Grenze.

von Bernd N (Gast)


Lesenswert?

Hat mich doch jetzt auch mal interessiert :-) aus dem gleichen Stall...

http://www.mikroe.com/big8051/

von Jürgen (Gast)


Lesenswert?

@ Bernd,
mag schon sein das das ich mit einem leistungsfähigeren 8051 Derivat das 
auch hinbekommen kann. Aber ich müsste dann das gleiche Geld ausgeben. 
Mein Keil Compiler ist schon sehr betagt und noch mit einem Dongle an 
der Paralellschnittstelle, auf einem neuen Rechner läuft das nicht mehr.
Ich habe bisher fast ausschließlich den AT89C51ED2 verwendet.Die 2K RAM 
sind nun auch nicht gerade üppig.Ich habe mir damals dafür extra ein 
eigenes POD gemacht damit ich die Softhook Restriktionen umgehen konnte. 
Ich bin auch etwas versessen auf das "mikromedia for STM32 M4 
(Mikroelektronika)" Bord weil es wunderbar in eine doppelte 
Unterputzdose passt. Es also an der Zeit mal was neues zu probieren.

von Bernd N (Gast)


Lesenswert?

Ich wollte es dir auch nicht ausreden :-) War nur als Hinweis gemeint da 
es für dich "nur" Hobby ist und die ARM Architektur doch ziemlich weit 
weg ist von deinem 8051. Die Silabs Chips hingegen bieten einem die 
gleichen Debug Möglichkeiten wie seiner Zeit der Biceps 51 von Brendes, 
Emulator sozusagen On Chip. Software gibts für den 8x51 Kern Haufenweise 
und kostenlos dazu, den Keil in Ehren aber den verwende ich schon ewig 
nicht mehr für 51er.

Wie dem auch sei, ARM ist in jedem Fall interessant und sicherlich der 
richtige Schritt, für Profis führt da eh kein Weg vorbei und schließlich 
ist der Einstieg nicht allzu schwer. Dennoch macht man häufig den Fehler 
eine neue Architektur zu verwenden obwohl ein 8Bit MC noch allemal gut 
genug ist.

Was mich bei deiner Auswahl ein wenig stört, ist die Tatsache keinen 
Vollzugriff auf die Sourcen zu haben. Gerade im ARM Segment gibt es 
unglaublich Viele Boards und freie Software. Seis drum, Viel Spaß mit 
dem Teil und vielleicht schreibst du dann mal deine Erfahrungen damit 
zusammen und postest dies hier.

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Davis schrieb:
> Warum? Wenn die Ergebnisse von oben stimmten, dann eher höchst
> wahrscheinlich. Nicht vergessen: alle haben das Drachenbuch im Schrank.

Aber vielleicht nicht die Möglichkeiten des armcc ausgenutzt...
Mir ist es jedenfalls noch nicht passiert, dass GCC kompakteren Code 
erzeugt.
Es wäre hilfreich, die eingestellten Optionen zu sehen. Ich weiß nicht, 
ob die leicht abgespeckte Keil-Version auch die Option "--translate_gcc" 
unterstützt. Damit werden, soweit möglich, GCC Optionen in die 
entsprechenden armcc Optionen übersetzt.

Viele Grüße
Marcus

von Jürgen (Gast)


Lesenswert?

@Bernd
was für einen Compiler verwendest Du für den 8051?

von Bernd N (Gast)


Lesenswert?


von Jürgen (Gast)


Lesenswert?

@Bernd
DANKE!

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
Noch kein Account? Hier anmelden.