tutrcos
読み取り中…
検索中…
一致する文字列を見つけられません
queue.hpp
[詳解]
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <memory>
6#include <type_traits>
7
8#include "cmsis_os2.h"
9
10namespace tutrcos {
11namespace core {
12
13template <class T> class Queue {
14private:
15 struct Deleter {
16 void operator()(osMessageQueueId_t queue_id) {
17 osMessageQueueDelete(queue_id);
18 }
19 };
20
21 using QueueId =
22 std::unique_ptr<std::remove_pointer_t<osMessageQueueId_t>, Deleter>;
23
24public:
25 Queue(size_t capacity) {
26 queue_id_ = QueueId{osMessageQueueNew(capacity, sizeof(T), nullptr)};
27 }
28
29 bool push(const T &value, uint32_t timeout) {
30 return osMessageQueuePut(queue_id_.get(), &value, 0, timeout) == osOK;
31 }
32
33 bool pop(T &value, uint32_t timeout) {
34 return osMessageQueueGet(queue_id_.get(), &value, nullptr, timeout) == osOK;
35 }
36
37 void clear() { osMessageQueueReset(queue_id_.get()); }
38
39 size_t size() { return osMessageQueueGetCount(queue_id_.get()); }
40
41private:
42 QueueId queue_id_;
43};
44
45} // namespace core
46} // namespace tutrcos
Definition queue.hpp:13
bool pop(T &value, uint32_t timeout)
Definition queue.hpp:33
bool push(const T &value, uint32_t timeout)
Definition queue.hpp:29
Queue(size_t capacity)
Definition queue.hpp:25
void clear()
Definition queue.hpp:37
size_t size()
Definition queue.hpp:39
Definition kernel.hpp:7