project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp: Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem. sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately. sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades. sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for fastboot. Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
486 lines
10 KiB
C
486 lines
10 KiB
C
/*****************************************************/
|
|
/* Various timer routines. */
|
|
/* Al Aburto, aburto@nosc.mil, 18 Feb 1997 */
|
|
/* */
|
|
/* t = dtime() outputs the current time in seconds. */
|
|
/* Use CAUTION as some of these routines will mess */
|
|
/* up when timing across the hour mark!!! */
|
|
/* */
|
|
/* For timing I use the 'user' time whenever */
|
|
/* possible. Using 'user+sys' time is a separate */
|
|
/* issue. */
|
|
/* */
|
|
/* Example Usage: */
|
|
/* [timer options added here] */
|
|
/* main() */
|
|
/* { */
|
|
/* double starttime,benchtime,dtime(); */
|
|
/* */
|
|
/* starttime = dtime(); */
|
|
/* [routine to time] */
|
|
/* benchtime = dtime() - starttime; */
|
|
/* } */
|
|
/* */
|
|
/* [timer code below added here] */
|
|
/*****************************************************/
|
|
|
|
/***************************************************************/
|
|
/* Timer options. You MUST uncomment one of the options below */
|
|
/* or compile, for example, with the '-DUNIX' option. */
|
|
/***************************************************************/
|
|
/* #define Amiga */
|
|
/* #define UNIX */
|
|
/* #define UNIX_Old */
|
|
/* #define VMS */
|
|
/* #define BORLAND_C */
|
|
/* #define MSC */
|
|
/* #define MAC */
|
|
/* #define IPSC */
|
|
/* #define FORTRAN_SEC */
|
|
/* #define GTODay */
|
|
/* #define CTimer */
|
|
/* #define UXPM */
|
|
/* #define MAC_TMgr */
|
|
/* #define PARIX */
|
|
/* #define POSIX */
|
|
/* #define WIN32 */
|
|
/* #define POSIX1 */
|
|
#define RISCOS
|
|
/***********************/
|
|
|
|
/*********************************/
|
|
/* Timer code. */
|
|
/*********************************/
|
|
/*******************/
|
|
/* Amiga dtime() */
|
|
/*******************/
|
|
#ifdef Amiga
|
|
#include <ctype.h>
|
|
#define HZ 50
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
struct tt
|
|
{
|
|
long days;
|
|
long minutes;
|
|
long ticks;
|
|
} tt;
|
|
|
|
DateStamp(&tt);
|
|
|
|
q = ((double)(tt.ticks + (tt.minutes * 60L * 50L))) / (double)HZ;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/*****************************************************/
|
|
/* UNIX dtime(). This is the preferred UNIX timer. */
|
|
/* Provided by: Markku Kolkka, mk59200@cc.tut.fi */
|
|
/* HP-UX Addition by: Bo Thide', bt@irfu.se */
|
|
/*****************************************************/
|
|
#ifdef UNIX
|
|
#include <time.h>
|
|
#include <sys/resource.h>
|
|
|
|
#ifdef hpux
|
|
#include <sys/syscall.h>
|
|
#define getrusage(a,b) syscall(SYS_getrusage,a,b)
|
|
#endif
|
|
|
|
struct rusage rusage;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
getrusage(RUSAGE_SELF,&rusage);
|
|
|
|
q = (double)(rusage.ru_utime.tv_sec);
|
|
q = q + (double)(rusage.ru_utime.tv_usec) * 1.0e-06;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/***************************************************/
|
|
/* UNIX_Old dtime(). This is the old UNIX timer. */
|
|
/* Make sure HZ is properly defined in param.h !! */
|
|
/***************************************************/
|
|
#ifdef UNIX_Old
|
|
#include <sys/types.h>
|
|
#include <sys/times.h>
|
|
#include <sys/param.h>
|
|
|
|
#ifndef HZ
|
|
#define HZ 60
|
|
#endif
|
|
|
|
struct tms tms;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
times(&tms);
|
|
|
|
q = (double)(tms.tms_utime) / (double)HZ;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/*********************************************************/
|
|
/* VMS dtime() for VMS systems. */
|
|
/* Provided by: RAMO@uvphys.phys.UVic.CA */
|
|
/* Some people have run into problems with this timer. */
|
|
/*********************************************************/
|
|
#ifdef VMS
|
|
#include time
|
|
|
|
#ifndef HZ
|
|
#define HZ 100
|
|
#endif
|
|
|
|
struct tbuffer_t
|
|
{
|
|
int proc_user_time;
|
|
int proc_system_time;
|
|
int child_user_time;
|
|
int child_system_time;
|
|
};
|
|
|
|
struct tbuffer_t tms;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
times(&tms);
|
|
|
|
q = (double)(tms.proc_user_time) / (double)HZ;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/******************************/
|
|
/* BORLAND C dtime() for DOS */
|
|
/******************************/
|
|
#ifdef BORLAND_C
|
|
#include <ctype.h>
|
|
#include <dos.h>
|
|
#include <time.h>
|
|
|
|
#define HZ 100
|
|
struct time tnow;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
gettime(&tnow);
|
|
|
|
q = 60.0 * (double)(tnow.ti_min);
|
|
q = q + (double)(tnow.ti_sec);
|
|
q = q + (double)(tnow.ti_hund)/(double)HZ;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/**************************************/
|
|
/* Microsoft C (MSC) dtime() for DOS */
|
|
/**************************************/
|
|
#ifdef MSC
|
|
#include <time.h>
|
|
#include <ctype.h>
|
|
|
|
#define HZ CLOCKS_PER_SEC
|
|
clock_t tnow;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
tnow = clock();
|
|
|
|
q = (double)tnow / (double)HZ;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/*************************************/
|
|
/* Macintosh (MAC) Think C dtime() */
|
|
/*************************************/
|
|
#ifdef MAC
|
|
#include <time.h>
|
|
|
|
#define HZ 60
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
q = (double)clock() / (double)HZ;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/************************************************************/
|
|
/* iPSC/860 (IPSC) dtime() for i860. */
|
|
/* Provided by: Dan Yergeau, yergeau@gloworm.Stanford.EDU */
|
|
/************************************************************/
|
|
#ifdef IPSC
|
|
extern double dclock();
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
q = dclock();
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/**************************************************/
|
|
/* FORTRAN dtime() for Cray type systems. */
|
|
/* This is the preferred timer for Cray systems. */
|
|
/**************************************************/
|
|
#ifdef FORTRAN_SEC
|
|
|
|
fortran double second();
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
second(&q);
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/***********************************************************/
|
|
/* UNICOS C dtime() for Cray UNICOS systems. Don't use */
|
|
/* unless absolutely necessary as returned time includes */
|
|
/* 'user+system' time. Provided by: R. Mike Dority, */
|
|
/* dority@craysea.cray.com */
|
|
/***********************************************************/
|
|
#ifdef CTimer
|
|
#include <time.h>
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
clock_t clock(void);
|
|
|
|
q = (double)clock() / (double)CLOCKS_PER_SEC;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/********************************************/
|
|
/* Another UNIX timer using gettimeofday(). */
|
|
/* However, getrusage() is preferred. */
|
|
/********************************************/
|
|
#ifdef GTODay
|
|
#include <sys/time.h>
|
|
|
|
struct timeval tnow;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
gettimeofday(&tnow,NULL);
|
|
q = (double)tnow.tv_sec + (double)tnow.tv_usec * 1.0e-6;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/*****************************************************/
|
|
/* Fujitsu UXP/M timer. */
|
|
/* Provided by: Mathew Lim, ANUSF, M.Lim@anu.edu.au */
|
|
/*****************************************************/
|
|
#ifdef UXPM
|
|
#include <sys/types.h>
|
|
#include <sys/timesu.h>
|
|
struct tmsu rusage;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
timesu(&rusage);
|
|
|
|
q = (double)(rusage.tms_utime) * 1.0e-06;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/**********************************************/
|
|
/* Macintosh (MAC_TMgr) Think C dtime() */
|
|
/* requires Think C Language Extensions or */
|
|
/* #include <MacHeaders> in the prefix */
|
|
/* provided by Francis H Schiffer 3rd (fhs) */
|
|
/* skipschiffer@genie.geis.com */
|
|
/**********************************************/
|
|
#ifdef MAC_TMgr
|
|
#include <Timer.h>
|
|
#include <stdlib.h>
|
|
|
|
static TMTask mgrTimer;
|
|
static Boolean mgrInited = false;
|
|
static double mgrClock;
|
|
|
|
#define RMV_TIMER RmvTime( (QElemPtr)&mgrTimer )
|
|
#define MAX_TIME 1800000000L
|
|
/* MAX_TIME limits time between calls to */
|
|
/* dtime( ) to no more than 30 minutes */
|
|
/* this limitation could be removed by */
|
|
/* creating a completion routine to sum */
|
|
/* 30 minute segments (fhs 1994 feb 9) */
|
|
|
|
static void Remove_timer( )
|
|
{
|
|
RMV_TIMER;
|
|
mgrInited = false;
|
|
}
|
|
|
|
double dtime( )
|
|
{
|
|
if( mgrInited ) {
|
|
RMV_TIMER;
|
|
mgrClock += (MAX_TIME + mgrTimer.tmCount)*1.0e-6;
|
|
} else {
|
|
if( _atexit( &Remove_timer ) == 0 ) mgrInited = true;
|
|
mgrClock = 0.0;
|
|
}
|
|
|
|
if ( mgrInited )
|
|
{
|
|
mgrTimer.tmAddr = NULL;
|
|
mgrTimer.tmCount = 0;
|
|
mgrTimer.tmWakeUp = 0;
|
|
mgrTimer.tmReserved = 0;
|
|
InsTime( (QElemPtr)&mgrTimer );
|
|
PrimeTime( (QElemPtr)&mgrTimer, -MAX_TIME );
|
|
}
|
|
return( mgrClock );
|
|
}
|
|
#endif
|
|
|
|
/***********************************************************/
|
|
/* Parsytec GCel timer. */
|
|
/* Provided by: Georg Wambach, gw@informatik.uni-koeln.de */
|
|
/***********************************************************/
|
|
#ifdef PARIX
|
|
#include <sys/time.h>
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
q = (double) (TimeNowHigh()) / (double) CLK_TCK_HIGH;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/************************************************/
|
|
/* Sun Solaris POSIX dtime() routine */
|
|
/* Provided by: Case Larsen, CTLarsen.lbl.gov */
|
|
/************************************************/
|
|
#ifdef POSIX
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
#include <sys/rusage.h>
|
|
|
|
#ifdef __hpux
|
|
#include <sys/syscall.h>
|
|
#endif
|
|
|
|
struct rusage rusage;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
|
|
getrusage(RUSAGE_SELF,&rusage);
|
|
|
|
q = (double)(rusage.ru_utime.tv_sec);
|
|
q = q + (double)(rusage.ru_utime.tv_nsec) * 1.0e-09;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
|
|
/****************************************************/
|
|
/* Windows NT (32 bit) dtime() routine */
|
|
/* Provided by: Piers Haken, piersh@microsoft.com */
|
|
/****************************************************/
|
|
#ifdef WIN32
|
|
#include <windows.h>
|
|
|
|
double dtime(void)
|
|
{
|
|
double q;
|
|
|
|
q = (double)GetTickCount() * 1.0e-03;
|
|
|
|
return q;
|
|
}
|
|
#endif
|
|
|
|
/*****************************************************/
|
|
/* Time according to POSIX.1 - <J.Pelan@qub.ac.uk> */
|
|
/* Ref: "POSIX Programmer's Guide" O'Reilly & Assoc.*/
|
|
/*****************************************************/
|
|
#ifdef POSIX1
|
|
#define _POSIX_SOURCE 1
|
|
#include <unistd.h>
|
|
#include <limits.h>
|
|
#include <sys/times.h>
|
|
|
|
struct tms tms;
|
|
|
|
double dtime()
|
|
{
|
|
double q;
|
|
times(&tms);
|
|
q = (double)tms.tms_utime / (double)CLK_TCK;
|
|
return q;
|
|
}
|
|
#endif
|
|
/*****************************************************/
|
|
/* RiscOS implementation of dtime(): Guy Griffin */
|
|
/* uses clock() */
|
|
/*****************************************************/
|
|
#ifdef RISCOS
|
|
#include <time.h>
|
|
#include <ctype.h>
|
|
|
|
#define HZ CLOCKS_PER_SEC
|
|
clock_t time_now;
|
|
|
|
double dtime(void)
|
|
{
|
|
register double q;
|
|
|
|
time_now = clock();
|
|
q = (double)time_now / (double)HZ;
|
|
return (q);
|
|
}
|
|
#endif
|