在 2021 年要如何開發 Rust 裸機程式:reset handler
我們的目標先訂在 arm cortex m3 的處理器, m3 處理器參考 arm 官方的開發文件 , 在 arm 處理器一上電的時候,會從記憶體位址 0x0 的地方讀取兩個值:
- 0x0 是初始的 stack pointer value。
- 0x4 是 reset exception handler。
我們的目標先訂在 arm cortex m3 的處理器, m3 處理器參考 arm 官方的開發文件 , 在 arm 處理器一上電的時候,會從記憶體位址 0x0 的地方讀取兩個值:
故事是這樣子的,很早以前大概 2014/2015 的時候,就曾經因為傳說中的 jserv 大大的關係,聽聞傳說中的 FreeRTOS,然後也有不深入地小玩了一下。
最近又因為到前公司戀戀科技的專案,竟然又接觸到(已經被 Amazon 收購的) FreeRTOS ,花了點時間把 FreeRTOS 移植到某個新的 ARM 平台,
在移植的時候也稍微仔細的 trace 了 FreeRTOS 的程式碼,順便就寫了點筆記,整理一下貼上來。
在我們看過兩個官方文件的範例之後,可以開始寫點真正的 code 了,如之前所言,我們要把 gameboy 移植到 WebAssembly 上面, 這篇文可以說明這到底有多簡單,我覺得已經很接近所謂的 “Code Once, Run Anywhere” 了。
...用 game of life 來展示 Rust 跟 WebAssembly 的開發真的是個很好的例子, 可以充分展現 javascript 和 wasm 間如何傳遞資料,這篇我認為會是學習開發 Rust/WebAssembly 的精華所在。
...故事是這樣子的,很早之前寫了 Rust/Amethyst 系列文
,
最後把這個系列文拿去投稿了 2020 年的 MOPCON
,
在投稿的時候,為了跟以網路為主題的 MOPCON 有所連結,我刻意的在最後一部分加上 rust/webassembly 的介紹,
但其實也沒有介紹得很深入,比較像為了騙被接受所以加進去的內容。
為了贖罪,就來寫幾篇文深入介紹一下 rust 開發 WebAssembly 程式。
先附一張最後的成果圖,沒錯,把之前開發的 Rust Gameboy emulator 移植到 WebAssembly 讓它在瀏覽器裡面執行。
故事是這樣子的,距離我上一篇 2020/12/20 發的 rust gameboy emulator 技術文之後, 已經過了兩個月了,中間除了整理積存已久的天能 舊文(還有過年),感覺 blog 已經荒廢了QQ。
其實不是的,中間也花了很多時間在 debug 我的 rust gameboy emulator,只是堪稱進度緩慢,主要的原因在於雖然 emulator 可以運作,
卻缺乏 debug 的機制,即使到目前為止,debug 方式仍不脫用肉眼去掃執行的 log,這樣 debug 的效率極度糟糕而且我還不知道要怎麼改進。
理想上是要弄一個 debug 的介面,可以像 gdb 一樣停在某個記憶體位置,然後印出當下的暫存器內容等等,不過即便我做出來,
當做我參考答案的其他實作也不會有同樣的東西可用,所以後來我放棄實作這個部分。
即便如此,在這兩個月還是完成了不少事情,也在 github 上得到一位 justapig9020 大大 (呃…只是一隻豬9020 大大)的幫助,幫我實作了不少東西,像是加上 clap-rs,放大畫面的選項等等。
...故事是這樣子的,小弟在公司工作內容,要維護公司產品核心的engine,要維護當然會需要把程式碼從版本控制裡簽出來,
修改、編譯後測試修正有沒有問題,而編譯一直以來都非常花時間。
本文介紹的 ccache
是 compiler cache 的簡稱,會在編譯時存下檔案內容的 hash 與編譯結果,在未來如果有相同的檔案要編譯的時候,就不用再次呼叫 gcc/g++ 進行耗時的編譯,只要把存下的 object 檔從 cache 裡面抓出來就行了。
書名 | 海上傭兵:十七世紀東亞海域的戰爭、貿易與海上劫掠 |
原書名 | War, Trade and Piracy in the China Seas 1622-1683 |
作者 | 鄭維中 |
譯者 | 蔡耀緯 |
出版商 | 衛城出版 |
出版日 | 2021-01-13 |
ISBN | 9789869938167 |
故事是這樣子的,從我上一篇blogger 搬到 hugo 全記錄 開始到現在,已經過了半年有了,這段時間寫了大概 7-8 篇的廢文之外,大部分狀況都是調調格式什麼的, 直到 228 紀念日我又花了點時間大調了一次格式,這篇文就用來記錄一下這半年做了什麼。
...