uC-Programmierung: Endlosschleifen befürchten?

21/02/2008 - 14:16 von Thomas Rachel | Report spam
Hallo,

ich hab mal wieder ein kleines Designproblem beim Programmieren meines
PIC. Und zwar bin ich mir unschlüssig, ob ich auf eventuelle
Fehlfunktion der chipinternen Peripherie reagieren sollte.

Konkret geht es um diverse Funktionen, bei denen gewartet werden muß:

* Freiwerden des UART-Sendebuffers
while ( !PIR1bits.TXIF );
* Fertigwerden des ADC
while ( ADC_RUN );
* Fertigwerden des Schreibens im internen EEPROM
while ( EECON1bits.WR );
* Warten auf Ereignisse am I2C-Bus:
while ( SSPCON2bits.SEN );
while ( SSPCON2bits.RSEN );
while ( SSPCON2bits.PEN );
while ( SSPSTATbits.BF );
while ( SSPCON2bits.RCEN );
while ( SSPCON2bits.ACKEN );


Diese Warteschleifen sollten ja irgendwann mal beendet werden, nàmlich
dann, wenn das ersehnte Ereignis eintritt. Nun die Frage: Sollte/Muß ich
damit rechnen, daß eine der Zustànde

* UART-Sendebuffer wird nie frei
* ADC wird nie fertig
* interner EEPROM wird nie fertig mit Schreiben
* I2C-Bedingung wird nie erfüllt

eintritt?


Die Beispielprogramme, die "man" so findet - auch die im Manual - haben
oft bzw. meistens nur obige Form. Aber was, wenn doch was passiert? Oder
brennt eher der Core durch als daß irgendeine der genannten
Fehlfunktionen eintritt?

Anders gefragt: Sollte man hier nicht eher einen Zàhler einbauen in der Art

count=0xFF; // 1 cycle: about 16 Loops - this one is more than enough...
while (ADC_RUN && count)
count--;
if (ADC_RUN)
// Oops. count has run out and ADC_RUN is still 1. Should never happen.
result = ADC_FAULT;
else
// read out the result
result = ADRES;

Würde das Programm natürlich etwas verkomplizieren...

Wie denkt ihr darüber?


TIA,

Thomas
 

Lesen sie die antworten

#1 Thorsten Ostermann
21/02/2008 - 14:21 | Warnen spam
Hallo Thomas!

Diese Warteschleifen sollten ja irgendwann mal beendet werden, nàmlich
dann, wenn das ersehnte Ereignis eintritt. Nun die Frage: Sollte/Muß ich
damit rechnen, daß eine der Zustànde

* UART-Sendebuffer wird nie frei
* ADC wird nie fertig
* interner EEPROM wird nie fertig mit Schreiben
* I2C-Bedingung wird nie erfüllt

eintritt?



Wenn dein Prozessor niemals nicht hàngen bleiben darf, solltest du einen
Watchdog verwenden, falls nicht sowieso einer vorhanden ist, den du
einfach aktivieren kannst (wie bei vielen AVRs).

Gruß
Thorsten
"Profi kommt von Profession, d.h. wenn man lange was in dem Fach
erfolgreich gemacht hat. Sonst heisst man Consultant ;-) "
Georg Acher in News:de.sci.electronics zur Frage: Wie wird man Profi?

Ähnliche fragen