在ARM7 C上編程的嵌入式應用程序(具有可移植性要求)中,目前使用基於商業優先級的搶佔式RTOS,我們需要刪除每個客戶授權的RTOS和任何RTOS依賴項。我們有8個任務使用許多硬件接口,睡眠語句,I2C通信。實際上,SW很好地利用了RTOS特性來簡化代碼,儘管在沒有RTOS的情況下時序要求是可以管理的。在RTOS移除練習中顯式堆棧的替代方法?
包括在很多地方調用的例程在內的幾個函數當前實現了對I2c驅動程序函數,睡眠語句等進行阻塞(針對該線程)的調用順序。 基於對I2C調用/睡眠的輪詢不可接受客戶,這樣的調用必須是非阻塞的並且返回。當然,問題是「回到」「聲明」,當I2C完成或睡眠時間已過時,可能會從頂層任務條目中調用4次。
我正在朝着每個任務的層次狀態機設計聚合,頂部有一個簡單的調度程序。但是,處理好幾個例程,它們用來創建then-blocking調用序列,現在成爲一個狀態機,它可以在幾個地方和不同的函數調用深度調用,這似乎要求每個任務都有一個明確的堆棧特性,這樣每次啓動一個子狀態機時,我都可以爲該進程分配狀態,並將它們推送到該任務的「狀態堆棧」上,以便下一個調度程序調用該任務將能夠關閉所有分層狀態繼續處理「停止」的位置。
您是否可以看到適用於該問題的其他設計體系結構,將代碼快速移植到非搶佔範例的注意事項,還是指向思考豐富的關於「RTOS移除」技術和設計的資源和討論?
這三個答案一起描繪了基於狀態機的開發相關性和相關工具的良好畫面,以避免重新發明車輪。我們的客戶不會採取任何形式的許可,包括GPL。從答案看來,如果想要使用沒有RTOS的分級狀態機並且禁止輪詢調用,那麼高速緩存狀態就沒有辦法了。由於分層SM通過保存其結構(對函數調用例程變成調用子狀態機)幫助大量移植現有代碼,我將採用這種方式,使用提供的工具作爲示例。 - 謝謝。