Hallo, ich hab hier mal was für Leute die ein bissl Zeit und Lust haben, sich diesen Code mal genauer anzusehen. Es geht um einen Bitmustergenerator mit nem AT90S8535. Ich hab das Gerät inzwischen komplett aufgebaut (also änder ich die Hardware nicht mehr...) und mir fallen noch ein paar kleine Erweiterungen ein. Das Problem ist nur, dass der Code so schon fast den Controller sprengt. Jetzt wüsste ich halt gerne, wie ich den ein bisschen effizienter schreiben könnte (vielleicht noch mehr Funktionen?) Vielleicht fällt dem einen oder anderen noch was ein. Nebenbei, ich nutz den AvrGCC, und hab auch schon beste Optimierung aktiviert... Viele Grüße und Danke Martin
Da fehlt noch lcd.h Hast Du mal ins Listing geschaut, welche Funktionen Dir zu groß erscheinen, die man optimieren könnte ? Peter
Hi Die paar Zeilen sollen 8k Code geben? Kann ich nicht glauben. Wenn du eine compilierfähige Version (die lcd.h und deren Implementation fehlt) lieferst würde ich das mal durchprobieren. Das einzige was knapp werden könnte ist das RAM da du unter anderem relativ viele Strings nicht im Flash ablegst. Ich würde das ganze auf etwa 2-3k schätzen (kenne die lcd.c zwar nicht aber so ein HD44780 ist ja nicht gerade hochkomplex) Was mir auffällt ist das du viele Variablen global definierst. Warum? Lokale Variablen sind fast immer ausreichend und werden "dynamisch" auf dem Stack angelegt. Matthias
das mit der variablendeklaration ist mehr oder weniger unabsichtlich, was c angeht bin ich ziemlicher anfänger, das ist mein erstes größeres ding! im anhang sind die 3 dateien: pat_gen_2.c, lcd.c und lcd.h die lcd-routinen sind die von peter fleury, bei dem ich mich an dieser stelle ausdrücklich bedanke! ich glaube es liegt an der lcd.c, dass der code so dick wird, vielleicht kann man da was rausschmeißen? wenn ich das so richtig sehe, sind die ganzen strings, die aufs lcd kommmen, doch im flash...zumindest sieht die hex-datei nachher ziemlich danach aus (erinnert mich an asm-zeiten, ganz am ende der datei die ganzen strings mit nem punkt dahinter...) also eigentlich müssten die im flash sein, was nachher im RAM ist, ist das array mit den max 100 speicherwerten wie die ganzen variablen oben, aber das sind ja noch kein e 256 Byte
Hi das die Strings im Flash liegen ist klar. Irgendwo müssen sie ja gespeichert werden. Beim start deines µC werden aber alle Strings ins SRAM kopiert die du nicht expliziet als PROGMEM deklarierst und spezielle behandelst. Aber zu dem Thema gibt es genug Beiträge hier im Forum. Bei mir compiliert dein Code zu 3,1k Code. Also noch reichlich Platz im 8535. Verwechselst du etwa HEX Dateigröße mit der Größe des Programm im Flash? Matthias
ich glaub schon.... wo seh ich denn die größe, die es nachher im flash belegt?
avr-size dateiname.hex gibt den benötigten Flash Speicher aus. Ansonsten hab ich mal gelesen, dass Dateigröße geteilt durch 2,8 die ungefähre Programm Größe ergibt.
ansonst die hex datei in avrstudio im simulator laden. da zeigt der auch genau an bis wohin der code geht
Das ganze kann man auch sehr schön nach jedem Compilieren anzeigen lassen: avr-sizex.exe ins /bin Verz. von WinAVR kopiern und Makefile so umschreiben: # Display size of file. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex ELFSIZE = $(SIZE) -A $(TARGET).elf SIZEX = avr-sizex --mcu=$(MCU) $(TARGET).elf sizebefore: @echo @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi sizeafter: @echo @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi ;$(SIZEX) (siehe: http://www.kreatives-chaos.com/index.php?seite=avrgcc ) mfG aleX
@ alexander: danke für den tipp, kann man gut gebrauchen, v.a. die schöne darstellung der speicherbelegung ;-)
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.