运用 作为裸机微控制器的定时器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运用 作为裸机微控制器的定时器?相关的知识,希望对你有一定的参考价值。

chrono可以用作裸机微控制器中的定时器/计数器(例如运行RTOS的MSP432)吗?可以配置high_resolution_clock(和chrono中的其他API),使其根据给定的微控制器的实际定时器滴答/寄存器递增吗?

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 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

以上是关于运用 作为裸机微控制器的定时器?的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103微控制器不同类型 的定时器有啥区别?

如何在微控制器按钮上使while循环更快?

stm32f103微控制器通用定时器的常用工作模式都有哪些

STM32 HAL_Delay TIMER微控制器[关闭]

如何将网站作为单个文件提供?

JZ2440 裸机驱动 第10章 系统时钟和定时器