freertos信号量まとめ

2076 ワード

FreeRTOS-FreeRTOSが提供する機能(信号量、タスク通知、キューなど)に基づいてプログラムを設計する方法https://www.cnblogs.com/god-of-death/p/6917837.html同期とは?反発とは何ですか.https://blog.csdn.net/liming0931/article/details/82902084同期と反発:freertosがどのように反発と同期を実現するかは、上の2つのブログから答えを得ることができます.
反発:異なるタスク間を散歩するいくつかのプログラムセグメントを指し、あるタスクがプログラムセグメントの1つを実行すると、他のタスクはいずれかのプログラムセグメントを実行することができず、そのタスクがこのプログラムセグメントを実行するまで実行できません.最も基本的なシーンは、1つの共通リソースが同じ時点で1つのプロセスまたはスレッドによってのみ使用され、複数のプロセスまたはスレッドが同時に共通リソースを使用できないことです.
同期:異なるタスクの間を散歩するいくつかのプログラムの断片を指し、それらの実行は厳格に規定されたある前後の順序に従って実行しなければならない.このような前後の順序は完成する特定のタスクに依存している.最も基本的なシーンは、2つ以上のプロセスまたはスレッドが実行中に歩調を合わせ、所定の前後順に実行されることです.例えば、Aタスクの実行は、Bタスクによって生成されたデータに依存する.a実行後、bのみ実行可能
反発信号量1が同期するアプリケーションでは、2値信号量が最も適している2反発信号は、反発を必要とするアプリケーションで3反発信号の使用に注意するタスクに用いられる.異なるレベル4で中断しないでください反発信号量を使用しないでください(1反発信号量の優先度は継承のメカニズムがあり、タスクの中で2中断するだけで古いブロックはできません.反発信号ロックがブロックされているからです.)5//反発信号量MutexSemaphore=xSemaphoreCreateMutex()を作成します.
6//反発信号量xSemaphoreTake(MutexSemaphore,portMAX_DELAY);
7//放出信号量
8特殊な反発信号量:再帰的な反発信号量1すでに取得した反発信号量のタスクは、この反発信号量2を再び取得することはできないが、再帰的な反発信号量は、再帰的な信号量を取得したタスクは、この再帰的な信号量を再び取得することができる
バイナリ信号量1//二値信号量BinarySemaphore=xSemaphoreCreateBinary();2//2値信号量の作成に成功したら、先に(信号量を解放しなければならない)if(BinarySemaphore!=NULL)xSemaphoreGive(BinarySemaphore)を解放する.3//二値信号量xSemaphoreTake(BinarySemaphore,portMAX_DELAY);//二値信号量を取得ここで常にブロックされていることに注意すると、次のステップ4//信号量xSemaphoreGive(BinarySemaphore);//かいほうしんごうりょう
けいすうしんごうりょう
1 #define xSemaphoreCreateCounting(uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ), (NULL ) )
uxMaxCount:最大カウント値は、信号がこの値に達すると成長しません.
uxInitialCount:信号量作成時の初期値
xSemaphoreTake(CountSemaphore,portMAX_DELAY);//数値信号量を取得するとxSemaphoreGive(CountSemaphore);カウント型信号量を解放するとsemavalue=uxSemaphoreGetCount(CountSemaphore);//カウント型信号量値の取得
mv1nPlXAywBDCdhxFc9QOVv6TBcQHLAXBQUAKTh3ie4fqSEOnWrPsnVkF
yt0wAkJHweoExRJWWVwwCniKNROSdJzJXE6YVapYW7f+tRRXRFI4yn4Nj
jZ0RiiqGRCTVzwComUcXB-eiFWRBY6JpSsCNkmIxL5KsRCo442djHhTZE