我可以重新定位 chrono class 以使用微控制器作为滴答发生器吗?
Can I retarget the chrono class to use microcontroller as tick generator?
我想在我的微控制器中使用定时器作为 chrono class 的滴答发生器。
想象一下,我有一个函数可以从 MCU 中的定时器寄存器获取滴答声,我称之为 get_tcik() 并且这个寄存器是 32 位无符号整数,每 1 微秒递增一次。
现在为了将它与 chrono 一起使用,我创建了一个 class,如下所示:
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, std::chrono::duration<std::uint32_t, std::ratio<1, 1000000> {std::chrono::duration<uint32_t, std::ratio<1, 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
请注意,您的时钟大约每 1 小时 11 分钟翻转一次。
我想在我的微控制器中使用定时器作为 chrono class 的滴答发生器。 想象一下,我有一个函数可以从 MCU 中的定时器寄存器获取滴答声,我称之为 get_tcik() 并且这个寄存器是 32 位无符号整数,每 1 微秒递增一次。 现在为了将它与 chrono 一起使用,我创建了一个 class,如下所示:
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, std::chrono::duration<std::uint32_t, std::ratio<1, 1000000> {std::chrono::duration<uint32_t, std::ratio<1, 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
请注意,您的时钟大约每 1 小时 11 分钟翻转一次。