chrono可以用作裸机微控制器中的定时器/计数器(例如运行RTOS的MSP432)吗?可以配置high_resolution_clock(以及chrono中的其他API),使其根据给定的微控制器的实际定时器滴答/寄存器递增吗?
Real-Time C ++书籍(第16.5节)似乎表明这是可能的,但我还没有找到任何这样的例子,特别是在裸机微控制器中。
如何实施?这会被推荐吗?如果没有,chrono在哪里可以帮助基于RTOS的嵌入式软件?
答案 0 :(得分:7)
我会创建一个现在通过读取定时器寄存器实现的时钟:
#include <chrono>
#include <cstdint>
struct clock
{
using rep = std::int64_t;
using period = std::milli;
using duration = std::chrono::duration<rep, period>;
using time_point = std::chrono::time_point<clock>;
static constexpr bool is_steady = true;
static time_point now() noexcept
{
return time_point{duration{"asm to read timer register"}};
}
};
将周期调整为处理器所处的速度(但必须是编译时常量)。以上我将其设置为1 tick / ms。以下是1 tick == 2ns:
的读数using period = std::ratio<1, 500'000'000>;
现在你可以这样说:
auto t = clock::now(); // a chrono::time_point
和
auto d = clock::now() - t; // a chrono::duration