mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mein erstes Programm Code kürzen


Autor: Lars L. (zirag)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck mal nach Arrays oder Vektoren in einem C-Buch.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Tubie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
}

Autor: Lars L. (zirag)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.