EdgeGateway_FSU/DevicePortGet/Public_Src/SystemTimeFunc.c

136 lines
5.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/***************************************************************
Copyright © huijue Network Co., Ltd. 1998-2129. All rights reserved.
Copyright © 上海汇珏网络通信设备股份有限公司 1998-2129. All rights reserved.
文件名 : SystemTimeFunc.c
作者 : kooloo
版本 : V1.0
描述 : 动环监控/边缘网关FSU 进程是否运行判断 kooloo add 202310
硬件平台 : 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创建
***************************************************************/
#define _GNU_SOURCE //在源文件开头定义_GNU_SOURCE宏 加此宏则不会有错误 kooloo add 202401
#include <stdio.h>
#include <stdlib.h>
#include <signal.h> //signal()
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h> //struct itimerval, setitimer()
#include "public.h" //公共函数头文件
#include "mslog.h"
#include "SystemTimeFunc.h"
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: TimerTicks_sig_handler
** 功能描述: 滴答时钟 SIGALRM信号
** 参数描述:无
** 日  期: 2023年9月02日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
static void TimerTicks_sig_handler(int sig)
{
SystemTicktimer_isr();
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: Systemtimer_Iint
** 功能描述: 滴答时钟初始化
** 参数描述:无
** 日  期: 2023年9月02日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void Systemtimer_Iint(void)
{
struct sigaction sig = { 0 };
struct itimerval tick;
pSysPara->g_SystemTicksCounter = 0; //起始设置为0不需要回滚时间所以设置为0 kooloo add 202311
/* 为 SIGALRM 信号绑定处理函数 */
sig.sa_handler = TimerTicks_sig_handler;
sig.sa_flags = 0;
if (-1 == sigaction(SIGALRM, &sig, NULL))
{
ms_error1("sigaction error!\n");
exit(-1);
}
//间隔定时器
//Timeout to run first time
tick.it_value.tv_sec = C_SYSTEMTIME_COUNTER_BASE;
tick.it_value.tv_usec = 0;
//After first, the Interval time for clock
tick.it_interval.tv_sec = C_SYSTEMTIME_COUNTER_BASE;
tick.it_interval.tv_usec = 0;
if (setitimer(ITIMER_REAL, &tick, NULL) < 0)
{
ms_error1("Set timer failed!\n");
exit(-1);
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: SystemTicktimer_isr
** 功能描述: 滴答时钟更新
** 参数描述:无
** 日  期: 2023年9月02日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void SystemTicktimer_isr(void)
{
if (pSysPara->g_SystemTicksCounter < C_SYSTEMTIME_COUNTER_MAX)
{
pSysPara->g_SystemTicksCounter++;
}
else //时间值超出 这里直接将其初始化为 0 并没有做对齐处理 一般不会连续使用不会超过20天另外 直接清0 并没有过多问题 kooloo add 20190411
{
pSysPara->g_SystemTicksCounter = 0;
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: Timer_getNowTicks
** 功能描述: 获取滴答时钟
** 参数描述:无
** 日  期: 2023年9月02日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
int Timer_getNowTicks(void)
{
return pSysPara->g_SystemTicksCounter;
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: Timer_getDiffValueTicks
** 功能描述: 获取当前Ticks差值 kooloo add 20190114
** 参数描述:无
** 日  期: 2023年9月02日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
int Timer_getDiffValueTicks(int StartTimeTicks)
{
int Tempi = Timer_getNowTicks();
if (Tempi < StartTimeTicks) //如果小于 实际不会有小于此种情况,但考虑程序的健壮性 增加此处代码 kooloo add 20190114
{
return 0; //直接返回0 kooloo add 20190114
}
else
{
return (Tempi - StartTimeTicks); //返回差值 kooloo add 20190114
}
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
** 函数名称: SystemInterval_Iint
** 功能描述: 系统变量初始化
** 参数描述:无
** 日  期: 2023年9月02日
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
void SystemInterval_Iint(void)
{
pSysPara->SystemUpTime = Timer_getNowTicks(); //时间更新判断计时变量 kooloo add 202311
pSysPara->g_TimeUpdateCounter = Timer_getNowTicks(); //时间更新判断计时变量 kooloo add 202311
pSysPara->g_ExeIsRunningCounter = Timer_getNowTicks(); //时间更新判断计时变量 kooloo add 202311
pSysPara->g_ExeIndex = C_SUBPRCESS_DevicePortGetApp;
//Device 数据采集相关变量
pSysPara->g_GetApp_TimeCounter = Timer_getNowTicks(); //DevicePortGetApp 时间计数 kooloo add 202312
pSysPara->g_SendSubDevData_TimeCnt = Timer_getNowTicks(); //DevicePortGetApp 数据发送时间计数 kooloo add 202312
}