On 2014-05-08 18:51, Andre Marques wrote:
On 05/05/14 11:50, Sebastian Huber wrote:
On 2014-05-05 12:43, Andre Marques wrote:

Any thoughts on this?

Why not use C11 atomic operations?


Well, I didn't know they existed, thank you!

Since I have not used them before, please check if I'm thinking this right.

1. Include rtems/score/atomic.h

2. Initialize variable with ATOMIC_INITIALIZER_* as per

http://www.rtems.org/onlinedocs/doxygen/cpukit/html/group__RTEMS.html#ga676563e3ec750e9faa2727eea8ed99e1

3. Use _Atomic_Load_* to read the variable value and _Atomic_Store_* to set a
new value to the variable

4. As for memory models I'm thinking in using ATOMIC_ORDER_ACQUIRE to load and
ATOMIC_ORDER_RELEASE to store.

You can also use the _Atomic_Fence() in some situations. If you work with devices, then the C11 atomic operations may be not sufficient.

In cpu.h we have on the ARM:

static inline void _ARM_Data_memory_barrier( void )
{
  __asm__ volatile ( "dmb" : : : "memory" );
}

static inline void _ARM_Data_synchronization_barrier( void )
{
  __asm__ volatile ( "dsb" : : : "memory" );
}

static inline void _ARM_Instruction_synchronization_barrier( void )
{
  __asm__ volatile ( "isb" : : : "memory" );
}


--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
rtems-devel mailing list
rtems-devel@rtems.org
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to