Я использую микроконтроллер STM32 с минимальным количеством подключенных библиотек. Я хотел бы использовать clock()
функция от <ctime>
(и, возможно, новый std::chrono
) но я застрял в clock()
возвращая -1.
Это не удивительно, так как я не ожидаю, что библиотеки в gcc-arm-none-eabi
знать периферийное расположение моего микроконтроллера.
Как мне сказать clock
откуда берется тик? Могу ли я просто переопределить его, или мне нужно реализовать функцию более низкого уровня?
Обычно это часть работы по переносу реализации libc на новую платформу. Когда вы компилируете копию glibc или newlib (двух самых популярных реализаций стандартной библиотеки C), вы должны предоставить ряд методов-заглушек, один из которых будет предоставлять время. gcc-arm-none-eabi
это цель, предопределенная в newlib, которая реализует множество этих заглушек, но не для получения времени, потому что, как вы сказали, это зависит от приложения.
Лучшее, что можно сделать, — это создать инструментарий самостоятельно, реализуя этот метод. Вы можете следовать инструкциям Вот, но перед сборкой newlib отредактируйте цель, чтобы заполнить эту заглушку. Хорошая ссылка на реализацию заглушек доступна Вот.
В качестве альтернативы вы можете реализовать свой собственный clock
Функция напрямую, когда вы связываете ваше приложение, оно предпочтет вашу версию, а не версию в библиотеке. Однако будьте осторожны, это означает, что все, что в библиотеке вызывает clock
будет по-прежнему вызывать неработающую версию библиотеки, поэтому вам может понадобиться переопределить множество функций.
Других решений пока нет …