Carsten
--------------------------------------------
var
I2C0Bufer:pointer;
testvar:array[0..4] of char ='Test';
Procedure WriteFlashRam(var data);
Begin
I2C0Bufer:=@data;
WriteLn(IntToHex(longint(I2C0Bufer),8));
I2C0Bufer:=pointer(data);
WriteLn(IntToHex(longint(I2C0Bufer),8));
End;
Begin
WriteLn(IntToHex(longint(@testvar),8));
WriteFlashRam(testvar);
End.
> Linjen hvor jeg skriver "I2C0Bufer:=@data;" giver det rigtige resultat.
Dette giver dig adressen på hvor data er gemt i hukommelsen
> Linjen hvor jeg skriver "I2C0Bufer:=pointer(data);" giver det forkerte.
Dette er et typecast af data til en pointer, som er det samme som en
integer. Altså ikke adressen på data, men selve data.
Dette havde givet samme resultat:
I2C0Bufer:= integer(data);
WriteFlashRam(testvar); (imellem Begin og End. i hoved programmet)
I2C0Bufer:=@data;
WriteLn(IntToHex(longint(I2C0Bufer),8));
udskriver samme resultat.
>
>> Linjen hvor jeg skriver "I2C0Bufer:=pointer(data);" giver det forkerte.
> Dette er et typecast af data til en pointer, som er det samme som en
> integer. Altså ikke adressen på data, men selve data.
Jeg er igen enig med din konklusion, men jeg kan ikke få det til at
stemme med det der udskrives, der udskrives placeringen af data og ikke
indholdet.
Jeg har testet det i Delphi og FPC med samme resultat.
Carsten
> Dette var også det jeg ville have forventet (et eller andet sted på
> stakken), men resultatet er adressen hvor "testvar" er gemt. D.v.s at
Men testvar og data er jo det samme, når WriteFlashRam tager en var
parameter?
Jeg kan ikke helt se problemet.
Carsten
-------------------------------
Type
testvar_typ=array[0..4] of char;
var
I2C0Bufer:pointer;
testvar:testvar_typ='Test';
Procedure WriteFlashRam(var data);
Begin
I2C0Bufer:=@data;
WriteLn(IntToHex(longint(I2C0Bufer),8)); {Udskriv adresse på pointer}
I2C0Bufer:=pointer(data);
WriteLn(IntToHex(longint(I2C0Bufer),8)); {Udskriv adresse på testvar}
End;
Procedure TestPointer(data:pointer);
Begin
I2C0Bufer:=@data;
WriteLn(IntToHex(longint(I2C0Bufer),8)); {Udskriv adresse på pointer}
I2C0Bufer:=pointer(data);
WriteLn(IntToHex(longint(I2C0Bufer),8)); {Udskriv adresse på testvar}
End;
Begin
WriteLn(IntToHex(longint(@testvar),8)); {Udskriv adresse på testvar}
writeln('--');
WriteFlashRam(testvar);
writeln('--');
TestPointer(@testvar);
End.
---------------------------------
0046C4C0
--
0046C4C0
74736554
--
0012FF98
0046C4C0
> I2C0Bufer:=@data;
> WriteLn(IntToHex(longint(I2C0Bufer),8)); {Udskriv adresse på pointer}
> I2C0Bufer:=pointer(data);
> WriteLn(IntToHex(longint(I2C0Bufer),8)); {Udskriv adresse på testvar}
Bare du har forstået at disse 2 ting ikke er det samme: Det ene er adressen
på data, det andet er et typecast til en pointer.