Gute Tageszeit, Das Programm steuert die 7-Segment-Anzeige, wo Segmente nacheinander im Ziffer "8" durchlaufen (Segmente der Ziffer "8" sind anzusteuernde LEDs). Daneben werden andere in der Reihe positionierte LED nacheinander angeleuchtet (wenn eine LED [x+1] AN gegt - ist der vorherige LED [x] aus). Ausdrucke: Digit_Port_Display =0x__ entsprechen einem Segment-LED im Ziffer "8" Ausdrucke: Digital_Port_DA =x__ entsprechen einem LED aus der LED-Reihe. Ich erstelle zu dem Programm (s. Anhang "Prog_01") das Flussdiagramm (s. Anhang "Flussdiagramm"), nur dazu habe ich Fragen: 1) Wohin geht das Befehl "return" (Zeile 76) ? 2) Was passiert falls i<7 2a) Wie wird die Schleife dann geschlossen falls i<7 ? 3) Entspricht der Ausdruck i &= 0x07 (Zeile 74) der Stelle im Flussdiagramm i=7 ?
Hel B. schrieb: > Anhang "Prog_01") Das ist ein Screenshot von einem Gesamtmonitorbild, wo man bestenfalls erahnen kann, dass auf dem Monitor ein Programmcode zu lesen war, bevor das Ding durch die JPG-Quetsche gedreht wurde. Geht das vielleicht auch als ASCII-File?
Bevor ich die Dateien angehängt habe, bekam ich die Meldung, dass ich die Dateien als Bilder hochladen kann...
Hel B. schrieb: > Bevor ich die Dateien angehängt habe, bekam ich die Meldung, dass ich > die Dateien als Bilder hochladen kann... Kannst du, ist aber sinnlos, wenn man nichts lesen kann und 80% der Fläche von grauem, informationslosen Cancas eingenommen werden.
Danke für Hinweise. Die Dateien habe ich durch größeren ersetzt.
Hel B. schrieb: > 1) Wohin geht das Befehl "return" (Zeile 76) ? na der verlässt void Schleife() wenn das der endlos Loop eines µC ist terminiert das Programm, ansonsten gehts nach void Schleife(); weiter.
:
Bearbeitet durch User
Joachim B. schrieb: > wenn das der endlos Loop eines µC ist terminiert das Programm. Wenn Schleife allerdings loop() eines Arduinos ist, werkelt da noch ein Rahmenprogramm im Hintergrund, dass loop() laufend aufruft.
Danke. Also, nach dem "Start" und vor dem "Switch (i)" in Flussdiagramm ?
Hel B. schrieb: > 2) Was passiert falls i<7 2a) Wie wird die Schleife dann geschlossen > falls i<7 ? Die Funktion SCHLEIFE() läuft läuft völlig unabhängig von i. Die Variable i sollte allerdings irgendwo mal deklariert werden. > 3) Entspricht der Ausdruck i &= 0x07 (Zeile 74) der Stelle im > Flussdiagramm i=7 ? Die Entscheidung "i=7 ?" gibt es im Programm nicht. Das Satement
1 | i &= 0x07; |
sorgt nur dafür, dass das vierte Bit von i am Ende von SCHLEIFE() nie gesetzt ist, i dort als immer <= 7 ist.
Tip am Rande: Benutz das Tool PapDesigner um schnell anschauliche Flussdiagramme zu erstellen. Alex
Alex Z. schrieb: > Benutz das Tool PapDesigner um schnell anschauliche Flussdiagramme zu > erstellen. Im Zusammenhang mit blockorientierter Programmierung sind Flussdiagramme nun wirklich ziemlich untauglich, weil die Programmblöcke dort, wenn überhaupt, nur mit viel Verrenkungen abbildbar sind. Nassi-Shneiderman-Diagramme sind da wesentlich sinnvoller.
Mike A. schrieb: > Alex Z. schrieb: >> Benutz das Tool PapDesigner um schnell anschauliche Flussdiagramme zu >> erstellen. > > Im Zusammenhang mit blockorientierter Programmierung sind Flussdiagramme > nun wirklich ziemlich untauglich, weil die Programmblöcke dort, wenn > überhaupt, nur mit viel Verrenkungen abbildbar sind. > > Nassi-Shneiderman-Diagramme sind da wesentlich sinnvoller. Aber immer noch besser als eine handschriftliche Aufzeichnung, wie oben, in der man nur schlecht was erkennt. Der TE wird wahrscheinlich nicht nur den Case-Block darstellen müssen. Sieht nach einer Seminararbeit aus, wo noch mehr drum rum sein wird. Aber ja, ein NSD, wäre hier besser. Alex
Was passiert wenn i<7 ist ? Ist das richtig?: -Das Programm Springt in ein Case i, LED(i) wird angeleuchtet, -dann mit dem Befehl "break" wird LED ausgeschaltet, -dann mit i=i+1: An welcher Stelle wird es kontrolliert, ob durch i++ i nicht grosser als 7 ist? a) Was wäre wenn z.B. i=5 ? dann i=i+1=6 dann durch Statement "i &= 0x07" was wird gemacht damit? Das momentane Wert von i=6 doch! Wird bei i=6 gesagt, dass 4-te Bit nicht gesetzt werden soll? Na klar, das 4-te Bit ist in dem Fall nicht gesetzt. dann mit "return" zurück unter das "switsch(i) ? b) was wäre wenn i=7 ? dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll. Aber durch den Statement "i &= 0x07 " i=7 bleibt? Und dann noch Mal i=i+1? Wie löst sich wenn i=7 erreicht und wie wird dann i=0 zurück auf "0" gesetzt ?
helbi schrieb: > Was passiert wenn i<7 ist ? > Ist das richtig?: > -Das Programm Springt in ein Case i, LED(i) wird angeleuchtet, LED(i) leuchtet und etwas wir von der LED angeleuchtet. > -dann mit dem Befehl "break" wird LED ausgeschaltet, Nein. > -dann mit i=i+1: > An welcher Stelle wird es kontrolliert, ob durch i++ > i nicht grosser als 7 ist? i &= 7; // löscht alle bits außer bit 2-0. > a) > Was wäre wenn z.B. i=5 ? > dann i=i+1=6 > dann durch Statement "i &= 0x07" was wird gemacht damit? Alle bits außer bit 2-0 werden gelöscht, die 6 bleibt erhalten weil diese nur einsen in den nicht veränderten drei bits hat. > Das momentane Wert von i=6 doch! Wird bei i=6 gesagt, dass 4-te Bit > nicht gesetzt werden soll? Nein, die zuvor evtl. gesetzten mits 7-3 werden zurückgesetzt aus 0. > dann mit "return" zurück unter das "switsch(i) ? Nein, sondern zum ende der Funktion. > b) was wäre wenn i=7 ? > dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll. > Aber durch den Statement "i &= 0x07 " i=7 bleibt? Ja. In zwei schritten 1. 7 -> 8 // i++ 2. 8 -> 7 // i&=7 > Und dann noch Mal i=i+1?0 Das steht nicht in deinem Program. > Wie löst sich wenn i=7 erreicht und wie wird dann i=0 zurück auf "0" > gesetzt ? Gar nicht in deinem Programm. Aber das kannst du ja noch ändern...
Kurz mal Offtopic: helbi schrieb: > Programm.jpg Lies mal, was da ein paar Zeilen über jeder Eingabebox steht:
1 | Antwort schreiben |
2 | Wichtige Regeln - erst lesen, dann posten! |
3 | Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang |
4 | Formatierung (mehr Informationen...) |
5 | [c]C-Code[/c] |
Das bedeutet zweierlei: 1. Man kann voll toll eine C-Datei anhängen. Dann gibts Syntaxhighlighting gratis. 2. Man kann C-Code in seinen Post einfügen. helbi schrieb: > Die Dateien habe ich durch größeren ersetzt. Allgemein gilt: das absolut ungeeigneste Format für einen Quelltext ist ein Bild. Dafür gibt es ASCII-Dateien, da kann man dann leicht was herauskopieren und dir den Fehler bzw. die Lösung zeigen. Und das absolut ungeeignetste Format für einen Screenshot ist JPEG wegen dessen Komprimierungsartefakten. Aber auch das steht über jeder Eingabebox. Wie gesagt: bitte einfach mal lesen... Und nochwas: bitte nur 1 Name pro Thread (siehe Hilfe:Forum Nutzungsbedingungen) Das hier geht grade noch, weil erkennbar ist, dass in beiden Fällen der selbe User dran ist: helbi schrieb: > Autor: helbi (Gast) Hel B. schrieb: > Autor: Hel Birk (helbi)
:
Bearbeitet durch Moderator
helbi schrieb: > Die Dateien habe ich durch größeren ersetzt. Trotzdem das nächste mal Quelltexte immer als *.c oder *.ino posten. Und das Gekrakel ist Gekrakel geblieben. Zu meiner Schulzeit hieß das Sauklaue. Willst Du Arzt werden?
void schrieb: >> b) was wäre wenn i=7 ? >> dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll. >> Aber durch den Statement "i &= 0x07 " i=7 bleibt? > > Ja. In zwei schritten > 1. 7 -> 8 // i++ > 2. 8 -> 7 // i&=7 Einspruch! 2. 8 -> 0 // i&=7 .. denn bei 8 sind die Bits 2-0 ja 0.
>> void schrieb um 7:45 Morgens: [Quatsch] Dietrich L. schrieb: > Einspruch! Gähn. Verdammt, zu früh heute...
Danke. void schrieb: > helbi schrieb: >> Was passiert wenn i<7 ist ? >> Ist das richtig?: >> -Das Programm Springt in ein Case i, LED(i) wird angeleuchtet, > > LED(i) leuchtet und etwas wir von der LED angeleuchtet. > >> -dann mit dem Befehl "break" wird LED ausgeschaltet, > > Nein. Sondern? geht's zum "i=i+1" oder zum "case(i+1)? > >> -dann mit i=i+1: >> An welcher Stelle wird es kontrolliert, ob durch i++ >> i nicht grosser als 7 ist? > > i &= 7; // löscht alle bits außer bit 2-0. Was bedeutet Ausdruck "bit 2-0"? Welcher Bit ist das mit anderen Wörter? Ich verstehe dass z.B. 0000 0111 = 7 (dez). Welche bits (von rechts nach links) werden gelöscht? Und welche Bit sollten nicht gelöscht werden? Könnten Sie bitte mit Wörter die Bits im XXXX XXXX bezeichnen? Wo ist dieser Bit 2-0 hier: XXXX_XXXX ? Was sollte in diesem Wert bitweise xxxx_xxxx bleiben: a)wenn i<7 und b) wenn i=7 ? Mit i=i+1 kommt mal der Wert auf Zahl 7. Wie kommt man dazu dass i zurück auf "0" gesetzt wäre, damit die LEDs wieder vom Start-Segment leuchteten (und auch wir davon etwas angeleuchtet wären)? Wird i jedes Mal (auch wenn z.B. i=3) auf "0" gesetzt oder erst wenn i=7 ? > >> a) >> Was wäre wenn z.B. i=5 ? >> dann i=i+1=6 >> dann durch Statement "i &= 0x07" was wird gemacht damit? > > Alle bits außer bit 2-0 werden gelöscht, die 6 bleibt erhalten weil > diese nur einsen in den nicht veränderten drei bits hat. Und wass passiert in der zwei nächsten Programmschritten? > >> Das momentane Wert von i=6 doch! Wird bei i=6 gesagt, dass 4-te Bit >> nicht gesetzt werden soll? > > Nein, die zuvor evtl. gesetzten mits 7-3 werden zurückgesetzt aus 0. Also wenn 0000_0110 (i+1=6), dann die drei rechte Bits bleiben unverändert und das Programm geht mit dem Befehl "return" über dem "switch(i) ? > >> dann mit "return" zurück unter das "switsch(i) ? > > Nein, sondern zum ende der Funktion. > >> b) was wäre wenn i=7 ? >> dann i+1=8 - das bedeutet : 4 Bit gesetzt werden soll. >> Aber durch den Statement "i &= 0x07 " i=7 bleibt? > > Ja. In zwei schritten > 1. 7 -> 8 // i++ > 2. 8 -> 7 // i&=7 > >> Und dann noch Mal i=i+1?0 > > Das steht nicht in deinem Program. > >> Wie löst sich wenn i=7 erreicht und wie wird dann i=0 zurück auf "0" >> gesetzt ? > > Gar nicht in deinem Programm. Aber das kannst du ja noch ändern...
helbi schrieb: > An welcher Stelle wird es kontrolliert, ob durch i++ i nicht grosser > als 7 ist? Das wird nirgends kontrolliert. Es wird, ohne genauere Betrachtung des aktuellen Wertes von i, schlicht und einfach verhindert, dass i am Ende von SCHLEIFE() größer als 7 ist. Liesen musst du schon selber. Mike A. schrieb: > Das Statement ...
Mike A. schrieb: > helbi schrieb: >> An welcher Stelle wird es kontrolliert, ob durch i++ i nicht grosser >> als 7 ist? > > Das wird nirgends kontrolliert. > > Es wird, ohne genauere Betrachtung des aktuellen Wertes von i, schlicht > und einfach verhindert, dass i am Ende von SCHLEIFE() größer als 7 ist. > > Liesen musst du schon selber. > > Mike A. schrieb: >> Das Statement ... Danke. Nach dem i=7 ist, wird dann durch "i &= 0x07" i auf "0" gesetzt ? Statt 0000_0111 => 0000_0000 ?
Ich habe das Diagramm neu gezeichnet. Sieht das jetzt richtig aus?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.