#pragma once

#include <stdint.h>

void busyWaitDuring_initMode (INIT_MODE_ const uint32_t inDelayMS);

void busyWaitDuring (USER_MODE_ const uint32_t inDelayMS);

void busyWaitUntil (USER_MODE_ const uint32_t inDeadLineMS);

// Prevent default SysTick interruption code generation
//$interrupt-section SysTick

void systickInterruptServiceRoutine (SECTION_MODE) asm ("interrupt.section.SysTick");

uint32_t millis(ANY_MODE);

//$section fonction.micros

uint64_t micros (USER_MODE) asm ("fonction.micros") ;

uint64_t section_micros (SECTION_MODE) asm ("section.fonction.micros") ;


uint32_t systick(ANY_MODE);

#define MACRO_REAL_TIME_ISR(ROUTINE) \
	static void (* UNIQUE_IDENTIFIER) (SECTION_MODE_ const uint32_t inUptime) \
__attribute__ ((section ("real.time.interrupt.routine.array"))) \
__attribute__ ((unused)) \
__attribute__ ((used)) = ROUTINE ;