libxr 1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
semaphore.cpp
1#include "semaphore.hpp"
2
3#include <semaphore.h>
4
5#include <cstddef>
6
7#include "libxr_def.hpp"
8#include "libxr_system.hpp"
9
10using namespace LibXR;
11
13{
14 sem_init(semaphore_handle_, 0, init_count);
15}
16
18{
20 delete semaphore_handle_;
21}
22
24
25ErrorCode Semaphore::Wait(uint32_t timeout)
26{
28 {
29 return ErrorCode::OK;
30 }
31
32 if (!timeout)
33 {
34 return ErrorCode::TIMEOUT;
35 }
36
37 uint32_t start_time = _libxr_webots_time_count;
38 bool ans = false;
39
40 struct timespec ts;
42
43 uint32_t add = 0;
44 int64_t raw_time = static_cast<__syscall_slong_t>(1U * 1000U * 1000U) + ts.tv_nsec;
45 add = raw_time / (static_cast<int64_t>(1000U * 1000U * 1000U));
46
47 ts.tv_sec += add;
48 ts.tv_nsec = raw_time % (static_cast<int64_t>(1000U * 1000U * 1000U));
49
50 while (_libxr_webots_time_count - start_time < timeout)
51 {
53 if (ans)
54 {
55 return ErrorCode::OK;
56 }
57 }
58
59 return ErrorCode::TIMEOUT;
60}
61
63{
64 UNUSED(in_isr);
65 Post();
66}
67
68size_t Semaphore::Value()
69{
70 int value = 0;
72 return value;
73}
void Post()
释放(增加)信号量 Releases (increments) the semaphore
Definition semaphore.cpp:13
void PostFromCallback(bool in_isr)
从中断回调中释放(增加)信号量 Releases (increments) the semaphore from an ISR (Interrupt Service Routine)
Definition semaphore.cpp:23
~Semaphore()
析构信号量对象,释放资源 Destroys the semaphore object and releases resources
Definition semaphore.cpp:11
libxr_semaphore_handle semaphore_handle_
信号量句柄 Semaphore handle
Semaphore(uint32_t init_count=0)
构造一个信号量对象 Constructs a semaphore object
Definition semaphore.cpp:8
size_t Value()
获取当前信号量的值 Gets the current value of the semaphore
Definition semaphore.cpp:35
ErrorCode Wait(uint32_t timeout=UINT32_MAX)
等待(减少)信号量 Waits (decrements) the semaphore
Definition semaphore.cpp:15
LibXR Color Control Library / LibXR终端颜色控制库
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值