stm32rcos
 
読み取り中…
検索中…
一致する文字列を見つけられません
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 stm32rcos {
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, uint32_t attr_bits = 0) {
26 osMessageQueueAttr_t attr{};
27 attr.attr_bits = attr_bits;
28 queue_id_ = QueueId{osMessageQueueNew(capacity, sizeof(T), &attr)};
29 }
30
31 bool push(const T &value, uint32_t timeout) {
32 return osMessageQueuePut(queue_id_.get(), &value, 0, timeout) == osOK;
33 }
34
35 bool pop(T &value, uint32_t timeout) {
36 return osMessageQueueGet(queue_id_.get(), &value, nullptr, timeout) == osOK;
37 }
38
39 void clear() { osMessageQueueReset(queue_id_.get()); }
40
41 size_t size() { return osMessageQueueGetCount(queue_id_.get()); }
42
43 size_t capacity() { return osMessageQueueGetCapacity(queue_id_.get()); }
44
45private:
46 QueueId queue_id_;
47};
48
49} // namespace core
50} // namespace stm32rcos
bool pop(T &value, uint32_t timeout)
Definition queue.hpp:35
Queue(size_t capacity, uint32_t attr_bits=0)
Definition queue.hpp:25
void clear()
Definition queue.hpp:39
size_t capacity()
Definition queue.hpp:43
size_t size()
Definition queue.hpp:41
bool push(const T &value, uint32_t timeout)
Definition queue.hpp:31
Definition mutex.hpp:10
Definition mutex.hpp:9