#ifndef MAIN_H #define MAIN_H struct Delay { virtual void wait() = 0; }; struct FreeRTOS_Delay : Delay { void wait() override { _wait(); } private: static void _wait() { for(volatile int i = 0; i < 10; i++); } }; struct STM_Hal_Delay : Delay { void wait() override { _wait(); } private: static void _wait() { // systick stuff here for(volatile int i = 0; i < 1000; i++); } }; #endif /* MAIN_H */