Florian Klaempfl wrote:
Carsten Bager wrote:
I am using the compiler on an embedded Arm7 platform (no
operating system). So fare things are working ok, but now I have
discovered a problem when packing records (Vi have to maintain
bindery compatibility with older systems)
If I have a packed record like this
Test_typ= packed record
B:byte;
I:LongInt;
end;
Var
Test:Test_typ;
Begin
Test.i:=1;
Write(test.i);
End.
The output is wrong.
Usual ARM cores can't handle unaligned memory accesses and on e.g.
arm-linux you
would get a sigbus exception on your code.
If I remove "Packed" the output is OK.
What can do is:
- modify your pascal code:
l:longint;
move(l,Test.i,sizeof(Test.i)); // move can handle unaligned access
and that how
C code usually solves it
- add an exception handler to your OS to catch unaligned access and
fix things
but emulating the memory access
- or fix the compiler to ignore "packed" for ARM. This could be a
compiler switch, on by default for ARM (gpc has --ignore-packed).
Regards,
Adriaan van Os
_______________________________________________
fpc-pascal maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal