/*
平台提供的系统函数为有符号数32位,单位为us,时间太短,无法满足需求,扩充为64位无符号数,可以满足需求
*/
uint32_t cissys_gettime()
{
int32_t ctime = 0;
int32_t maxint = (uint32_t)(-1) >> 1;
uint32_t maxuint = (uint32_t)(~0);
static uint64_t rtime = 0;
static uint32_t flag = 0;
static uint32_t circle = 0;
static uint32_t mutextInitFlag = 0;
/* if(!mutextInitFlag)
{
mutextInitFlag = 1;
cissys_lockcreate(&mutex_systime);
}
cissys_lock(mutex_systime,CIS_CONFIG_LOCK_INFINITY);*/
ctime = system_get_time(); //获取系统时间
/*32位有符号数转化为32位无符号数*/
if(ctime < 0)
{
rtime = ctime + maxuint + 1; //系统时间已经翻转到有符号数的负数部分,通过补码转化为无符号数
}
else
{
rtime = ctime; //系统时间在有符号数的正数部分
}
/*32位无符号数转化为64位无符号数*/
if(rtime < maxint)
{
if(flag == 1)
{
flag = 0;
circle++;
}
}
else if(rtime >= maxint)
{
flag = 1;
}
rtime += (maxuint + 1) *circle;
// cissys_unlock(mutex_systime);
/*us转化为ms*/
return (uint32_t)(rtime/1000);
}