Member since Apr 2011
5 posts
|
![]()
Subject: Tankkontrolle - März 2010
Einfach mal zum drüberschauen.
alles was auf da angabe steht hab ich nicht mehr dazu geschrieben
|
Member since May 2011
331 posts
|
![]()
So, hab' schnell überflogen. Sieht gut aus. Nur in der init fehlt noch eine Kleinigkeit.....
![]() Nachtrag: In Zeile 50 ist ein kleiner Fehler! Und in 62 vermiss ich auch was. ![]() |
Member since Apr 2011
5 posts
|
![]()
Erstmal Danke fürs Anschauen.
Denke die drei Sachen waren falsch?: In da init hab ich vergessen PORTD als Ausgang zu setzen.
In Zeile 62 hab ich vergessen die Interrupts wieder einzuschalten. Glaub die fehler hät ich nach fünf mal lesen nich gefunden ![]() |
Member since Oct 2010
15 posts
|
![]()
Ich glaube es fehlt auch noch die Funktionendeklaration der init() und Zeile 12 sollte so auch nicht funktionieren
![]() |
Member since May 2011
331 posts
|
![]()
Jep, da hast du recht.
"!=0" ist besser, weil du nur eine Stelle ändern musst, wenn du evtl doch einen Pin verändern willst. |
Member since Oct 2010
21 posts
|
![]()
Hallo!
Ich hab da mal 2 Fragen: 1. Warum schaltest du die Interrupts so oft an und aus z.B. benutzt du cli() direkt bevor du die while-schleife in zeile 27 verlässt aber schaltest unmittelbar danach die Interrupts wieder an. Was macht das für einen Sinn? 2. Woher weiß ich, wie ich Pin0 konfigurieren muss? |
Member since Oct 2010
53 posts
|
![]() Das Konstrukt in Zeile 27-37 ist die Standard-Warteschleife™, mit der man auf das Eintreten eines externen Ereignisses wartet, das durch das Setzen einer Variable in einem Interrupt-Handler signalisiert wird. Die Interrupts muss man sperren, um das Eintreten des bekannten Lost-Wakeup-Problems [1] zu verhindern. Die anderen Interruptsperren sind dafür da, den Zugriff auf die Zählvariable atomar zu machen (Stichwort Lost-Update-Problem [2]). In Zeile 62 vermisse ich noch das Freigeben per sei(). [1] Eine Ereignissignalisierung geht verloren, wenn sie zwischen der Entscheidung, dass man schlafen muss, und dem tatsächlichen Einschlafen kommt. [2] Ein Variablenzugriff wird durch einen zweiten Zugriff unterbrochen, bevor er sein Ergebnis zurückgeschrieben hat. Dann gehen die Änderungen, die der unterbrechende Zugriff gemacht hat, verloren. |
Member since Oct 2010
21 posts
|
![]()
Ahja! Jetz hab ich das glaub ich verstanden! Danke!
Und wie schauts aus mit Frage 2? |
Member since May 2011
331 posts
|
![]() ...steht in der Angabe. Auch wenn bei der Tank-Aufgabe das Leseverständnis, bei dem Deutschland ja laut PISA nicht so der Hit ist, getestet wird. ![]() |
Member since May 2011
12 posts
|
![]()
Hallo,
2 Fragen: Ist es möglich in dem Teil "Abfluss überwachen" (Zeile 39 -64) auch so kurz zu schreiben:
|
Member since Apr 2011
15 posts
|
![]()
hi,
könnte jemand die Standardwarteschleife von mal genauer erklären. Sie wurde zwar schon von sicherha beantwortet aber ganz verstanden hab ich es noch nicht. Vor allem die stelle nach sleep_disable();. Es ist mir schleierhaft warum man die interrupts mit cli() sperrt und dann mit sei() gleich wieder macht. Die while schleife wird doch hier ohnehin verlassen da man sonst aus dem Befehl sleep_cpu nicht herauskommt. Besten Dank schon mal ![]()
|
Member since May 2011
331 posts
|
![]()
mukkl: ja
joan: Der Suchbegriff für die Folien heißt lost wakeup. |
Member since Apr 2011
15 posts
|
![]()
ja auf den folien hab ich es durchgearbeitet aber ich habe nicht alles verstanden und ich habe gehofft jemande könnte es nochmal mit anderen worten formuliern.
|
Member since May 2011
12 posts
|
![]()
Ahh ok! Vielen Dank!
Und was ist mit der Frage 2 ? ![]() |
Member since May 2011
331 posts
|
![]()
@mukkl: Hier heißt das Suchwort lost update (bei 16 Bit Variablen)
|
Powered by the Unclassified NewsBoard software, 20110527-dev,
© 2003-8 by Yves Goergen