隨著開發板硬體的增強以及開發者對同時處理多個任務的需求,Arduino官方已經著手規畫與討論在Arduino上支援多工處理。

由於Arduino的硬體能力提升,不只處理器時脈更高,也擁有多個核心,Arduino能夠處理的工作越來越複雜,而開發者也希望能利用Arduino開發更加強大的應用,像是在控制電子機械的同時,還能夠更新顯示器,並且與用戶互動,或者等待外部事件。

過去要達到這個目的,開發者必須要編寫非阻塞式程式碼,快速執行loop()函式更新狀態變數,並且呼叫millis()函式確保時間正確,但官方提到,這種方法會導致程式碼過度膨脹,不只難以除錯和維護,也無法支援多核心。

另一種方法是使用排程函式庫的協作多工,藉由將工作拆分成多個循環函式,讓每個循環函式專注執行特定任務,但官方提到,這種方法仍需要開發者在編寫程式碼時避免阻塞,而且也難以支援多核,即便支援多核心,也無法避免多個執行緒同時存取同一個變數,更何況,這還是忙碌等待(Busy-looping)範式,這樣的設計難以降低應用程式的功耗。

為了徹底解決這個問題,Arduino現在要添加多工處理功能,其目標是要定義一個能夠移植到所有架構的標準化API,而這將能簡化多工處理,使得所有Arduino開發者都能簡單地運用。目前官方在GitHub上進行多工處理的討論,並且分享API提案,號召社群共同實作。

熱門新聞

Advertisement