iT邦幫忙

鐵人檔案

第 12 屆 iT 邦幫忙鐵人賽
回列表
IoT

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

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

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

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

Day 1 - 為什麼要自己實作 Ruby VM

2020 年中的時候意外看到了旗標的「雷切外殼復古街機」這個產品,以前在學 PHP 的時候很常的時間都是看旗標的書,沒想到這幾年旗標還有針對自造者領域推出產品。...

2020-09-14 ‧ 由 蒼時弦也 分享
DAY 2

Day 2 - 從 mruby-L1VM 開始入門(ㄧ)

對一個非本科的工程師來說,對於這類知識大多是第一次接觸的,雖然跟讀資工的同事聊過他們在學校也只有實作簡單的功能,不過至少在要開始嘗試的時候會相對容易許多。在這樣...

2020-09-15 ‧ 由 蒼時弦也 分享
DAY 3

Day 3 - 從 mruby-L1VM 開始入門(二)

上一篇我們已經了解了 mruby 編譯出來的檔案大致上有怎樣的結構,要能夠執行 Ruby 只需要實際上存取機器碼的區段讀取出來之後依照行為執行就可以了,不過在...

2020-09-16 ‧ 由 蒼時弦也 分享
DAY 4

Day 4 - 從 mruby-L1VM 開始入門(三)

從前面兩篇文章我們已經透過 mruby-L1VM 大致上了解了 mruby 生成的機器碼檔案包含了哪些資訊,不過還有幾個相對重要而且會經常被使用的方法需要提出來...

2020-09-17 ‧ 由 蒼時弦也 分享
DAY 5

Day 5 - 環境準備

這次的實作分為兩個階段,第一階段我們直接用 C 語言在電腦上實作來驗證我們自己實作的 Ruby VM 是可以運作的,第二階段則是將程式碼放到 D1 Mini 上...

2020-09-18 ‧ 由 蒼時弦也 分享
DAY 6

Day 6 - 讀取 IREP 資料(ㄧ)

經過前面幾天的分析,我們目前已經有一個可以撰寫 Ruby VM 的環境,也了解該如何從 mruby 的機器碼中讀取到實際上要執行的 ISEQ 區段,這篇文章會先...

2020-09-19 ‧ 由 蒼時弦也 分享
DAY 7

Day 7 - 讀取 IREP 資料(二)

延續上一篇的進度,我們將會開始撰寫 mrb_exec 的內容,我們先參考 mruby-L1VM 的方式直接讀取用於參考的 nlocals、nregs 和 nir...

2020-09-20 ‧ 由 蒼時弦也 分享
DAY 8

Day 8 - 加法 OPCode 處理

我們已經在 mrb_exec 中將 IREP 的資訊讀取完畢,現在我們就可以開始針對 OPCode 的方式來讀取。 基本上在處理的時候會是一個無限迴圈,我們會不...

2020-09-21 ‧ 由 蒼時弦也 分享
DAY 9

Day 9 - 顯示運算結果

經過幾天的努力,我們已經可以在我們自己實作的 Ruby VM 中進行加法的運算,不過到目前爲止都還是停留在透過除錯訊息看到結果的狀況,因此我們要來實作 Ruby...

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

Day 10 - 從 IREP 取出字串

在上一篇我們已經實作到要呼叫方法,但是卻無法從 IREP 中獲取要呼叫的方法名稱。因此我們要實作對應的方法來幫助我們讀取到 IREP 中的 POOL 和 SYM...

2020-09-23 ‧ 由 蒼時弦也 分享