Bei ARM-GCC wird üblicherweise die newlib als Bibliothek benutzt. Diese
hat ihre Wurzeln in (nicht-GPL-)Systembibliotheken diverse unixoider
Opensource-Projekte. Das betrifft erstmal alles, was auf einem Unix
im „Userland“ (also außerhalb des Kernels rein in der Bibliothek)
abhandelbar ist.
Die eigentliche Zeit muss man dabei über einen Syscall bereitstellen.
Die newlib-Implementierung von time() sieht so aus:
1 | time_t
|
2 | _DEFUN (time, (t),
|
3 | time_t * t)
|
4 | {
|
5 | struct timeval now;
|
6 |
|
7 | if (_gettimeofday_r (_REENT, &now, NULL) >= 0)
|
8 | {
|
9 | if (t)
|
10 | *t = now.tv_sec;
|
11 | return now.tv_sec;
|
12 | }
|
13 | return -1;
|
14 | }
|
d.h. sie erwartet, dass es ein _gettimeofday_r() gibt, mit dem sie
die aktuelle Uhrzeit ermitteln kann.
Diesen „Syscall“ muss man natürlich selbst implementieren, das ist
dann die Stelle, an der auf die RTC zurückgegriffen werden kann.