boot-init-macros.h 1.0 KB

123456789101112131415161718192021222324252627
  1. #pragma once
  2. #include "software-modes.h"
  3. // Construction d'un identificateur unique par le préprocesseur
  4. // http://stackoverflow.com/questions/12697709/use-function-and-line-to-construct-identifier-name
  5. #define CAT_FOR_UNIQUE_IDENTIFIER_2(a,b) a##b
  6. #define CAT_FOR_UNIQUE_IDENTIFIER(a,b) CAT_FOR_UNIQUE_IDENTIFIER_2(a,b)
  7. #define UNIQUE_IDENTIFIER CAT_FOR_UNIQUE_IDENTIFIER (zzUniqueIdentifier_, __COUNTER__)
  8. // Inscrire l'adresse de la routine dans la section '"boot.routine.array' pour exécution automatique lors du démarrage
  9. #define MACRO_BOOT_ROUTINE(ROUTINE) \
  10. static void (* UNIQUE_IDENTIFIER) (BOOT_MODE) \
  11. __attribute__ ((section ("boot.routine.array"))) \
  12. __attribute__ ((unused)) \
  13. __attribute__ ((used)) = ROUTINE ;
  14. // Inscrire l'adresse de la routine dans la section 'init.routine.array' pour exécution automatique lors du démarrage
  15. #define MACRO_INIT_ROUTINE(ROUTINE) \
  16. static void (* UNIQUE_IDENTIFIER) (INIT_MODE) \
  17. __attribute__ ((section ("init.routine.array"))) \
  18. __attribute__ ((unused)) \
  19. __attribute__ ((used)) = ROUTINE ;