我有一個特定的任務例程,它以特定的順序執行一些操作,並且這些操作處理很少的volatile變量。有一個特定的中斷異步更新這些易失性變量。因此,如果發生這樣的中斷,任務例程應該重新啓動。通常FreeRTOS將恢復任務,但這會導致錯誤的派生值,因此需要重新啓動例程。我也無法將任務例程保留在關鍵部分,因爲我不應該錯過任何中斷。在FreeRTOS中重新啓動任務
FreeRTOS中有一種方法可以實現這一點嗎?像vtaskRestart API一樣。我可以刪除任務並重新創建它,但是這增加了很多內存管理複雜性,我想避免這些複雜性。目前我唯一的選擇是在例程中添加一個檢查標誌以查看是否發生了上下文切換,如果是,則重新啓動,否則繼續。
谷歌搜索沒有獲取任何線索。似乎人們從來不會遇到這樣的問題,或者可能是因爲這種設計很差。在FreeRTOS論壇上,很少有人要求重啓任務似乎沒有這個問題。 stackoverflow在freertos + task +重新啓動時沒有結果。所以,這可能是第一個標籤組合的帖子;)
有人可以告訴我,如果這是直接可能的FreeRTOS?
感謝parloid的迴應。我理解這個機制,事實上我的任務是使用二進制信號量,並且在這個semTake上,任務被阻塞,直到中斷釋放信號以使任務繼續。但是,我不明白這將如何解決我的問題。我應該在哪裏嘗試採取信號量,並阻止我的任務?更新我的變量的中斷可能來或不會來,而這些變量正在處理。我正在尋找一種機制,在發生特定中斷時必須重新啓動例程。 –