Dear Sir or Madam,
I cannot get around the problem of getting time() function in <time.h> to work properly.
I have a microcontroller with no OS (embedded system), it is a single core, single thread ARM Cortex-M4 Silicon Labs EFM32GG12B110F1024GM64 processor, and Silicon Labs IDE Simplicity Studio is using arm-gnu-gcc compiler v7.2.1 arm-none-eabi-gcc with Newlib Nano C library.
I can configure a 32-bit hardware counter to count at 1 tick/second, initialize it to current UNIX time (1579964593 at the writing of this e-mail), but how do I tell time() function to use my custom function as the underlying source of time?
I did spend a night searching for info, but documentation does not explicitly tell how, most Newlib articles just make an example that does not return anything, so I am kinda stuck. I have figured out that maybe it has something to do with _gettimeofday() or _gettimeofday_r() functions.
In Github, it says that time() function implementation is:
_DEFUN (time, (t),
time_t * t)
struct timeval now;
if (_gettimeofday_r (_REENT, &now, NULL) >= 0)
*t = now.tv_sec;
That _gettimeofday_r() function according to Github just calls another, similarly named _gettimeofday() function. I tried the following: created _gettimeofday():
In main code, I call:
The output is
So the function _gettimeofday() is called, but its data is just discarded. time() just returns 0 instead of dummy 100.
If I delete _gettimeofday() function, the time() function returns -1, so I guess I am somewhere on the right track, but all leads end here.
I could also just forget about it and use my custom time function, but now I am kinda addicted to solving this puzzle.