Gast
#1586873
Hi! Ich unternehme gerade meine ersten Gehversuche mit einem ATmega162 und C. Dabei habe ich ein für mich nicht nachvollziehbares Verhalten bei folgendem Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Im Simulator von AVR Studio wird wie erwartet PORTE nacheinander auf 7, 6, 5, 4, 3, 2, 1, 0 gesetzt; im nächsten Durchlauf der while-Schleife wiederholt sich dies. Der AVR dagegen macht folgendes: PORTE läuft von 7 bis 1, dann kommt das lange Delay (an dem man erkennt, dass die for-Schleife verlassen wurde), und erst im nächsten Durchlauf der while-Schleife kommt die 0, und dann wieder 7 bis 1 usw. Also 7 - 6 - 5 - 4 - 3 - 2 - 1 _ 0 - 7 - 6 - ... statt 7 - 6 - 5 - 4 - 3 - 2 - 1 - 0 _ 7 - 6 - ... (wobei "-" für das kurze und "_" für das lange Delay steht). Konsequenterweise gibt der AVR genau die richtige Sequenz aus, wenn ich die 255 im Kopf der for-Schleife durch 254 ersetze. Im Simulator dagegen wird in diesem Fall natürlich auch noch der Wert 255 an PORTE zugewiesen, was diesen auf 111, also 7 setzt. Man kann also sagen, dass der AVR den letzten for-Durchlauf einfach weglässt. Weiß jemand warum?