2015年5月23日 星期六

MCU進入C++時代--個人觀點

MCU上使用C++並不是新事件。對Bee來說,只是何時?為何?
Bee很少使用C++,因為機會不多。連PC程式也都是用C寫的。
MCU開始使用SD卡,檔案系統出現後,PC/MCU程式開始不再分。
在使用GUI相關應用後,開始使用其他PC原始碼。
但常常可以找到的是C++程式碼。這種情況越來越多。
可以不用修改就在MCU執行PC程式,使用起來就像中毒一樣,因為實在太方便了。
沒多久就遇到要使用C++程式的問題。因為應用程式是c++寫的。

MCU目前仍以C為主,不管是驅動函式庫,RTOS,或是其他常用函式庫皆以C為主。
C++因為對記憶體需求高,另外經常調用動態記憶體。在記憶體不多的MCU上皆屬不合適使用的。
但現在MCU進展已很快了。不管是Cortex-A5系列的出現,或是支援Quad-SPI Flash的出現。
皆已解除應用程式容量問題。有了較大型應用程式出現,記憶體需求也提升。
SDRAM支援已是一般MCU擴充選項,所以對RAM的需求也沒有限制。

唯一的限制只剩下PC/MCU環境差異。RTOS及File system為MCU和PC最基本的需求。
在架好和PC相容環境後的MCU就可以直接使用PC原始碼。
再來就是遇到C++的應用程式。
因為底層系統仍是C,應用層則是C++,C/C++混合使用便是第一個要解決的。
就這樣,自然的在MCU上使用C++開始變成常態。

4 則留言:

  1. 時代就是如此。若是價格許可,一般人不會回頭去用8位元MCU。

    回覆刪除
  2. 有興趣更深入的話,推薦你讀一讀meyers的講義
    c++要用在資源有限的MCU上完全不是問題
    很多人做不到那是因為他們是c programmers,不是c++ programmers

    回覆刪除
    回覆
    1. 不只因為是C programmer,MCU上還有不少的工程師還是Assembler programmer。
      你會認為只有C轉C++會有問題,就表示你不了解為何還有一堆人在用assembler。

      1. 八位元MCU仍存在:很多狀況還會去寫八位元程式,上面可能連C++都沒有。個人還是懶得重寫,有時要寫8/32位元都共用程式。8位元上沒有C++,變成8位元/32位元分開維護。另外一個問題是,會寫c++也很難適應資源稀少的8位元,找人維護又會變成另一個問題。

      2.除錯:MCU工程師不是只有軟體除錯,也要硬體除錯,要去追每一個機器碼順序有無對錯。用c++不易對應到機器碼,C容易得多,只要跳過C frame就可以了。早期MCU不太成熟,我還除過compiler問題,用c++要去了解c++ compiler運作程序,我想只有博士才行。連工具 都不是好的,才是MCU工程師使用組合語言不肯離開的原因。有時是MCU內部暫存器設計錯誤(有先後設定問題),也有loader出毛病。光是要抓問題,就用了大部分時間,所以很多人連C都不想學。

      3.特殊指令:自我寫碼程式,就是程式改寫程式機器碼。這招用來防別人破解。目前除了組合語言外,其他語言做不太出來。

      每個語言都有其特殊性。多看看其他語言也會有不少收穫。

      刪除