mikrocontroller.net

Forum: Compiler & IDEs Codegrößenproblem


Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin seit kurzem auf den C Compiler von CodeVision umgestiegen und
auch eigentlich total begeistert davon, nur hab ich jetzt bei meinem
Tiny26 das Problem das der Program Flash hinten und vorne nicht
reicht... kennt jemand das Problem bei C Projekten?

Ist Assembler da echt die einzige alternative???

Wie ist das eigentlich, wenn ich ein unsigned char array im Flash bzw.
EEPROM ablege, verbraucht das dann immer gleich ein Word (16Bit) pro
Eintrag obwohl ja eigentlich 8 ausreichen würden oder hab ich da was
falsch eingestellt?

Gruß
Malte.

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte,

Codevision und Imagecraft erzeugen viel schlechteren Code als AVRGCC
(WinAVR). Probiers aus !

Den besten Code erzeugt IAR, welcher aber nicht bezahlbar ist ...



Gruß

Fiffi

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

was bitte ist IAR??? ist doch sicher ne Abkürzung oder?

Gruß
Malte.

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte,

>was bitte ist IAR??? ist doch sicher ne Abkürzung oder?

Nein, IAR ist keine Abkürzung.

Mit IAR meine ich die Embedded Workbench von IAR Systems. Schau mal
unter www.iar.com . Sie haben für fast jeden Mikrocontroller einen
C-Compiler ...



Gruß

Fiffi

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Malte
verwendest du evtl. Variablen vom Typ float oder double? Wenn ja:
Da der AVR das nicht in Hardware kann verbraucht das sehr viel Flash.
Ansonsten passt in 2k schon ordentlich Code.

Matthias

Autor: Malte Struebert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe zwei Stellen wo ich float bzw. double verwende das stimmt
schon, aber leider lässt sich das wohl kaum realisieren obwohl die
Anwendung (also den Teil) der die Float's verwendet eher total popelig
ist... es geht darum einen über einen AD Wandler eingelesenen Wert als
Spannung auszugeben mit einer Nachkommastelle.

Aber wie gesagt das ist nur ein kleiner Teil des Codes... beim Rest hab
ich schon drauf geachtet kein Float zu verwenden... aber im grunde geht
es ja hauptsächlich um die Librarys und ob ich die nun einmal oder
mehrmals verwende spielt ja dann "kaum" noch ne Rolle.

Aber auch ohne den Float teil ist das ganze schon recht eng...
Mein Problem ist das ich 4 Tabellen habe wo ich Lookups machen muß da
der Sensor den ich anzeigen will keinen lineraen verlauf hat.
Anfangs hatte ich noch 255er Arrays aber das ist ja unmöglich mit 2k
Flash und 128 Byte EEPROM, also bin ich dazu übergegangen die Arrays
auf 32 Byte zu reduzieren und eine Interpolation durchzuführen... jetzt
passen die Arrays wenigstens ins EEPROM aber trotzdem reicht mein Flash
noch nicht aus, obwohl das Programm eigentlich nix anderes tut als 6 AD
Wandler werte auszulesen, diese zu Lookupen (blödes Wort) und das
Ergebnis des Table lookups auf einem LCD Display auszugeben... dazu
kommt dann noch eine kleine Glättung der Werte weil die Sensoren
teilweise häftig springen und der Benutzer das nicht mitbekommen soll.
Mehr macht das Progi eigentlich nicht, das sollte doch wohl in 2k
unterzubringen sein oder???!!!

PS: Bei IAR hab ich mal nachgeschaut, aber keinen Preis gefunden... ist
das Teil echt so sündhaft Teuer und ist es sein Geld denn Wert? ich
mein um wieviel kleiner wird der Code werden??? Wunder wird man ja wohl
keine erwaten dürfen oder?

Gruß
Malte.

Autor: Lolly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte,

sobald du ein mal floats verwendest baut dir der compiler gleich die
ganzen routinen für die Softwarefließkommarechnung in dein Programm
ein! Es macht also im prinzip nichts aus, ob du das einmal oder 20mal
verwendest.. Ich hab festgestellt, dass bei meinen atmega163 das
programm um schlappe 4kByte(!) angewachsen ist, nur weil ich einmal
zwei floats durcheinander geteilt hab.
Ich habe eine Wetterstation entwickelt bei der ich natürlich auch
nachkommastellen für z.B. die Temperatur haben will.
Meine Lösung war es die Werte éinfach mit z.B. 10^5 zu multiplizieren
und mit diesen Zahlen zu rechnen. Wenn du das hinterher durch 10^4
teilst ist die letzte Ziffer deine erste nachkommastelle.
Das Komma kriegst du bei der Ausgabe rein, in dem du diesen (um den
faktor 10 zu grossen Wert) durch 10 teilst, dann das komma schreibst,
den urpsrünglichen wert Modulo (Operator %) 10 nimmst und das dann raus
schreisbt.
Tut wunderbar, kommt ohne Float aus und ist nur noch ein paar huntert
byte gross.. ;-)

Gruß,
Lolly

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Malte,

ich habe vor 2 Monaten die C-Compiler mal verglichen, und die
Ergebnisse gepostet. Es hat den Code auch mal jemand mit IAR übersetzt
...

Den Thread findest du unter:
http://www.mikrocontroller.net/forum/read-1-49864.html#49864

>PS: Bei IAR hab ich mal nachgeschaut, aber keinen Preis gefunden...
Wenn ich mich richtig erinnere, liegt der Preis im Bereich von
8000..10000 Euro.  (Bin aber nicht mehr ganz sicher ...)

>ist das Teil echt so sündhaft Teuer und ist es sein Geld denn Wert?

Für Hobbyanwender auf keinen Fall ...


Gruß

Fiffi

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Fiffi

Du mußt bei Preisschätzungen auf die Nullen aufpassen, die vor dem
Komma stehen. Für die genannten Beträge kannst Du Dir mehrere Compiler
aussuchen. Generell liegt IAR mit den 'Preismodellen' in etwa mit
Keil gleichauf.
Aber, daß man die Preise nicht im Internet findet, spricht für sich.

@Micki
Bevor Du mir wieder Deine Frage stellst: von keinen der genannten
Firmen bekomme ich Provision :-)

Autor: Fiffi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael,

den Keil PK51 verkauft www.elektronikladen.de für 2600 Euro.


Ist ja gar nicht soo teuer ;)



Gruß

Fiffi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.