Forum: Mikrocontroller und Digitale Elektronik Programmbeenden nach Abfrage


von Klaus (Gast)


Lesenswert?

Hallo
mit dem folgenden Teil möchte ich abfragen ob ein IC am Bus hängt. Dazu 
gebe ich erst die Adresse an und Frage ob er sich meldet.
1
ret = i2c_start(IC1);          // Start Lesen 
2
  if (ret == 0)
3
    {                         // Wenn IC1 ein OK sendet...
4
    
5
    MMM_IC1 = i2c_readNak();    //...speichere unteres Bit
6
    }
7
  else                                // Fehlererkennung
8
    {                              // Wenn IC1 kein OK sendet
9
    lcd_command(LCD_CLEAR);      // Leere Display
10
    _delay_ms(2);
11
    lcd_printlc(1,13,"READ");    // "Lesevorgang"
12
    lcd_printlc(2,13,"NOK");    // "Nicht OK (NOK)"
13
    exit();
14
    }
mit exit soll er eigentlich stoppen und das Programm beenden oder die 
Anzeige bringen. Er läuft aber weiter. exit wird nicht beachtet. Wie 
kann ich das machen?

LG Klaus

von spess53 (Gast)


Lesenswert?

HI

>Er läuft aber weiter

Und wohin soll es denn 'exiten'?

MfG Spess

von Lexi (Gast)


Lesenswert?

exit() ist keine gute Idee.

Besser wäre einen Ende-Status zu setzen und dann die while-Schleife des 
Hauptprogramms zu beenden.

https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__avr__stdlib_1ga137096a48cc0c731052cadfb69c39b34.html

Vorausgesetzt, es geht um avr-gcc.

von J Zimmermann (Gast)


Lesenswert?

spess53:
> Und wohin soll es denn 'exiten'?

eben, was Du machen kannst, falls es um "Energiesparen" geht, den 
Controller in den SLEEP-Modus bringen, beim XMEGA könnte man dir 
PR-Register bemühen ...
also wie spess53 schon fragte - wohin?

mfg

von Klaus (Gast)


Lesenswert?

Es soll sich um eine "Sicherheitabfrage" handeln. Das Programm darf erst 
weiter laufen, wenn der IC vorhanden ist. Ansonsten soll er mit der 
gewählten Anzeige stehen bleiben. Stehen bleiben ist wahrscheinlich der 
falsche Ausdruck. Dachte an eine Schleife die nen IC abfragt und dann 
immer wieder auf "Ende" geht
Arbeite mit C und avr GCC

Beitrag #5409771 wurde von einem Moderator gelöscht.
von Peter D. (peda)


Lesenswert?

Klaus schrieb:
> mit exit soll er eigentlich stoppen und das Programm beenden

Das macht der AVR-GCC auch, er führt ein CLI aus und dann eine 
Endlosschleife.
Vermutlich hast Du aber den Watchdog aktiviert, der dann ein Reset 
macht.

von Klaus (Gast)


Lesenswert?

Du meinst diese Sache
1
void exit(
2
  int __status)
Was macht hier __status?

von fop (Gast)


Lesenswert?

Vermutlich muss man erst Windows 10 auf dem AVR installieren, bevor man 
mit exit die Kontrolle an das Betriebssystem zurück geben kann.

:)))

Sorry couldn't resist.

von Klaus (Gast)


Lesenswert?

Hab das neue Windoows 12

von fop (Gast)


Lesenswert?

Na gut, Spaß beiseite :
Sinnig wäre, eine Fehlermeldung auf das Display, ca. 2 Sekunden den 
Mikrocontroller schlafen legen, um Energie zu sparen und dann von vorne 
probieren, so dass der Benutzer einfach durch Anstöpseln weiter kommt, 
wenn er die Fehlermeldung gelesen und kapiert hat.
Noch ein wenig Hirnschmalz investieren, damit die Fehlermeldung stehen 
bleibt und nicht durch Flackern unleserlich wird, und Alles wird gut.

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
Noch kein Account? Hier anmelden.