8 #include "RtosSyncObject.hpp"
9 #include "RtosTask.hpp"
18 mCurrentCount = initialCount;
24 RtosSyncObject::~RtosSyncObject() {
35 RtosPortable::enterCriticalSection();
37 if (mCurrentCount > 0) {
38 if (value > mCurrentCount) {
39 value = mCurrentCount;
41 mCurrentCount -= value;
51 if (value > mCurrentCount) {
52 value = mCurrentCount;
54 mCurrentCount -= value;
61 void RtosSyncObject::internalWakeUpWaitingToTake() {
63 if (iterableSyncObj) {
65 RtosTask * task = iterableSyncObj->mTaskOwner;
66 task->mIterableCore.mListOwner->
remove(task->mIterableCore);
68 RtosPortable::yield();
79 RtosPortable::enterCriticalSection();
81 int available = mMaxCount - mCurrentCount;
83 if (value > available) {
86 mCurrentCount += value;
96 available = mMaxCount - mCurrentCount;
98 if (value > available) {
101 mCurrentCount += value;
108 void RtosSyncObject::internalWakeUpWaitingToGive() {
110 if (iterableSyncObj) {
112 RtosTask * task = iterableSyncObj->mTaskOwner;
113 task->mIterableCore.mListOwner->
remove(task->mIterableCore);
115 RtosPortable::yield();
137 task->mIterableSyncObj.mSortValue = 0;
140 RtosPortable::yield();
141 RtosPortable::exitCriticalSection();
142 RtosPortable::enterCriticalSection();
144 return !task->mIsTimeout;