wenn der Registerdruck zunimmt. Also ein atomares load oder store. Ich meine keine atomaren RMW-Zyklen, das kann der Cortex-M generell nicht (dazu existiert ldrex/strex oder IRQ-Sperre).
Die Frage nun: gibt es ein GCC-intrinsic, womit ich feststellen kann, bis zu welcher Größer ein fundamentaler DT atomar gelesen oder geschrieben werden kann. Auf einer 32-Bit CPU kann ich sicher 32-Bit annehmen, aber hier geht ja auch 64-Bit.
VLDM, VSTM, VPUSH, and VPOP instructions are executed as a sequence
3
of word-aligned word accesses.
4
(...)
5
If an instruction is executed as a sequence of accesses according to
6
these rules, some exceptions can be taken in the sequence and cause
7
execution of the instruction to be abandoned. On exception return,
8
the instruction that generated the sequence of accesses is re-executed
9
and so any accesses that had already been performed before the exception
10
was taken might be repeated.
Damit sollte LDRD auf single cores effektiv doch atomar sein?
Ich würde mich nicht darauf verlassen.
Außerdem darf man "core" nicht zu eng sehen. Zum Beispiel ist DMA auch ein Bus Master, genau wie die CPU und beide sind (nur) per 32 Bit angebunden. Theoretisch(?) könnte ein Buffer per DMA gefüllt werden und zur Verarbeitung liest jemand mit LDRD.