Hallo,
ich habe einen Bug gefunden, der nur mit Optimiser auftritt.
Mein Beispiel hat keinen praktischen Sinn mehr, nachdem ich den Code auf wenige Zeilen reduzieren konnte (war mühselig). Bitte nicht verwirren lasse, "for i:=0 to 0 do" und ein case Block, der eigentlich nichts macht, sind natürlich verwunderlich.
Fehlerbeschreibung:
Es existiert eine globale String-Variable "textbuffer", die nach Aufruf von "stimu" den Wert "datei123.txt" haben müsste. Hat sie aber nicht. Siehe Bild
AVRco: 5.04.96
Optimise: 3.2.11.0
Gruß
Thomas.AC
program audioplayer; // f_cpu = 32,768 MHz
{ $W+}
Device = xmega128A4U, VCC = 3.3;
Define_Fuses
Override_Fuses;
NoteBook = A;
COMport = USB;
FuseBits5 = [BODLEVEL0, BODLEVEL1, BODLEVEL2, BODACT0]; // BOD=3V if X-AU
ProgFuses = true;
Import SysTick;
Define
OSCtype = extXTAL=4096000, PLLmul=8, prescA=1, prescB=1, prescC=1,
overdrive, faildet;
SysTick = 10;
StackSize = 128, iData;
FrameSize = 256, iData;
Implementation
{$IDATA}
var textbuffer : string[12];
function stimu : byte;
var
filename : string[12];
i : byte;
x : byte;
begin
for i:=0 to 0 do
if true then
filename := 'datei123.txt';
textbuffer := filename;
if filename <> 'datei123.txt' then
textbuffer := filename;
continue;
endif;
x := 0;
case x of
1 : Return (0);
|
2 : Return (0);
|
endcase;
textbuffer := filename;
endif;
endfor;
Return (0);
end;
begin
EnableInts($87); // enable all IRQ
loop
stimu();
debug_break; // Fehler nach Aufruf, textbuffer hat einen falschen Inhalt
endloop;
end audioplayer.
ich habe einen Bug gefunden, der nur mit Optimiser auftritt.
Mein Beispiel hat keinen praktischen Sinn mehr, nachdem ich den Code auf wenige Zeilen reduzieren konnte (war mühselig). Bitte nicht verwirren lasse, "for i:=0 to 0 do" und ein case Block, der eigentlich nichts macht, sind natürlich verwunderlich.
Fehlerbeschreibung:
Es existiert eine globale String-Variable "textbuffer", die nach Aufruf von "stimu" den Wert "datei123.txt" haben müsste. Hat sie aber nicht. Siehe Bild
AVRco: 5.04.96
Optimise: 3.2.11.0
Gruß
Thomas.AC
Code
program audioplayer; // f_cpu = 32,768 MHz
{ $W+}
Device = xmega128A4U, VCC = 3.3;
Define_Fuses
Override_Fuses;
NoteBook = A;
COMport = USB;
FuseBits5 = [BODLEVEL0, BODLEVEL1, BODLEVEL2, BODACT0]; // BOD=3V if X-AU
ProgFuses = true;
Import SysTick;
Define
OSCtype = extXTAL=4096000, PLLmul=8, prescA=1, prescB=1, prescC=1,
overdrive, faildet;
SysTick = 10;
StackSize = 128, iData;
FrameSize = 256, iData;
Implementation
{$IDATA}
var textbuffer : string[12];
function stimu : byte;
var
filename : string[12];
i : byte;
x : byte;
begin
for i:=0 to 0 do
if true then
filename := 'datei123.txt';
textbuffer := filename;
if filename <> 'datei123.txt' then
textbuffer := filename;
continue;
endif;
x := 0;
case x of
1 : Return (0);
|
2 : Return (0);
|
endcase;
textbuffer := filename;
endif;
endfor;
Return (0);
end;
begin
EnableInts($87); // enable all IRQ
loop
stimu();
debug_break; // Fehler nach Aufruf, textbuffer hat einen falschen Inhalt
endloop;
end audioplayer.
Attachments
Filename: | datei123.png |
Filesize: | 37.55 KB |
Title: | Fehlerbild Simulator |
Download counter: | 116 |