2016年3月26日 星期六

ROSA 系統開發 31 ─ 再論 SoftwareSerial

http://4rdp.blogspot.com/2016/03/rosa-31-softwareserial.html?m=0

本週開始將 SoftwareSerial 加入 ROSA,我先把它當作程式除錯使用,用它列印一些系統狀態,以方便了解程式執行到甚麼地方,不過並不太成功,今天留個紀錄,給有興趣的朋友參考。

原先我使用 Arduino IDE 1.6.3,在單一 ino 檔 #include <SoftwareSerial> 是 OK 的,不過現在程式拆成好幾個 cpp 後,想加入 SoftwareSerial,編譯程式總是回應找不到 SoftwareSerial.h 或是 SoftwareSerial.cpp,個人研判是系統編譯路徑出問題,之前 IDE 是 ZIP 下載沒安裝,因此改採安裝 IDE 1.6.8 才解決這問題。

現在藍牙是可以用,
雖然使用 C++ 的字串函式處理比較方便,不過程式編譯後執行會產生許多不預期狀況,根據以前經驗研判,因字串長度會變化,RAM 區內容常搬來搬去,有時內容可以透過藍牙傳出,程式改一下又傳不出來,可能與編譯器對程式記憶體配置有關,由於這部分超乎個人能力無法除錯,所以,我決定下週要重寫改碼,字串以字元陣列記憶定址方式處理,看似會多花時間寫程式庫,但是系統是能夠正常穩定的。

此外,也與 Daniel 討論,他是說 C++ 方式應該不會影響程式運作的時序,有沒有可能使用 SoftwareSerial 的 pin 的 Timer 中斷和其它共用導致,有建議將 Servo 運作抽離 loop(), 改用 Timer 1 中斷統一運作。關於此點,我的看法是 Servo 已經完全無使用任何 Timer 中斷,也無佔用 PWM,因此不會對 SoftwareSerial 造成任何影響,我對中斷的看法是,對控制時序有極度需求精準的東西,才會使用中斷,否則留下這些資源給其它程式庫使用。未來是不排除使用中斷來控制 Servo,不過這也要等系統比較穩定後再改良。

最後結論是,我先以 C 架構 SoftwareSerial 通訊系統,Daniel 有空再將它修成 C++。

2 則留言:

  1. Good job. 我先偷跑,改好 C++了。☺

    回覆刪除
    回覆
    1. 辛苦了,我這邊也將 #* 功能加入了,因為可以執行串聯指令,所以加入 Pipe 處理,另外新增 GOSUB 可以執行副程式,因此有 Stack 處理。

      刪除