Hallo,
Ich meine einen Bug gefunden zu haben, ich bin mir aber nicht wirklich
sicher denn das Programm läuft soweit, und er ist meiner Meinung nach so
gravierend, dass er schon wesentlich früher aufgefallen wäre(weil fast
jedes Programm nicht so laufen würde wie es sollte).
Also im instruction set steht zu den br** Befehlen, dass vom PC(Program
Counter) aus um -64 ≤ k ≤ +63 gesprungen werden kann.
Ich hab jetzt allerdings(bei der Suche nach Optimierungsmöglichkeiten)
in der *.lss Datei unter anderem folgendes gefunden, was mit der obigen
Bedingung nicht wirklich übereinstimmt:
1 | ...
|
2 | d54: f1 f6 brne .-68 ; 0xd12 <fill_buffer+0x6a>
|
3 | {
|
4 | current_led_column_sd++;
|
5 | d56: 80 91 44 01 lds r24, 0x0144
|
6 | d5a: 90 91 45 01 lds r25, 0x0145
|
7 | d5e: 01 96 adiw r24, 0x01 ; 1
|
8 | d60: 90 93 45 01 sts 0x0145, r25
|
9 | d64: 80 93 44 01 sts 0x0144, r24
|
10 |
|
11 | if(current_led_column_sd == pic_info.pic_length)
|
12 | d68: 20 91 d2 02 lds r18, 0x02D2
|
13 | d6c: 30 91 d3 02 lds r19, 0x02D3
|
14 | d70: 82 17 cp r24, r18
|
15 | d72: 93 07 cpc r25, r19
|
16 | d74: 71 f6 brne .-100 ; 0xd12 <fill_buffer+0x6a>
|
17 | ...
|
Hat jemand eine Vermutung bzw. weis jemand was hier nicht stimmt(ich
kann mir nach wie vor nicht wirklich vorstellen das, dass ein Bug
ist...)
Weiterhin bei eigenen Assembler Stücken, die auf Sprungmarken ausserhalb
dieses Bereiches zeigen, warnt der Gnu-assembler auch nicht, dass die
Sprungmarke ausserhalb des Bereiches ist.
Gruß Philipp