iT邦幫忙

鐵人檔案

第 12 屆 iThome 鐵人賽
回列表
IoT

拿到錘子的我想在微控制器上面執行 Ruby 系列

最近買了一些 Maker 小玩具回來玩,卻發現市面上大多數的微控制器都無法執行 Ruby,這點對於一個 Ruby 開發者來說是無法容忍的!

運氣不錯的是,在日本已經有很多先進針對 ESP32 等硬體開發對應的機制,同時也有人實作了只有 1000 行左右能夠運行部分 mruby 指令碼的虛擬機,讓我們跟著前人的腳步為手邊無法運行 Ruby 的微控制器上實作 mruby 虛擬機吧!

鐵人鍊成 | 共 30 篇文章 | 26 人訂閱 訂閱系列文 RSS系列文
DAY 21

Day 21 - 用 HAL 區分不同硬體

第一次看到 HAL(Hardware Abstraction Layer)是在 mruby/c 的原始碼裡面,我們可以透過編譯時提供 -DMRBC_USE_HA...

2020-10-04 ‧ 由 蒼時弦也 分享
DAY 22

Day 22 - 比較處理

經過將近一個月的努力,現在我們現在要擴充 OPCode 的處理也容易很多,階段性的目標是要能在 TFT 螢幕上顯示一些訊息跟動畫,因此除了前面能讓 Ruby 運...

2020-10-05 ‧ 由 蒼時弦也 分享
DAY 23

Day 23 - 迴圈支援

當我們有基本的大小比較之後,就能夠製作一個無限迴圈或者一個有次數的迴圈。 先修改 app.rb 讓我們實作一個執行特定次數的迴圈來驗證實作 # app.rb...

2020-10-06 ‧ 由 蒼時弦也 分享
DAY 24

Day 24 - 字串(一)

透過前幾天加入的比較、迴圈的支援後,假設我們希望在 TFT 螢幕上繪製文字跑馬燈就必須處理字串,也就是能將字串讀取進來。不過在這之前我們需要將 mrb_valu...

2020-10-07 ‧ 由 蒼時弦也 分享
DAY 25

Day 25 - 字串(二)

因為我們已經將 mrb_value 套用到我們的 Ruby VM 中,也因此能夠更加彈性的處理各種類型的資料,現在就讓我們將字串的支援加入到裡面吧! 跟之前的方...

2020-10-08 ‧ 由 蒼時弦也 分享
DAY 26

Day 26 - 跑馬燈

在前面的實作中,我們已經可以將文字印出在 TFT 螢幕上,接下來我們要結合迴圈跟繪製文字的機制來製作簡易的跑馬燈效果。 繪製方法 之前我們用來印出訊息的 put...

2020-10-09 ‧ 由 蒼時弦也 分享
DAY 27

Day 27 - Block(一)

之前我們有提到過 loop 方法因為我們並沒有實作 Block 機制而無法使用,而 Block 和 Method 實際上是在 Ruby 的 IREP 中製作出一...

2020-10-10 ‧ 由 蒼時弦也 分享
DAY 28

Day 28 - Block(二)

延續昨天的進度,當我們成功呼叫了 Block 之後會發現缺少了 OP_ENTER (51) 這個 OPCode 的實作,這個實作是用來將我們進入 Block 的...

2020-10-11 ‧ 由 蒼時弦也 分享
DAY 29

Day 29 - 回傳值

雖然我們實作了好幾個方法,但忘記了要處理方法回傳值,在 mruby 中處理回傳值也是相當簡單的,因為編譯器在生成指令的時候都已經幫我們處理好對應的機制,只需要將...

2020-10-12 ‧ 由 蒼時弦也 分享
DAY 30

Day 30 - 後記

經過了一個月的嘗試,我們大致上已經掌握了能夠自己實現非常基礎的 Ruby VM 的能力。雖然在鐵人賽之前也花了一個月左右的時間去驗證整個想法是否可行,然後在鐵人...

2020-10-13 ‧ 由 蒼時弦也 分享