/****************************************************************************** 版权所有: 文件名称: rt.c 文件版本: 01.01 创建作者: sunxi 创建日期: 2020-06-18 功能说明: 实时微系统。 其它说明: 修改记录: */ /*------------------------------- 头文件 -------------------------------------- */ #include "rt.h" #include "debug_print.h" int g_clock_mode; int g_clock_mode_gps; /*------------------------------- 宏定义 -------------------------------------- */ /*------------------------------ 类型结构 ------------------------------------- */ /*------------------------------ 全局变量 ------------------------------------- */ struct init_t g_rt_init_func[] = { // RT_CLIB,不需要初始化 // RT_FILE,不需要初始化 // RT_IF,不需要初始化 // RT_INTS,不需要初始化 // RT_SOFT_IRQ,不需要初始化 // RT_FIFO,不需要初始化 {rt_printf_init, ERR_CODE_INIT_SOFTWARE}, // RT_PRINTF {env_init, ERR_CODE_ENV}, {rt_console_init, ERR_CODE_INIT_SOFTWARE}, // RT_CONSOLE // 时钟设备由与设备操作相关的代码实现{clk_init,ERR_CODE_RTC}, // RT_CLOCK {rt_socket_init, ERR_CODE_INIT_SOFTWARE}, {rt_err_init, ERR_CODE_INIT_SOFTWARE}, }; #define RT_INIT_NUM ((int)(sizeof(g_rt_init_func) / sizeof(g_rt_init_func[0]))) INIT_FUNC g_rt_exit_func[] = { rt_err_exit, // clk_exit, rt_console_exit, rt_printf_exit, // rt_mq_exit, env_exit // rt_ints_exit }; #define RT_EXIT_NUM ((int)(sizeof(g_rt_exit_func) / sizeof(INIT_FUNC))) /*------------------------------ 函数声明 ------------------------------------- */ /*------------------------------ 外部函数 ------------------------------------- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性. */ int rt_init(void) { int i, ret; for (i = 0; i < RT_INIT_NUM; i++) { ret = g_rt_init_func[i].func(); if (ret != 0) { rt_err_set(g_rt_init_func[i].err_code, 0); dp_err_n_c("rt_init err(i=%d,ret=%d)", i, ret); return ret; } } return 0; } int rt_exit(void) { int i, ret; for (i = 0; i < RT_EXIT_NUM; i++) { ret = g_rt_exit_func[i](); if (ret != 0) { dp_err_n_c("rt_exit err(i=%d,ret=%d)", i, ret); } } return 0; } /*------------------------------ 内部函数 ------------------------------------- 内部函数以下划线‘_’开头,不需要检查参数的合法性. */ /*------------------------------ 测试函数 ------------------------------------- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数). */ /*------------------------------ 文件结束 ------------------------------------- */