Hallo zusammen,
ich bin gerade dabei den Unterricht meiner Technikerschule
nachzubereiten.
Nun kam es zu einem Verständnisfrage beim nachvollziehen von Code einer
Musterlösung zur Übungsaufgabe.
Natürlich habe ich vorerst das Forum durchsucht usw. aber eine 100%
Ja/Nein zu meiner Frage konnt eich daraus nicht ablesen.
Ziel der Übungsaufgabe ist es eine Routine zum beschrieben des EEPROM zu
entwickeln.
Musterlösung
1 | void saveResetFlag(unsigned char Ursache)
|
2 | {
|
3 | unsigned char oldSREG;
|
4 | oldSREG=SREG; // Sichern wegen IR
|
5 | cli(); // alle IR aus wegen Schreibvorgang
|
6 |
|
7 | /* Alle Schreibvorgänge beendet im EEPROM ? */
|
8 | while(EECR & (1<<EEWE)); // Hier mein Verständnisproblem
|
9 |
|
10 | /* Adresse im EEPROM festlegen*/ EEARH = 0x00;
|
11 | EEARL = 0x02;
|
12 |
|
13 | // Wert ins Datenregister
|
14 | EEDR = Ursache;
|
15 |
|
16 | /* Schreiben vorbereiten */
|
17 | EECR |= (1<<EEMWE);
|
18 |
|
19 | /* Schreiben */
|
20 | EECR |= (1<<EEWE);
|
21 | SREG=oldSREG; // SREG zurücksichern
|
22 | }
|
Nun zur Fragestellung:
Mit der While Schleife while(EECR & (1<<EEWE)); wird geprüft ob das
EEPROM zum schreiben bereit ist.
Genauer Gesagt ob im EEPROM Control Register (EECR) das Bit 1 (EEWE)
EEPROM Write Enable gesetzt ist, also noch ein Schreibvorgang läuft. -->
Ist meine Annahme richitg?
Dazu wird mit EECR & (1<<EEWE) das Byte EECR genommen und EECR &
(1<<EEWE) alleinig auf das Bit 1 maskiert. --> Ist meine Annahme
richitg?
Sofern das Bit1 = 1 ist wird b00000010 also dec 2 ausgegeben
Sofern das Bit1 = 0 ist wird b00000000 also dec 0 ausgegeben
Wie reagiert die while Schleife darauf? Bisherig war meine Annahme
while(1) entspricht while(true) --> Schleife läuft
meine neue Annahme heißt jetzt while(>=1) entspricht while(true) -->
Schleife läuft
Was stimmt hier nun?
Ich hoffe mir kann jemand auf die Sprünge helfen. Danke und schönen Tag!