boot-init-macros.h 3.9 KB

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