Hi again, ich bin blutiger Einsteiger, habe mir eine kleine Schaltung mit Einstelliger 7Segment Anzeige gebastelt und nun eine kleine Animation damit programmiert. Klappt auch alles wunderbar. Nun ist meine Frage, kann man den (angehängten) Code irgendwie noch verkürzen, ohne jedes mal die ganzen Ausgänge einzeln setzen zu müssen? Nicht böse sein, ist mein erstes Programm und mit C hatte ich auch noch nie zu tun, hab lediglich Programmier-Erfahrung in ActionScript. Vielen Dank im Vorraus ;) mfg
> kann man den (angehängten) Code irgendwie noch > verkürzen, ohne jedes mal die ganzen Ausgänge > einzeln setzen zu müssen? Du kannst Deine "LED-Muster" als Tabelle in den Flash legen. Das gesamte Programm besteht dann nur noch aus einer Schleife: Von 0 bis Länge der Tabelle: Lade LED-Muster Muster an Port Delay Otto
UND: Definiere dir die Segemente als aussagekräftige Namen: #Define SEG_DISP_1 0b11110110 Dann kann man später den Code auch noch lesen, denn unter "PORTC = 0b11101101;" kann ich mir absolut nichts vorstellen unter "PORTC = SEG_DISP_1" aber, dass eine 1 dargestellt wird, bzw. werden sollte :) Gruß Roland
>UND: Definiere dir die Segemente als aussagekräftige Namen: >#Define SEG_DISP_1 0b11110110 Das braucht man aber auch nur, wenn man nur bestimmte Zeichen ausgeben will. Wenn man die Segmente einzeln ansteuern bzw. Muster ausgeben will, ist ein char-Array sinvoller.
hmm, das stimmt natürlich, scheint auch als ob er Muster ausgibt. das Array kann man natürlich auch gleich mit den Konstanten initialisieren: int countdown[10] = { SEG_DISP_9, SEG_DISP_8, SEG_DISP_7.....} (mit den entsprechenden Schlüsselwörtern dass das Array im Flash landet, die ich aber jetzt nicht auswendig weiß :-P) Für die Muster könnte man sich dann u.U. auch mehr oder weniger sprechende Namen einfallen lassen. (oder zumindest als Kommentar dahinter schreiben) hier hab ich schon mal folgende Notation gesehen: 1: " " 2: |"|_| 3: |"|"| 4: =|" 5: |_|"| 6: |_|=| 7: |" " 8: |=|=| 9: |=|"| zugegeben, man braucht schon etwas Fantasie :-) Wenn man zweizeilig arbeitet gehts noch einfacher, z.B.: 9: |_| | Gruß Roland
meine Erfahrung: wenn ein µC das macht was man will, fasse die Quelle nicht mehr an!!!! Durch opt. Versuche baut man automatisch Fehler ein! All das was mann vorher getestet hatte seht erneut zum Test an! Nutzen -> 52,5 Byte gespart Nachteil -> Kunde meckert 2 neue Bugs an Optimierungen lohnen nur auf Systemen die nicht "geschlossen" sind! optimieren kann man nach - Codegröße - Ausführungsgeschwingigkeit ein µC ist ein geschlossenes System Scheißegal wenn der Code reinpasst und er macht es dann: "FINGER WEG" Klaus
... oder dahingehend optimieren, sodas der Code auch nach 5 Jahren noch lesbar und verständlich ist. Vieles, was mir gerade im Kopf rumgeht wird schnellstmöglich reingetippt. Läuft dann alles so wie ich es will, wird die Routine nochmals etwas optimiert, schöner geschrieben und anschließend dokumentiert. Gruß, Tubie
Klaus wrote: > Scheißegal wenn der Code reinpasst und er macht es > > > dann: "FINGER WEG" Aber nur, wenn man sich wirklich 110%-ig sicher ist, daß man ihn nie mehr erweitern muß. Es ist viel einfacher in einem modular geschriebenen Code die Stelle zu finden, an der man einen Parameter ändern muß, als in einem superlangen Spaghetticode an tausenden Stellen was zu ändern. Ganz abgesehen davon, daß man beim nächsten Programm nicht wieder ganz von vorne anfangen muß, sondern die einmal erstellten Module weiter verwenden kann. Die Zeit, die man zu Anfang spart, zahlt man beim nächsten Projekt zehnfach wieder drauf. Peter
Ich glaube hier geht es nicht darum, wie man später den Code warten kann, was natürlich sehr wichtig ist, sondern um Grundlegende programmiertechniken. Ich habe dein Programm nur kurz überflogen, deswegen bitte bei eventuelle Fehlern ein Auge zudrücken. Die Syntax ist von java, da ich bei C immer ein wenig spicken muss und mein Spickzettel gerade nicht greifbar ist ;) for(int i=0; i<ende; i++){ // Mache das Ganze "ende" mal _delay_ms(100); // Verzögere 100ms meineVariablen = meineVariabel + meinWert; // neuenWertBerechen PORTC = meineVariabel; // neuen Wert an 7-SegmentAnzeige ausgeben } fertig. die Variable "meinWert" hab ich hier als feste Größe angenommen, natürlich kannst du deine Werte in einer anderen Weise speichern z.B. ein Array was auch nicht gerade schön ist, aber es ist eine Möglichkeit. int meinIndex = 0; for(int i=0; i<ende; i++){ // Mache das Ganze "ende" mal _delay_ms(100); // Verzögere 100ms meineVariablen = meineVariabel + meinArray(meinIndex); //neuenWertBerechen meinIndex++; // Nächste Zahl im Array PORTC = meineVariabel; // neuen Wert an 7-SegmentAnzeige ausgeben }
Danke schonmal für die Antworten ... @Markus, das sieht für mich verständlich aus ;) Mir geht es auch grad so ... Deine Java Syntax sieht der von ActionScript sehr ähnlich, in C ist das aber alles anders. Ich denke, ich schau mir erstmal ein paar Tutorials über die C Programmierung an. Mfg
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.