在裸机微控制器中使用作为定时器?
可以将计时器用作裸机微控制器中的定时器/计数器(例如,运行RTOS的MSP432)? high_resolution_clock(和chrono中的其他API)的配置是否可以根据给定的微控制器的实际计时器滴答/寄存器来递增?在裸机微控制器中使用<chrono>作为定时器?
Real-Time C++书(第16.5节)似乎暗示这是可能的,但我还没有找到任何应用的例子,特别是在裸机微控制器中。
这怎么能实现?这甚至会被推荐?如果没有,那么chrono可以在基于RTOS的嵌入式软件中获得什么帮助?
我会创造现在从您的定时器寄存器读取实现时钟:
#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滴答/毫秒。下面是它应该如何读1点== 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
不应该1 tick = 2ns读取std ::比率? –
@Jörgen:是的,谢谢。愚蠢的思考 - 我的角色。纠正。 –
什么RTOS还不包括计时器服务! ?无论如何,什么是“Chrono”?它可以涉及许多事情。如果你指的是C++ 11,那么你可以标记这个C++并且是明确的。另外,时间和定时器服务是硬件依赖性,所以如果你的嵌入式库支持它,你仍然需要在底层硬件和RTOS上实现系统调用 - 它不会起作用! –
Clifford