生活随笔
收集整理的這篇文章主要介紹了
计数信号量的获取与释放
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
1 計數信號量的獲取與釋放
1.1 設計實現
信號量的wait:
信號量的notify:
信號量的無等待獲取:
uint32_t tSemWait
(tSem
* sem
, uint32_t waitTicks
)
{uint32_t status
= tTaskEnterCritical();if (sem
->count
> 0){--sem
->count
;tTaskExitCritical(status
); return tErrorNoError
;}else { tEventWait(&sem
->event
, currentTask
, (void *)0, tEventTypeSem
, waitTicks
); tTaskExitCritical(status
);tTaskSched();return currentTask
->waitEventResult
;}
}
uint32_t tSemNoWaitGet
(tSem
* sem
)
{uint32_t status
= tTaskEnterCritical();if (sem
->count
> 0) { --sem
->count
; tTaskExitCritical(status
);return tErrorNoError
;} else {tTaskExitCritical(status
);return tErrorResourceUnavaliable
;}
}
void tSemNotify
(tSem
* sem
)
{uint32_t status
= tTaskEnterCritical(); if (tEventWaitCount(&sem
->event
) > 0){tTask
* task
= tEventWakeUp(&sem
->event
, (void *)0, tErrorNoError
);if (task
->prio
< currentTask
->prio
){tTaskSched(); }}else{++sem
->count
;if ((sem
->maxCount
!= 0) && (sem
->count
> sem
->maxCount
)) { sem
->count
= sem
->maxCount
;}}tTaskExitCritical(status
);
}
參考資料:
【李述銅】從0到1自己動手寫嵌入式操作系統
總結
以上是生活随笔為你收集整理的计数信号量的获取与释放的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。