Я использую набор инструментов arm-none-eabi с newlib, чтобы нацелиться на пользовательскую плату с ARM Cortex-M0 + (в частности, версия набора инструментов MCU-on-eclipse ). Я компилирую / связываю с -nostartfiles
и --specs=nano.specs
и переназначил stdout и stderr на USB и последовательный порт соответственно. Я создал реализации для большинства системных вызовов языка C.
Я использую библиотеку хронографа с двумя настраиваемыми часами , функции now () получают время по RTC или таймер моей ручки. Похоже, что это отражает назначение стандартных устойчивых и системных часов, и поэтому я, хотя я мог бы попытаться использовать их.
для этого мне пришлось реализовать системный вызов gettimeofday, который я сделал
// returning a set time of one second just for testing
int _gettimeofday(struct timeval* tv, void* tz) {
tv->tv_sec = 1;
tv->tv_usec = 255;
return 0;
}
мой основной код выглядит следующим образом:
int main(void)
{
HWInit();
static std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
static std::chrono::system_clock::time_point t2 = std::chrono::system_clock::now();
int64_t count1 = t1.time_since_epoch().count();
int64_t count2 = t2.time_since_epoch().count();
printf("Time 1: %lld\n Time 2: %lld\n", count1, count2);
for(;;){}
return 0;
}
с помощью отладчика я вижу, что и steady_clock::now()
, и sysytem_clock::now()
вызывают мою функцию _gettimeofday (), и оба заканчиваются с одинаковым моментом времени.
конечно, если я пытаюсь сделать следующее, я получаю несколько ошибок определения:
using SysClock = std::chrono::system_clock;
SysClock::time_point SysClock::now() noexcept {
return SysClock::time_point( SysClock::duration(1983) );
}
Так можно ли как-то перегрузить функции now () стандартных хронографических часов? или, может быть, вся реализация часов с моей собственной продолжительностью и типами повторений, которые лучше соответствуют оборудованию? Я могу перегрузить new и delete для моей встроенной системы (и должен), поэтому было бы неплохо сделать это для chrono.