/*************************************************************** Copyright © huijue Network Co., Ltd. 1998-2129. All rights reserved. Copyright © 上海汇珏网络通信设备股份有限公司 1998-2129. All rights reserved. 文件名 : MainProcess.c 作者 : kooloo 版本 : V1.0 描述 : 动环监控/边缘网关FSU 守护进程 POSIX 内存共享 队列消息等定义初始化 硬件平台 : iMX6ULL 内核版本 : linux-imx-4.1.15-2.1.0-g3dc0a4b-v2.7 编译器版本 :gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf 日志 : 初版V1.0 2023/7/15 kooloo创建 ***************************************************************/ #include #include #include #include #include #include "public.h" //公共函数头文件 #include //posix 内存共享 消息队列 #include #include #include "mslog.h" #include "SystemTimeFunc.h" #include "ProcessisRunning.h" #include #include #include "cJSON.h" // #include //增加看门狗 kooloo add 20240311 #define WDOG_DEV_ONOFF 1 //=0 关闭 =1 开启 int main(int argc, char *argv[]) { int ret,wdog_fd; //临时变量 int op; struct timespec Sleep_t; int timeout=WDOG_DEV_TIMEOUT; Sleep_t.tv_nsec=0; Sleep_t.tv_sec=1; //时间基准间隔1s 判断依据宏定义 设置的大小 kooloo add 202311 //设置日志级别为more;打开标准输出、打印所在行数和函数名、文件日志功能; //设置日志目录为:/tmp/mslog; //设置日志文件为:mslog_sample.txt; //FLAG为LOG_API_TEST或TAG_TEST2的日志,不进行打印; // mslog_api_init((mslog_level_warn|mslog_enable_stdprint|mslog_enable_linefunc|mslog_enable_filelog), // "/tmp/mslog","mslog_fsu.txt","LOG_API_TEST|TAG_TEST2"); mslog_api_init(C_MSLOG_FLAG_MP,S_MSLOGDIR_PATH,S_MSLOGFILE_NAME_MP,"LOG_API_TEST|TAG_TEST2"); printf("MainProcessApp \n"); //开机 程序打印信息 做区分使用 #if WDOG_DEV_ONOFF //看门狗 方便折叠 kooloo add 20240311 /* 打开看门狗 */ wdog_fd = open(WDOG_DEV, O_RDWR); if (0 > wdog_fd) { ms_error1("open error: %s: %s\n", WDOG_DEV, strerror(errno)); exit(EXIT_FAILURE); } /* 打开之后看门狗计时器会开启、先停止它 */ op = WDIOS_DISABLECARD; if (0 > ioctl(wdog_fd, WDIOC_SETOPTIONS, &op)) { ms_error1("ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno)); close(wdog_fd); exit(EXIT_FAILURE); } /* 设置超时时间 */ if (0 > ioctl(wdog_fd, WDIOC_SETTIMEOUT, &timeout)) { ms_error1("ioctl error: WDIOC_SETTIMEOUT: %s\n", strerror(errno)); close(wdog_fd); exit(EXIT_FAILURE); } /* 开启看门狗计时器 */ op = WDIOS_ENABLECARD; if (0 > ioctl(wdog_fd, WDIOC_SETOPTIONS, &op)) { ms_error1("ioctl error: WDIOC_SETOPTIONS: %s\n", strerror(errno)); close(wdog_fd); exit(EXIT_FAILURE); } #endif SystemIpc_Init(); //申请共享内存和队列 kooloo add 202311 SystemInfo_PrintLog(); //开机信息打印 及相关参数获取 kooloo add 202311 Systemtimer_Iint(); //滴答时钟初始化 kooloo add 202311 SystemInterval_Iint(); //变量初始化 kooloo add 202311 SystemProcess_Iint(); //启动相关进程 kooloo add 202311 执行和判断相关子程序时,切换到指定路径下 kooloo add 202312 while(1) { #if WDOG_DEV_ONOFF //看门狗 方便折叠 kooloo add 20240311 ioctl(wdog_fd, WDIOC_KEEPALIVE, NULL); //喂狗时间设置us微秒、在超时时间到来前100ms喂狗 定时喂狗 kooloo add 20240311 #endif //判断开机时长 判断是否需要更新时间 if(Timer_getDiffValueTicks(pSysPara->g_TimeUpdateCounter)>C_SYSTEMTIME_UPDATE_PERIOD) { SystemProcess_Exe(S_TimeAlignedApp_PATH_EXE); //启动获取时间的子进程 pSysPara->g_TimeUpdateCounter=Timer_getNowTicks(); } //判断子进程是否运行 间隔判断 if(Timer_getDiffValueTicks(pSysPara->g_ExeIsRunningCounter)>C_PRCESS_ISRUNNING_CYCLE_PERIOD) { ProcessIsRunning_ServiceLoop(); //判断子进程是否正常运行 kooloo add 202311 pSysPara->g_ExeIsRunningCounter=Timer_getNowTicks(); } nanosleep(&Sleep_t, NULL); //高精度休眠时间 kooloo add 202311 } munmap(pSysPara,C_SYSDATASHARE_LEN); //系统调用解除指定地址范围内的映射 kooloo add 202311 退出主进程 解除映射 mslog_api_deinit();//退出释放日志资源; exit(0); }