EdgeGateway_FSU/DevicePortGet/MainProcess_Src/MainProcess.c

112 lines
4.7 KiB
C
Raw Normal View History

2024-03-15 17:25:04 +08:00
/***************************************************************
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "public.h" //公共函数头文件
#include <sys/mman.h> //posix 内存共享 消息队列
#include <sys/stat.h>
#include <fcntl.h>
#include "mslog.h"
#include "SystemTimeFunc.h"
#include "ProcessisRunning.h"
#include<mqueue.h>
#include <time.h>
#include "cJSON.h" //
#include <linux/watchdog.h> //增加看门狗 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);
}