Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
microcontrollertechnik:vorgaben_fuer_die_softwareentwicklung [2022/02/26 02:50]
tfischer [Variablen - leserlich, initialisiert und separat]
microcontrollertechnik:vorgaben_fuer_die_softwareentwicklung [2024/09/24 13:51] (aktuell)
mexleadmin
Zeile 34: Zeile 34:
                  AVR-USB-PROGI Ver. 2.0                  AVR-USB-PROGI Ver. 2.0
  
-Software:        Atmel Studio Ver. 7.0.1417+Software:        Microchip Studio Ver. 7.0.1417
  
 Funktion:        Diese Programm sol eine einfaches Beispiel der Ein- und Ausgabe am MiniMEXLE sein. Funktion:        Diese Programm sol eine einfaches Beispiel der Ein- und Ausgabe am MiniMEXLE sein.
Zeile 61: Zeile 61:
  
 =============================================================================*/ =============================================================================*/
-</code>+</sxh>
  
 ++++ ++++
Zeile 156: Zeile 156:
 ++++Beispiel für Konstanten| ++++Beispiel für Konstanten|
  
 +{{tablelayout?tableSort=1&tableSearch=1}}
 |<fc #800000>**SCHLECHT**</fc>| <sxh c; first-line: 1> |<fc #800000>**SCHLECHT**</fc>| <sxh c; first-line: 1>
 // Konstanten // Konstanten
Zeile 224: Zeile 225:
 // Variablen // Variablen
  
-const int       maxAnzSpieler   = 2;    // Maximale Anzahl der Spieler +const uint8_t   maxAnzSpieler   = 2;    // Maximale Anzahl der Spieler 
-uint8_t         gemesseneLaenge = 0;    // gemessene Länge in Meter +uint16_t        gemesseneLaenge = 0;    // gemessene Länge in Meter 
-unsigned char   gemesseneBreite = 0;    // gemessene Breite in Meter+uint8_t         gemesseneBreite = 0;    // gemessene Breite in Meter
 bool            zeichenAusgabe  = 1;    // Wahrheitswert zur Anzeige, ob bool            zeichenAusgabe  = 1;    // Wahrheitswert zur Anzeige, ob
                                         // ein Zeichen ausgegeben werden darf                                         // ein Zeichen ausgegeben werden darf
Zeile 267: Zeile 268:
 */ */
 { {
-    for( int aktuelleSchluesselPosition=ERSTE_SCHLUESSEL_POSITION; a<=LETZTE_SCHLUESSEL_POSITION; aktuelleSchluesselPosition++)+    for( uint8_t aktuelleSchluesselPosition=ERSTE_SCHLUESSEL_POSITION; a<=LETZTE_SCHLUESSEL_POSITION; aktuelleSchluesselPosition++)
     {                        // durchlaufe alle Schlüsselpositionen     {                        // durchlaufe alle Schlüsselpositionen
         if(schluesselArray[aktuelleSchluesselPosition]==schluessel) return aktuelleSchluesselPosition;         if(schluesselArray[aktuelleSchluesselPosition]==schluessel) return aktuelleSchluesselPosition;
Zeile 274: Zeile 275:
     return 0;     return 0;
 } }
-</sxh>      In diesem Beispiel wäre der Funktionsname schluesselPosition statt schluesselPositionFinden auch geeignet gewesen.  \\ Weiterhin bietet es sich an hier auch einen Zeiger auf das Array und die Werte für erste und letzte Position als Parameter der Funktion zu übergeben, um diese flexibler anwenden zu können.  |+</sxh>      In diesem Beispiel wäre der Funktionsname ''SchluesselPosition'' statt ''schluesselPositionFinden'' auch geeignet gewesen.  \\ Weiterhin bietet es sich an hier auch einen Zeiger auf das Array und die Werte für erste und letzte Position als Parameter der Funktion zu übergeben, um diese flexibler anwenden zu können.  |
  
 ++++ ++++
Zeile 397: Zeile 398:
 |<fc #800000>**SCHLECHT**</fc>| <sxh c; first-line: 1> |<fc #800000>**SCHLECHT**</fc>| <sxh c; first-line: 1>
 ... ...
-    if (i==0) doZero;    // wenn 0 dann null +    if (i==0) doZero();    // wenn 0 dann null 
-    if (i==1) doOne;     // wenn 1 dann eins +    if (i==1) doOne();     // wenn 1 dann eins 
-    if (i==2) doTwo;     // wenn 2 dann zwei +    if (i==2) doTwo();     // wenn 2 dann zwei 
-    if (i==3) doThree;   // wenn 3 dann drei +    if (i==3) doThree();   // wenn 3 dann drei 
-    if (i==4) doFour;    // wenn 4 dann vier +    if (i==4) doFour();    // wenn 4 dann vier 
-    if (i==5) doFive;    // wenn 5 dann fünf+    if (i==5) doFive();    // wenn 5 dann fünf
 ... ...
  
Zeile 409: Zeile 410:
 ... ...
     switch(i) {     switch(i) {
-        case 1: doOne;   break;    // könnte alternativ auch +        case 1: doOne();   break;    // könnte alternativ auch 
-        case 2: doTwo;   break;    // über Pointer auf Funktionen +        case 2: doTwo();   break;    // über Pointer auf Funktionen 
-        case 3: doThree; break;    // wie Beispiel 3 gelöst +        case 3: doThree(); break;    // wie Beispiel 3 gelöst 
-        case 4: doFour;  break;    // werden +        case 4: doFour();  break;    // werden 
-        case 5: doFive;  break;+        case 5: doFive();  break;
         default: break;         default: break;
     };     };
Zeile 424: Zeile 425:
 ... ...
     switch(i) {     switch(i) {
-        case 1: doOne;   break;                // - die ersten beiden Cases +        case 1: doOne();   break;                // - die ersten beiden Cases 
-        case 2: doOne;   break;                //   haben die gleichen Konsequenzen +        case 2: doOne();   break;                //   haben die gleichen Konsequenzen 
-        case 3: doThree;doFour;doFive; break;  // - hier werden - je nach Zahl -  +        case 3: doThree();doFour();doFive(); break;  // - hier werden - je nach Zahl -  
-        case 4: doFour;doFive;         break;  //   nach und nach aufeinanderfolgende +        case 4: doFour();doFive()          break;  //   nach und nach aufeinanderfolgende 
-        case 5: doFive;                break;  //   Funktionen aufgerufen +        case 5: doFive()                   break;  //   Funktionen aufgerufen 
-        case 6: doOne;   break;                // - hier haben mehrere Cases +        case 6: doOne();   break;                // - hier haben mehrere Cases 
-        case 7: doOne;   break;                //   haben die gleichen Konsequenzen +        case 7: doOne();   break;                //   haben die gleichen Konsequenzen 
-        case 8: doOne;   break;                //   +        case 8: doOne();   break;                //   
-        case 9: doOne;   break;                //  +        case 9: doOne();   break;                //  
         default: break;         default: break;
     };     };
Zeile 441: Zeile 442:
 ... ...
     switch(i) {     switch(i) {
-        case 126...9 : doOne;   break;    // Einzelne Zahlen können mit Komma getrennt und Gruppen mit '...' kombiniert werden +        case 1
-        case 3:            doThree;           // ohne Break werden alle folgenden Befehle bis zum nächsten Break ausgeführt +        case 2:                                 // Einzelne Zahlen können mit case's untereinander ... 
-        case 4:            doFour;             +        case 6 ... 9:      doOne();   break;    // ... und Gruppen mit '...' kombiniert werden 
-        case 5:            doFive; +        case 3:            doThree();           // Ohne Break werden alle folgenden Befehle bis zum nächsten Break ausgeführt 
 +        case 4:            doFour();             
 +        case 5:            doFive()
         default:           break;         default:           break;
     };     };
Zeile 465: Zeile 468:
 |<fc #008000>**GUT**</fc>| <sxh c; first-line: 1> |<fc #008000>**GUT**</fc>| <sxh c; first-line: 1>
 ... ...
-    int maxSteps            = 6; +    uint8_t maxSteps            = 6; 
-    int Grenze[maxSteps+1]  = { 0, 7,12,20,22,60,85}; +    uint8_t Grenze[maxSteps+1]  = { 0, 7,12,20,22,60,85}; 
-    int jSummand[maxSteps]  = { 2, 5, 3,10, 7, 1};+    uint8_t jSummand[maxSteps]  = { 2, 5, 3,10, 7, 1};
  
-    for(int steps; steps<maxSteps+1; steps++) {+    for(uint8_t steps; steps<maxSteps+1; steps++) {
         if( (Grenze[steps] < i) && (i <= Grenze[steps+1]) ) j = j + jSummand[steps];         if( (Grenze[steps] < i) && (i <= Grenze[steps+1]) ) j = j + jSummand[steps];
     };     };
Zeile 485: Zeile 488:
     if (( 7<i) && (i<=12)) {     if (( 7<i) && (i<=12)) {
         j=j+5;         j=j+5;
-        DoOne;+        DoOne();
     }     }
     if ((12<i) && (i<=20)) j=j+3;     if ((12<i) && (i<=20)) j=j+3;
Zeile 496: Zeile 499:
     else if (( 7<i) && (i<=12)) {     else if (( 7<i) && (i<=12)) {
         j=j+5;         j=j+5;
-        DoOne;+        DoOne();
     }     }
     else if ((12<i) && (i<=20)) { j = j + 3;};     else if ((12<i) && (i<=20)) { j = j + 3;};
Zeile 508: Zeile 511:
     if      (i<=7) {     if      (i<=7) {
         j=j+2;         j=j+2;
-        DoOne;+        DoOne();
     }     }
     else if (( 7<i) && (i<=12)) {     else if (( 7<i) && (i<=12)) {
         j=j+5;         j=j+5;
-        DoZero; +        DoZero()
-        DoOne;+        DoOne();
     }     }
     else if (12<i){     else if (12<i){
         j=j+3;         j=j+3;
-        DoZero; +        DoZero()
-        DoOne;+        DoOne();
     };     };
 ... ...
Zeile 525: Zeile 528:
 |<fc #008000>**GUT**</fc>| \\ noch leserlich: \\ <sxh c; first-line: 1> |<fc #008000>**GUT**</fc>| \\ noch leserlich: \\ <sxh c; first-line: 1>
 ... ...
-    if      (i<=7) { +    if      ( i <= 7 ) { 
-        j=j+2;+        j = j + 2;
     }     }
-    else if (( 7<i) && (i<=12)) { +    else if (( 7 < i ) && ( i <= 12)) { 
-        j=j+5; +        j = j + 5; 
-        DoZero;+        DoZero();
     }     }
-    else if (12<i){ +    else if ( 12 < i){ 
-        j=j+3; +        j = j + 3; 
-        DoZero;+        DoZero();
     };     };
-    DoOne;+    DoOne();
 ... ...
 </sxh>       auch möglich, aber etwas schwerer leserlich:  <sxh c; first-line: 1> </sxh>       auch möglich, aber etwas schwerer leserlich:  <sxh c; first-line: 1>
 ... ...
-    if           (i<=7)              j=j+2; +    if           ( i <= 7)                j = j + 2; 
-    else{if     (( 7<i) && (i<=12))  j=j+5; +    else{if     (( 7 <  i) && (i <= 12))  j = j + 5; 
-        else if  (12<i)              j=j+3; +        else if  (12 <  i)                j = j + 3; 
-        DoZero;+        DoZero();
     };     };
-    DoOne;+    DoOne();
 ... ...
 </sxh>    | </sxh>    |
Zeile 561: Zeile 564:
     initAll;     initAll;
     while(1){            // es wäre auch for(;;){} möglich     while(1){            // es wäre auch for(;;){} möglich
-        Eingabe; +        Eingabe()
-        Verarbeitung; +        Verarbeitung()
-        if (CancelButton==1) main; +        if (CancelButton==1) main()
-        Ausgabe;+        Ausgabe();
     }     }
 } }
Zeile 572: Zeile 575:
 void main() void main()
 { {
-    initOneTimeFunctions;+    initOneTimeFunctions();
  
     while(1){                        // äußere Endlos-Schleife     while(1){                        // äußere Endlos-Schleife
-        initOtherFunctions;+        initOtherFunctions();
         CancelButton = 0;         CancelButton = 0;
         while(!CancelButton){        // innere Schleife mit Abbruchbedingung         while(!CancelButton){        // innere Schleife mit Abbruchbedingung
-            Eingabe; +            Eingabe()
-            Verarbeitung; +            Verarbeitung()
-            if (!CancelButton) Ausgabe;+            if (!CancelButton) Ausgabe();
         };         };
     }     }
Zeile 590: Zeile 593:
  
 |<fc #800000>**SCHLECHT**</fc>| <sxh c; first-line: 1> |<fc #800000>**SCHLECHT**</fc>| <sxh c; first-line: 1>
-    for(int xpos=0;xpos<10;xpos++){ +    for(uint8_t xpos=0;xpos<10;xpos++){ 
-        initYPos;+        initYPos();
         for(int ypos=0;ypos<20;ypos++){         for(int ypos=0;ypos<20;ypos++){
-            Eingabe; +            Eingabe()
-            Verarbeitung;+            Verarbeitung();
             if (CancelButton) goto Abbruch;             if (CancelButton) goto Abbruch;
         };         };
Zeile 603: Zeile 606:
 </sxh>      | </sxh>      |
 |<fc #008000>**GUT**</fc>| <sxh c; first-line: 1> |<fc #008000>**GUT**</fc>| <sxh c; first-line: 1>
-    int xposMax=10, yposMax=20;+    uint8_t xposMax=10, yposMax=20;
  
-    for(int xpos=0 ; xpos<xposMax ; xpos++){ +    for(uint8_t xpos=0 ; xpos<xposMax ; xpos++){ 
-        initYPos; +        initYPos()
-        for(int ypos=0 ; ypos<yposMax ; ypos++){ +        for(uint8_t ypos=0 ; ypos<yposMax ; ypos++){ 
-            Eingabe; +            Eingabe()
-            Verarbeitung;+            Verarbeitung();
             if (CancelButton) break;    // bricht nur die ypos-Schleife ab!             if (CancelButton) break;    // bricht nur die ypos-Schleife ab!
         };         };
Zeile 621: Zeile 624:
 ++++ ++++
  
-  * _delay_ms() und _delay_us() sind zu 99% nicht notwendig. Verwenden Sie stattdessen Interrupts, bzw. Timer. Es können z.B. durch Interrupts Takte angelegt werdentakt10ms, takt100ms, takt1s. Diese können dann im main() Verzweigungen in einer Zustandsmaschine auslösen.+  * _delay_ms() und _delay_us() sind zu 99% nicht notwendig. Verwenden Sie stattdessen Interrupts, bzw. Timer. \\ Es sollten durch Interrupts Takte angelegt werden, z.B. takt10ms, takt100ms, takt1s welche nur im ''main()'' abgefragt werden.  
 +  * Häufig bietet es sich an, in den Takten dann auch Verzweigungen in einer Zustandsmaschine aufzubauen (z.B. mit Zustandsvariablen wie ''outputState'': ''<nowiki>switch(outputState) {case initOutput: outputState++; ... break; case startOutput: outputState++; ... break; }</nowiki>'').
   * Wenn Sie Zahlen in Variablen speichern und diese auch mathematisch weiterverwenden, so wandeln Sie diese Variable erst bei der Ausgabe in das ASCII-Format um.   * Wenn Sie Zahlen in Variablen speichern und diese auch mathematisch weiterverwenden, so wandeln Sie diese Variable erst bei der Ausgabe in das ASCII-Format um.
 ++++Beispiel für Variablen mit Ausgabe| ++++Beispiel für Variablen mit Ausgabe|
Zeile 643: Zeile 647:
     Laengen[i] = Laenge;     Laengen[i] = Laenge;
     Flaeche    = Laenge * Breite;     Flaeche    = Laenge * Breite;
-    LCD_putc(Laengen[i]+ ASCII_ZERO);+    LCD_putc(Laengen[i] + ASCII_ZERO);
 ... ...
 </sxh>  | </sxh>  |
Zeile 651: Zeile 655:
 ====== Bewertung ====== ====== Bewertung ======
  
-Zur Bewertung lege ich {{microcontrollertechnik:bewertung_ws21_prjxx.xlsx|diese Checkliste (xls-File)}} als Maßstab an.+Zur Bewertung lege ich {{microcontrollertechnik:bewertung_ss24_prj99.xlsx|diese Checkliste (xls-File)}} als Maßstab an.