Как часы () работают в & lt; ctime & gt; получить доступ к системным часам?

Я использую микроконтроллер STM32 с минимальным количеством подключенных библиотек. Я хотел бы использовать clock() функция от <ctime> (и, возможно, новый std::chrono) но я застрял в clock() возвращая -1.

Это не удивительно, так как я не ожидаю, что библиотеки в gcc-arm-none-eabi знать периферийное расположение моего микроконтроллера.

Как мне сказать clock откуда берется тик? Могу ли я просто переопределить его, или мне нужно реализовать функцию более низкого уровня?

4

Решение

Обычно это часть работы по переносу реализации libc на новую платформу. Когда вы компилируете копию glibc или newlib (двух самых популярных реализаций стандартной библиотеки C), вы должны предоставить ряд методов-заглушек, один из которых будет предоставлять время. gcc-arm-none-eabi это цель, предопределенная в newlib, которая реализует множество этих заглушек, но не для получения времени, потому что, как вы сказали, это зависит от приложения.

Лучшее, что можно сделать, — это создать инструментарий самостоятельно, реализуя этот метод. Вы можете следовать инструкциям Вот, но перед сборкой newlib отредактируйте цель, чтобы заполнить эту заглушку. Хорошая ссылка на реализацию заглушек доступна Вот.

В качестве альтернативы вы можете реализовать свой собственный clock Функция напрямую, когда вы связываете ваше приложение, оно предпочтет вашу версию, а не версию в библиотеке. Однако будьте осторожны, это означает, что все, что в библиотеке вызывает clock будет по-прежнему вызывать неработающую версию библиотеки, поэтому вам может понадобиться переопределить множество функций.

1

Другие решения

Других решений пока нет …