libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
libxr_time.hpp
1#pragma once
2
3#include <cstdint>
4
5#include "libxr_assert.hpp"
6#include "libxr_def.hpp"
7
8static inline uint64_t libxr_timebase_max_valid_us = UINT64_MAX; // NOLINT
9static inline uint32_t libxr_timebase_max_valid_ms = UINT32_MAX; // NOLINT
10
11namespace LibXR
12{
13
19{
20 public:
26
32 TimestampUS(uint64_t microsecond) : microsecond_(microsecond) {}
33
38 operator uint64_t() const { return microsecond_; }
39
45 {
46 public:
52 TimeDiffUS(uint64_t diff) : diff_(diff) {}
53
58 operator uint64_t() const { return diff_; }
59
64 [[nodiscard]] double ToSecond() const
65 {
66 return static_cast<double>(diff_) / 1000000.0;
67 }
68
73 [[nodiscard]] float ToSecondf() const
74 {
75 return static_cast<float>(diff_) / 1000000.0f;
76 }
77
82 [[nodiscard]] uint64_t ToMicrosecond() const { return diff_; }
83
88 [[nodiscard]] uint32_t ToMillisecond() const { return diff_ / 1000u; }
89
90 private:
91 uint64_t diff_;
92 };
93
100 TimeDiffUS operator-(const TimestampUS &old_microsecond) const
101 {
102 uint64_t diff; // NOLINT
103
104 if (microsecond_ >= old_microsecond.microsecond_)
105 {
106 diff = microsecond_ - old_microsecond.microsecond_;
107 }
108 else
109 {
110 diff = microsecond_ + (libxr_timebase_max_valid_us - old_microsecond.microsecond_);
111 }
112
113 ASSERT(diff <= libxr_timebase_max_valid_us);
114
115 return TimeDiffUS(diff);
116 }
117
125 {
126 if (this != &other)
127 {
129 }
130 return *this;
131 }
132
133 private:
134 uint64_t microsecond_;
135};
136
142{
143 public:
144 TimestampMS() : millisecond_(0) {}
145 TimestampMS(uint32_t millisecond) : millisecond_(millisecond) {}
146 operator uint32_t() const { return millisecond_; }
147
153 {
154 public:
160 TimeDiffMS(uint32_t diff) : diff_(diff) {}
161
166 operator uint32_t() const { return diff_; }
167
172 [[nodiscard]] double ToSecond() const { return static_cast<double>(diff_) / 1000.0; }
173
178 [[nodiscard]] float ToSecondf() const { return static_cast<float>(diff_) / 1000.0f; }
179
184 [[nodiscard]] uint32_t ToMillisecond() const { return diff_; }
185
190 [[nodiscard]] uint64_t ToMicrosecond() const
191 {
192 return static_cast<uint64_t>(diff_) * 1000u;
193 }
194
195 private:
196 uint32_t diff_;
197 };
198
205 [[nodiscard]] TimeDiffMS operator-(const TimestampMS &old_millisecond) const
206 {
207 uint32_t diff; // NOLINT
208
209 if (millisecond_ >= old_millisecond.millisecond_)
210 {
211 diff = millisecond_ - old_millisecond.millisecond_;
212 }
213 else
214 {
215 diff = millisecond_ + (libxr_timebase_max_valid_ms - old_millisecond.millisecond_);
216 }
217
218 ASSERT(diff <= libxr_timebase_max_valid_ms);
219
220 return TimeDiffMS(diff);
221 }
222
223 private:
224 uint32_t millisecond_;
225};
226
227} // namespace LibXR
表示毫秒级时间差的类。Class representing a time difference in milliseconds.
uint32_t ToMillisecond() const
以毫秒返回时间差。 Returns the time difference in milliseconds.
uint32_t diff_
存储时间差(毫秒)。Time difference stored in milliseconds.
uint64_t ToMicrosecond() const
以微秒返回时间差。 Returns the time difference in microseconds.
double ToSecond() const
以秒返回时间差(double 类型)。 Returns the time difference in seconds as a double.
float ToSecondf() const
以秒返回时间差(float 类型)。 Returns the time difference in seconds as a float.
TimeDiffMS(uint32_t diff)
构造函数,初始化时间差。 Constructor initializing the time difference.
表示毫秒级时间戳的类。Class representing a timestamp in milliseconds.
uint32_t millisecond_
以毫秒存储的时间戳。Timestamp stored in milliseconds.
TimeDiffMS operator-(const TimestampMS &old_millisecond) const
计算两个时间戳之间的时间差。 Computes the time difference between two timestamps.
表示微秒级时间差的类。Class representing a time difference in microseconds.
double ToSecond() const
以秒返回时间差(double 类型)。 Returns the time difference in seconds as a double.
uint64_t ToMicrosecond() const
以微秒返回时间差。 Returns the time difference in microseconds.
TimeDiffUS(uint64_t diff)
构造函数,初始化时间差。 Constructor initializing the time difference.
uint32_t ToMillisecond() const
以毫秒返回时间差。 Returns the time difference in milliseconds.
float ToSecondf() const
以秒返回时间差(float 类型)。 Returns the time difference in seconds as a float.
uint64_t diff_
存储时间差(微秒)。Time difference stored in microseconds.
表示微秒级时间戳的类。Class representing a timestamp in microseconds.
TimeDiffUS operator-(const TimestampUS &old_microsecond) const
计算两个时间戳之间的时间差。 Computes the time difference between two timestamps.
TimestampUS()
默认构造函数,初始化时间戳为 0。 Default constructor initializing the timestamp to 0.
TimestampUS(uint64_t microsecond)
以给定的微秒值构造时间戳。 Constructor initializing the timestamp with a given microsecond value.
uint64_t microsecond_
以微秒存储的时间戳。Timestamp stored in microseconds.
TimestampUS & operator=(const TimestampUS &other)
赋值运算符重载。 Assignment operator overload.
LibXR 命名空间
Definition ch32_gpio.hpp:9