Browse Source

Import boot macros for easy routine creation

DricomDragon 5 years ago
parent
commit
7ff5ac2286
1 changed files with 45 additions and 0 deletions
  1. 45 0
      prog/sources/boot-init-macros.h

+ 45 - 0
prog/sources/boot-init-macros.h

@@ -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 ;
+
+//——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————