Am 11.12.2013 10:03, schrieb Sergei Gorelkin:
11.12.2013 12:28, Sven Barth пишет:
Am 11.12.2013 08:43, schrieb Michael Ring:
The strb command seems to be the problem, documentation from STM states:

Each I/O port bit is freely programmable, however the I/O port registers have to be accessed as
32-bit words (half-word or byte accesses are not allowed).

So, is there some way to make the bitset operations word-aligned?
Better say 32-bit aligned to avoid confusion. Words in Pascal are 16-bit although I know that you
are talking about the CPUs word size...
Are there any good reasons for not doing so?
What when you really have a byte that you want ot access? Then using 32-bit writes/reads could(*)
result in unnecessary cycles.

* I don't know about ARM especially, but I know that for e.g. the m68k a 32-bit store is more
expensive than a 16-bit or 8-bit store

That said I don't have a solution for your specific problem except by doing it by hand.

Maybe size of memory access must be guided by size of record? For ARM the record will be 32-bit, and for m68k it can be 8 or 16-bit.
The problem for ARM is that byte sized accesses for bitfields are done correctly except if it's an I/O port where 32-bit accesses are required. Let's assume that ARM also has different cycle times for different sizes then it would be overkill to change EVERY bitfield access to 32-bit. Maybe a local compiler directive would be better that tells the compiler what size it should use? Then Michael could use it like this:

=== code begin ===

{$push}
{$bitaccesssize 4} // in Byte
  TGPIO_ODR_bits = bitpacked record
    ODR0: 0..1;
    // ...
  end;
{$pop}

  TSomeNonIOStruct = bitpacked record
    Field1: 0..1;
    // ...
  end;

=== code end ===

For TGPIO_ODR_bits the compiler would then use 32-bit writes and for TSomeNonIOStruct it would continue to use 8-bit writes.

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to