[应用相关] MDK 自动初始化技术 代码(参考RT-Thread)

[复制链接]
601|0
 楼主| shen520 发表于 2021-11-3 11:18 | 显示全部楼层 |阅读模式
  1. C文件:

  2. /*****************************************************************************************************************************/
  3. #include "ll_autoinit.h"
  4. /*****************************************************************************************************************************/
  5. __attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.0" ) ) ) struct ll_autoinit_t autoinit_head ;
  6. __attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.9" ) ) ) struct ll_autoinit_t autoinit_tail ;
  7. /*****************************************************************************************************************************/
  8. void ll_autoinit_init ( void )
  9. {
  10.     struct ll_autoinit_t * init = ( struct ll_autoinit_t * ) & autoinit_head ;
  11.     for ( init = init + 1; init < ( struct ll_autoinit_t * ) & autoinit_tail ; init++ )
  12.     {
  13.         init->cb_init();
  14.     }
  15. }
  16. /*****************************************************************************************************************************/


  17. H文件:

  18. #ifndef autoinit_h
  19. #define autoinit_h
  20. /*****************************************************************************************************************************/
  21. #include <stdint.h>
  22. /******************************************************************************************************************************
  23. * 功 能 : autoinit操作对象结构体
  24. ******************************************************************************************************************************/
  25. struct ll_autoinit_t
  26. {
  27.     const char * name ;
  28.     void ( * cb_init ) ( void ) ;
  29. } ;
  30. /******************************************************************************************************************************
  31. * 功 能 : 加载表格(BOARD)
  32. ******************************************************************************************************************************/
  33. #define LL_LOAD_AUTOINIT_BOARD(name,init)                                                   \
  34.     __attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.1" ) ) )              \
  35.     struct ll_autoinit_t autoinit_board_##name = { #name ,init} ;
  36. /******************************************************************************************************************************
  37. * 功 能 : 加载表格(MODULE)
  38. ******************************************************************************************************************************/
  39. #define LL_LOAD_AUTOINIT_MODULE(name,init)                                                  \
  40.     __attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.2" ) ) )              \
  41.     struct ll_autoinit_t autoinit_module_##name = { #name ,init} ;
  42. /******************************************************************************************************************************
  43. * 功 能 : 加载表格(APP)
  44. ******************************************************************************************************************************/
  45. #define LL_LOAD_AUTOINIT_APP(name,init)                                                     \
  46.     __attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.3" ) ) )              \
  47.     struct ll_autoinit_t autoinit_app_##name = { #name ,init} ;
  48. /*****************************************************************************************************************************/
  49. void ll_autoinit_init ( void ) ;
  50. /*****************************************************************************************************************************/
  51. #endif
  52. </font>


您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

24

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部