FB Arduino C++ 心得記錄

原 FB link

C++ 複習進入第二章 IO streams

資料流是個很神奇的東西, 它把一個腦中的抽象的觀念給具現化了.
切切實實地讓電腦可以執行. 或許這是為什麼喜歡寫程式的原因..
而 Java 也有這資料流的概念.


撰寫 HAL 多年, 看著不同層次的典範轉移

ASIC 的人提供出來的可能是一大串的 register setting. 對 timing 非常敏銳.
他的 IO 是 registers. 問的總是你的設定順序. 上層 SW 的人看到可能會傻眼. 因為有時是好幾百行 read / write register 在一個 function 內..

C HAL 做第一層次的hardware 抽象 function 化, function 內是 register 的組合. 其實這或可滿足大多 SW 需要. 大多廠商到今日都還是用 C 在寫 HAL, 而 Linux 也是 C 為主.

到了 C++, 把第一層次的C function 再次抽象組合. 物件透過共通的 IO, 資訊就可以透過同方式處理傳遞...
( 其實 C 的 stdio.h 也是叫 stream
  Linux OS 一開始的發展, 也是學習 unix, 把溝通介面,
  變成統一的 file 架構/pipe 觀念. 剛看 Linux 時,
   會看到像 /dev/ 底下有許多和一般檔案概念不同的檔案. )

雖然很多還是不大喜歡 C++ ( 像這篇就提到到各種不喜歡 C++ 的理由 )
但在 Arduino / ARM mbed / ARM CMSIS / ... 已經可以開始看到 C++ 的身影.

Arduino 一開始接觸的人可能會覺得很神奇, 怎麼和 C 比較, 寫起來可以這麼簡單.
其實他底層的 compiler 就是gcc 支援 c++. 物件包裝得相當漂亮.
像 Serial , 有些愛好者還繼續延伸, 幾年前時就把 << 做進來了.
http://playground.arduino.cc/Main/StreamingOutput


ARM mbed 也是如此, mbed API 已經透過 C++, 把底層 C HAL code 物件化.
( 從他分層表, 可以大約看到上述的典範轉移. )

而這兩年發展的 CMSIS++, 也開始嘗試在 RTOS 提供 C++ API.
2020 年時, 應該可以看到更多 C++ 的應用吧. 我想...
( 但 C++ 發展真的太快了. c++11 的 concurrency 都還沒摸透, 現在已經到了 c++17... )


Bjarne Stroustrup 這本書
"Programming: Principles and Practice Using C++",
在每個章節前都會引用一句名言.

10. Input and Output Streams
“Science is what we have learned about how to keep from fooling ourselves.”
- Richard P. Feynman ( 理查費曼)

想起之前看的一本書 - "別鬧了, 費曼先生",
那是個很多因為這本書, 而對基礎科學有興趣的年代...
喜歡蔡康永所推薦的理由 : "人應該認識幾個廣闊的心靈" https://phycat.wordpress.com/2015/05/11/richard-p-feynman/
https://kknews.cc/zh-tw/culture/kxabmer.html

留言

熱門文章