樹莓派實時系統下指令碼語言的選擇(應當使用Lua而不是Python)
最近在使用樹莓派與其他裝置通過SPI
介面進行通訊,使用一個GPIO
管腳觸發讀取資料的訊號,為了簡化開發,使用了Python
。
在實際執行過程中,發現當長時間執行的是,會出現中斷管腳訊號丟失的情況,在參考ofollow,noindex" target="_blank">Ubuntu 16.04 (x64)下從原始碼為Raspberry Pi Zero W編譯實時核心 更換為實時核心之後,短時間執行已經可以正常,但是在十幾個小時之後,依然出現了中斷丟失的現象。
這個現象初步評估為Python
的GC
動作時間過長導致的中斷訊號丟失。Python
本身並不是為實時系統設計的,因此在GC
進行垃圾回收的時候,是沒有實時性的考慮的,因此在嚴格要求實時性的系統環境下,不是非常的合適。更何況很多的IO
操作預設都是阻塞的,更加容易導致實時性問題。
由於樹莓派本身也是支援Lua
指令碼的,預設安裝的Lua
引擎預設是5.1.4
。Lua
本身在遊戲中使用較多,而遊戲本身對於實時性的要求是很高的。
尤其是Lua 5.1
開始使用最新的GC
已經能很好的解決實時性問題。
關於Lua
的GC
相關資訊,參考如下的文章:
正是由於對於GC
的特殊要求,導致我們在實時系統上能選擇的指令碼非常有限。
目前的評估來看,貌似Lua
差不多成為唯一的選擇了。
具體的使用方法如下(對於Raspberry Pi Zero W
如果已經設定成AP
模式,建議外接USB
有線網絡卡操作):