私はFreeRTOSを私のプロジェクトに使用していますが、私はドキュメントを読んでいます。理解できないことがあります。 スケジューラは仕事を実行し、イベントを待っていたタスクのブロックを解除し、準備完了状態にある優先度の高いタスクを選択するように、目盛り割り込みがトリガされるとコンテキストが切り替わることを知っています。しかし、ティック割り込みの前にタスクがブロックするとどうなりますか?このドキュメントでは、コンテキスト切り替えが即座に行われることを示唆しているようです(たとえば、vTaskDelay()を呼び出してCPUタイムスライスを解放する優先順位が異なる2つのタスク)。それはどうやって起こるの?私は検索しましたが、私の質問に対する答えは見つかりませんでした。FreeRTOSコンテキスト切り替え
EDIT FreeRTOS(SAMD21のCortex-M0 +)の私のポートにportYIELD()マクロがので、これは、スケジューラの実行とは別に(コンテキスト切り替えを実行するために使用される機構であり、単にSVCall例外を要求することに使用されますティック割り込みに)?
あなたが求めているが、それはタイムスライスがオーバーされます前に、スレッドがプロセッサを放棄した場合、RTOSはすぐにスケジューラを実行する必要があります正確にわかりません。 –
@FiddlingBitsはい、それは私が思うものですが、それの痕跡がドキュメントにありません。これは、定期的なティックごとに実行されるISRについてのみ話しますが、ティックの間でコンテキストの切り替えはどうなりますか?スケジューラが引き継ぎ、コンテキスト切り替えを実行しますか?もしそうなら、割込み(ソフトウェア)はそれを行うために起動しますか? – Luca
SVCは、最新のM0ポートでは使用されなくなりました。しかし私は、SVC割り込みが実際のコンテキスト切り替えを行うためにPendSV割り込みをトリガしていることを期待しています。 –