rt.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /******************************************************************************
  2. 版权所有:
  3. 文件名称: rt.c
  4. 文件版本: 01.01
  5. 创建作者: sunxi
  6. 创建日期: 2020-06-18
  7. 功能说明: 实时微系统。
  8. 其它说明:
  9. 修改记录:
  10. */
  11. /*------------------------------- 头文件 --------------------------------------
  12. */
  13. #include "rt.h"
  14. int g_clock_mode;
  15. int g_clock_mode_gps;
  16. /*------------------------------- 宏定义 --------------------------------------
  17. */
  18. /*------------------------------ 类型结构 -------------------------------------
  19. */
  20. /*------------------------------ 全局变量 -------------------------------------
  21. */
  22. struct init_t g_rt_init_func[]=
  23. {
  24. // RT_CLIB,不需要初始化
  25. // RT_FILE,不需要初始化
  26. // RT_IF,不需要初始化
  27. // RT_INTS,不需要初始化
  28. // RT_SOFT_IRQ,不需要初始化
  29. // RT_FIFO,不需要初始化
  30. {rt_printf_init,ERR_CODE_INIT_SOFTWARE}, // RT_PRINTF
  31. {env_init,ERR_CODE_ENV},
  32. {rt_console_init,ERR_CODE_INIT_SOFTWARE}, // RT_CONSOLE
  33. // 时钟设备由与设备操作相关的代码实现{clk_init,ERR_CODE_RTC}, // RT_CLOCK
  34. {rt_socket_init,ERR_CODE_INIT_SOFTWARE},
  35. {rt_err_init,ERR_CODE_INIT_SOFTWARE},
  36. };
  37. #define RT_INIT_NUM ((int)(sizeof(g_rt_init_func)/sizeof(g_rt_init_func[0])))
  38. INIT_FUNC g_rt_exit_func[]=
  39. {
  40. rt_err_exit,
  41. //clk_exit,
  42. rt_console_exit,
  43. rt_printf_exit,
  44. //rt_mq_exit,
  45. env_exit
  46. //rt_ints_exit
  47. };
  48. #define RT_EXIT_NUM ((int)(sizeof(g_rt_exit_func)/sizeof(INIT_FUNC)))
  49. /*------------------------------ 函数声明 -------------------------------------
  50. */
  51. /*------------------------------ 外部函数 -------------------------------------
  52. 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
  53. */
  54. int rt_init(void)
  55. {
  56. int i,ret;
  57. for(i=0;i<RT_INIT_NUM;i++)
  58. {
  59. ret = g_rt_init_func[i].func();
  60. if(ret != 0)
  61. {
  62. rt_err_set(g_rt_init_func[i].err_code,0);
  63. printf("rt_init err(i=%d,ret=%d)\r\n",i,ret);
  64. return ret;
  65. }
  66. }
  67. return 0;
  68. }
  69. int rt_exit(void)
  70. {
  71. int i,ret;
  72. for(i=0;i<RT_EXIT_NUM;i++)
  73. {
  74. ret = g_rt_exit_func[i]();
  75. if(ret != 0)
  76. {
  77. printf("rt_exit err(i=%d,ret=%d)\r\n",i,ret);
  78. }
  79. }
  80. return 0;
  81. }
  82. /*------------------------------ 内部函数 -------------------------------------
  83. 内部函数以下划线‘_’开头,不需要检查参数的合法性.
  84. */
  85. /*------------------------------ 测试函数 -------------------------------------
  86. 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
  87. 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
  88. */
  89. /*------------------------------ 文件结束 -------------------------------------
  90. */