在 2021 年要如何開發 Rust 裸機程式:分離核心與 exception handler

我們的最小程式現在能進到 reset_handler 了,但重要的是能進到使用者寫的 main 函式,不然這個 kernel 也沒用。 我們先把我們的 main.rs 改成 lib.rs,rt 編成 library 之後,類似 FreeRTOS 的感覺,再搭配使用者寫的 main.rs 編成完整的執行檔; 使用者寫的 main.rs 可以呼叫 kernel 提供的服務函式。

...

在 2021 年要如何開發 Rust 裸機程式:reset handler

我們的目標先訂在 arm cortex m3 的處理器, m3 處理器參考 arm 官方的開發文件 , 在 arm 處理器一上電的時候,會從記憶體位址 0x0 的地方讀取兩個值:

  1. 0x0 是初始的 stack pointer value。
  2. 0x4 是 reset exception handler。
...

在 2021 年要如何開發 Rust 裸機程式:設定與空殼

其實標題應該要寫成「在 2021 裡用 Rust 開發裸機程式是種怎樣的體驗」

故事是這樣子的,很久很久以前我曾經寫過一篇文 , 胡亂攪了一陣,弄出一個只是會動的 Rust 嵌入式系統,時隔這麼久,Rust 的生態也完全不一樣了,最近因為剛好比較閒就花了點時間再看看, 結果找到別人連書都寫好了呢 w (看書中的 rustc 成書年代應該是 2018 年左右)。

這篇大概會是照著上面這本書的操作記錄,不知道會整理成多少篇,讓我們拭目以待。

...

筆記整理 FreeRTOS Context Switch

故事是這樣子的,很早以前大概 2014/2015 的時候,就曾經因為傳說中的 jserv 大大的關係,聽聞傳說中的 FreeRTOS,然後也有不深入地小玩了一下。
最近又因為到前公司戀戀科技的專案,竟然又接觸到(已經被 Amazon 收購的) FreeRTOS ,花了點時間把 FreeRTOS 移植到某個新的 ARM 平台, 在移植的時候也稍微仔細的 trace 了 FreeRTOS 的程式碼,順便就寫了點筆記,整理一下貼上來。

...

使用 Rust 開發 WebAssembly 程式 - 3 Gameboy

在我們看過兩個官方文件的範例之後,可以開始寫點真正的 code 了,如之前所言,我們要把 gameboy 移植到 WebAssembly 上面, 這篇文可以說明這到底有多簡單,我覺得已經很接近所謂的 “Code Once, Run Anywhere” 了。

...

使用 Rust 開發 WebAssembly 程式 - 2 Game of Life

game of life 來展示 Rust 跟 WebAssembly 的開發真的是個很好的例子, 可以充分展現 javascript 和 wasm 間如何傳遞資料,這篇我認為會是學習開發 Rust/WebAssembly 的精華所在。

...

使用 Rust 開發 WebAssembly 程式 - 1 Hello World

故事是這樣子的,很早之前寫了 Rust/Amethyst 系列文 , 最後把這個系列文拿去投稿了 2020 年的 MOPCON , 在投稿的時候,為了跟以網路為主題的 MOPCON 有所連結,我刻意的在最後一部分加上 rust/webassembly 的介紹, 但其實也沒有介紹得很深入,比較像為了騙被接受所以加進去的內容。
為了贖罪,就來寫幾篇文深入介紹一下 rust 開發 WebAssembly 程式。

先附一張最後的成果圖,沒錯,把之前開發的 Rust Gameboy emulator 移植到 WebAssembly 讓它在瀏覽器裡面執行。 wasm gameboy tetris

...

Rust Gameboy Emulator Sprite/Joypad

故事是這樣子的,距離我上一篇 2020/12/20 發的 rust gameboy emulator 技術文之後, 已經過了兩個月了,中間除了整理積存已久的天能 舊文(還有過年),感覺 blog 已經荒廢了QQ。

其實不是的,中間也花了很多時間在 debug 我的 rust gameboy emulator,只是堪稱進度緩慢,主要的原因在於雖然 emulator 可以運作, 卻缺乏 debug 的機制,即使到目前為止,debug 方式仍不脫用肉眼去掃執行的 log,這樣 debug 的效率極度糟糕而且我還不知道要怎麼改進。
理想上是要弄一個 debug 的介面,可以像 gdb 一樣停在某個記憶體位置,然後印出當下的暫存器內容等等,不過即便我做出來, 當做我參考答案的其他實作也不會有同樣的東西可用,所以後來我放棄實作這個部分。

即便如此,在這兩個月還是完成了不少事情,也在 github 上得到一位 justapig9020 大大 (呃…只是一隻豬9020 大大)的幫助,幫我實作了不少東西,像是加上 clap-rs,放大畫面的選項等等。

...

使用 ccache 加速編譯

故事是這樣子的,小弟在公司工作內容,要維護公司產品核心的engine,要維護當然會需要把程式碼從版本控制裡簽出來, 修改、編譯後測試修正有沒有問題,而編譯一直以來都非常花時間。
本文介紹的 ccache 是 compiler cache 的簡稱,會在編譯時存下檔案內容的 hash 與編譯結果,在未來如果有相同的檔案要編譯的時候,就不用再次呼叫 gcc/g++ 進行耗時的編譯,只要把存下的 object 檔從 cache 裡面抓出來就行了。

...

書評 - 海上傭兵:十七世紀東亞海域的戰爭、貿易與海上劫掠

書名 海上傭兵:十七世紀東亞海域的戰爭、貿易與海上劫掠
原書名 War, Trade and Piracy in the China Seas 1622-1683
作者 鄭維中
譯者 蔡耀緯
出版商 衛城出版
出版日 2021-01-13
ISBN 9789869938167
...