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

Reply via email to