-
Notifications
You must be signed in to change notification settings - Fork 1k
Open
Labels
enhancementNew feature or requestNew feature or request
Description
My code uses avr-gcc util\atomic.h. For code block should be executed with disabled irqs and restore irqs state(disable, enable) after code block ends.
Example:
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
// some long time executed code irqs free
}Can you add correct support of this to core?
In my code I use this workaround(not tested):
#ifdef __ARM__
#ifndef ATOMIC_BLOCK
#define ATOMIC_BLOCK(type) for ( type, __ToDo = __iCliRetVal(); \
__ToDo ; __ToDo = 0 )
#define ATOMIC_RESTORESTATE uint8_t __primask_save \
__attribute__((__cleanup__(__iRestore))) = __get_PRIMASK()
static __inline__ uint8_t __iCliRetVal(void)
{
__disable_irq();
return 1;
}
static __inline__ void __iRestore(const uint8_t *__s)
{
__set_PRIMASK(*__s);
__asm__ volatile ("" ::: "memory");
}
#endif
#endifMetadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request