如何解决我可以重新定位 chrono 类以使用微控制器作为滴答生成器吗?
我想将微控制器中的计时器用作 chrono 类的滴答生成器。 想象一下,我有一个函数可以从 MCU 的定时器寄存器中获取滴答声,我称之为 get_tcik(),这个寄存器是 32 位无符号整数,每 1 微秒递增。 现在要在 chrono 中使用它,我创建了一个这样的类:
class clock
{
public:
static std::chrono::time_point<clock,std::chrono::duration<std::uint32_t,std::ratio<1,1000000> Now() {
return std::chrono::time_point<clock,1000000> {std::chrono::duration<uint32_t,1000000>> { get_tick() }};
}
};
它不起作用!
解决方法
它不起作用,因为 chrono 库检测到了次优代码格式。 :-)
开个玩笑。
您缺少客户端代码可能期望存在的 clock
的一些嵌套类型。您也可以使用 std::micro
代替 std::ratio<1,1000000>
。你的选择没有错。这只是一种风格建议。
#include <chrono>
class clock
{
public:
using rep = std::uint32_t;
using period = std::micro;
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() {
return time_point{duration { get_tick() }};
}
};
以下是官方要求:http://eel.is/c++draft/time.clock.req
请注意,您的时钟将大约每小时 11 分钟翻转一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。