9 #if UAVCAN_STM32_CHIBIOS 11 #elif UAVCAN_STM32_NUTTX 12 # include <nuttx/arch.h> 13 # include <arch/board/board.h> 14 # include <chip/stm32_tim.h> 16 #elif UAVCAN_STM32_BAREMETAL 18 #elif UAVCAN_STM32_FREERTOS 20 # include <cmsis_os.h> 28 #ifndef UAVCAN_STM32_LOG 32 # define UAVCAN_STM32_LOG(fmt, ...) syslog("uavcan_stm32: " fmt "\n", ##__VA_ARGS__) 34 # define UAVCAN_STM32_LOG(...) ((void)0) 41 #if UAVCAN_STM32_CHIBIOS 42 # define UAVCAN_STM32_IRQ_HANDLER(id) CH_IRQ_HANDLER(id) 43 # define UAVCAN_STM32_IRQ_PROLOGUE() CH_IRQ_PROLOGUE() 44 # define UAVCAN_STM32_IRQ_EPILOGUE() CH_IRQ_EPILOGUE() 45 #elif UAVCAN_STM32_NUTTX 46 # define UAVCAN_STM32_IRQ_HANDLER(id) int id(int irq, FAR void* context, FAR void *arg) 47 # define UAVCAN_STM32_IRQ_PROLOGUE() 48 # define UAVCAN_STM32_IRQ_EPILOGUE() return 0; 50 # define UAVCAN_STM32_IRQ_HANDLER(id) void id(void) 51 # define UAVCAN_STM32_IRQ_PROLOGUE() 52 # define UAVCAN_STM32_IRQ_EPILOGUE() 55 #if UAVCAN_STM32_CHIBIOS 59 # ifndef UAVCAN_STM32_IRQ_PRIORITY_MASK 60 # if (CH_KERNEL_MAJOR == 2) 61 # define UAVCAN_STM32_IRQ_PRIORITY_MASK CORTEX_PRIORITY_MASK(CORTEX_MAX_KERNEL_PRIORITY) 63 # define UAVCAN_STM32_IRQ_PRIORITY_MASK CORTEX_MAX_KERNEL_PRIORITY 68 #if UAVCAN_STM32_BAREMETAL 72 # ifndef UAVCAN_STM32_IRQ_PRIORITY_MASK 73 # define UAVCAN_STM32_IRQ_PRIORITY_MASK 0 77 #if UAVCAN_STM32_FREERTOS 81 # ifndef UAVCAN_STM32_IRQ_PRIORITY_MASK 82 # define UAVCAN_STM32_IRQ_PRIORITY_MASK configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 89 #define UAVCAN_STM32_GLUE2_(A, B) A##B 90 #define UAVCAN_STM32_GLUE2(A, B) UAVCAN_STM32_GLUE2_(A, B) 92 #define UAVCAN_STM32_GLUE3_(A, B, C) A##B##C 93 #define UAVCAN_STM32_GLUE3(A, B, C) UAVCAN_STM32_GLUE3_(A, B, C) 97 #if UAVCAN_STM32_CHIBIOS 99 struct CriticalSectionLocker
101 CriticalSectionLocker() { chSysSuspend(); }
102 ~CriticalSectionLocker() { chSysEnable(); }
105 #elif UAVCAN_STM32_NUTTX 107 struct CriticalSectionLocker
109 const irqstate_t flags_;
111 CriticalSectionLocker()
112 : flags_(enter_critical_section())
115 ~CriticalSectionLocker()
117 leave_critical_section(flags_);
121 #elif UAVCAN_STM32_BAREMETAL 123 struct CriticalSectionLocker
126 CriticalSectionLocker()
131 ~CriticalSectionLocker()
137 #elif UAVCAN_STM32_FREERTOS 139 struct CriticalSectionLocker
142 CriticalSectionLocker()
144 taskENTER_CRITICAL();
147 ~CriticalSectionLocker()
uavcan::uint64_t getUtcUSecFromCanInterrupt()