|
@@ -0,0 +1,45 @@
|
|
|
+#pragma once
|
|
|
+
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+
|
|
|
+#include "software-modes.h"
|
|
|
+
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+//
|
|
|
+// Construction d'un identificateur unique par le préprocesseur
|
|
|
+//
|
|
|
+// http://stackoverflow.com/questions/12697709/use-function-and-line-to-construct-identifier-name
|
|
|
+//
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+
|
|
|
+#define CAT_FOR_UNIQUE_IDENTIFIER_2(a,b) a##b
|
|
|
+
|
|
|
+#define CAT_FOR_UNIQUE_IDENTIFIER(a,b) CAT_FOR_UNIQUE_IDENTIFIER_2(a,b)
|
|
|
+
|
|
|
+#define UNIQUE_IDENTIFIER CAT_FOR_UNIQUE_IDENTIFIER (zzUniqueIdentifier_, __COUNTER__)
|
|
|
+
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+//
|
|
|
+// Inscrire l'adresse de la routine dans la section '"boot.routine.array' pour exécution automatique lors du démarrage
|
|
|
+//
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+
|
|
|
+#define MACRO_BOOT_ROUTINE(ROUTINE) \
|
|
|
+ static void (* UNIQUE_IDENTIFIER) (BOOT_MODE) \
|
|
|
+ __attribute__ ((section ("boot.routine.array"))) \
|
|
|
+ __attribute__ ((unused)) \
|
|
|
+ __attribute__ ((used)) = ROUTINE ;
|
|
|
+
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+//
|
|
|
+// Inscrire l'adresse de la routine dans la section 'init.routine.array' pour exécution automatique lors du démarrage
|
|
|
+//
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|
|
|
+
|
|
|
+#define MACRO_INIT_ROUTINE(ROUTINE) \
|
|
|
+ static void (* UNIQUE_IDENTIFIER) (INIT_MODE) \
|
|
|
+ __attribute__ ((section ("init.routine.array"))) \
|
|
|
+ __attribute__ ((unused)) \
|
|
|
+ __attribute__ ((used)) = ROUTINE ;
|
|
|
+
|
|
|
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
|