Ich habe es eben nochmal probiert um es noch einfacher darzustellen bzw. dass ihr es evtl. auch mal nachvollziehen könnt:
Der angezeigte ASM Code sieht hier wieder falsch aus,
Die Zeilen stimmen nicht in der Reihenfolge:
Code:
volatile char value;
void Test(void)
{
while(value)
{
RC2 = 1;
RC2 = 0;
}
}
Der erzeugt Assembler Code bzw. das Listing:
Code:
176: volatile char value;
177: void Test(void)
178: {
179: while(value)
008A 0876 MOVF value, W
008B 1903 BTFSC STATUS, 0x2
008C 0008 RETURN
0091 288A GOTO 0x8A // diese zeile gehört hier nicht hin
180: {
181: RC2 = 1;
008D 1283 BCF STATUS, 0x5
008E 1303 BCF STATUS, 0x6
008F 1507 BSF PORTC, 0x2
182: RC2 = 0;
0090 1107 BCF PORTC, 0x2
0091 288A GOTO 0x8A
183: }
184: }
wenn man sich nur den Assemblercode anschaut, die linke Adresspalte also wegdenkt,
würde er niemals das RC2 Bit anfassen.
Bei genauerer Betrachtung ist da eigentlich nur eine Zeile zu viel drin nach dem Return
Irgendwie taucht die Zeile doppelt auf:
0091 288A GOTO 0x8A
Das scheint meiner Meinung nach ein Bug zu sein, oder wie seht Ihr das ?
Siro
Lesezeichen