Hallo,
folgendes Programm benutzt shortints als Index für ein Array. Leider funktioniert das nicht mit negativen Werten. Auch wird die For-Schleife nicht durchlaufen.
Robert
folgendes Programm benutzt shortints als Index für ein Array. Leider funktioniert das nicht mit negativen Werten. Auch wird die For-Schleife nicht durchlaufen.
Code
program bla;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = mega2560, VCC=5;
{ $BOOTRST $1F000} {Reset Jump to $1F000}
Import SysTick, SerPort;
From System Import ;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0100, iData;
SerPort = 57600, Stop2; {Baud, StopBits|Parity}
RxBuffer = 8, iData;
TxBuffer = 8, iData;
Implementation
{$IDATA}
const
MinVal : shortint = -2;
MaxVal : shortint = 2;
arr : array[MinVal..MaxVal] of integer = (-20, -10, 0, 10, 20);
var
i : shortint;
begin
EnableInts;
WriteLn(SerOut, 'Los!!!');
for i := MinVal to MaxVal do //Diese Schleife wird nicht durchlaufen
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
endfor;
i := -2; //Liefert ein falsches Ergebnis
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := -1; //Liefert ein falsches Ergebnis
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := 0;
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := 1;
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := 2;
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
end bla.
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = mega2560, VCC=5;
{ $BOOTRST $1F000} {Reset Jump to $1F000}
Import SysTick, SerPort;
From System Import ;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0100, iData;
FrameSize = $0100, iData;
SerPort = 57600, Stop2; {Baud, StopBits|Parity}
RxBuffer = 8, iData;
TxBuffer = 8, iData;
Implementation
{$IDATA}
const
MinVal : shortint = -2;
MaxVal : shortint = 2;
arr : array[MinVal..MaxVal] of integer = (-20, -10, 0, 10, 20);
var
i : shortint;
begin
EnableInts;
WriteLn(SerOut, 'Los!!!');
for i := MinVal to MaxVal do //Diese Schleife wird nicht durchlaufen
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
endfor;
i := -2; //Liefert ein falsches Ergebnis
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := -1; //Liefert ein falsches Ergebnis
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := 0;
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := 1;
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
i := 2;
WriteLn(SerOut, 'i = ' + ByteToStr(i:3) + ' arr[i] = ' + IntToStr(arr[i]:3));
end bla.
Robert