RP2040(Raspberry Pi Pico) - boot2 と cortex-m-rt の詳細

この冬のプロジェクトとして、手元にあったRaspberry Pi Pico(RasPico)のボード上で動くブートローダをRustで作ってみた。RasPicoで使われているRP2040というMCU特有の事情もあるし、低レイヤーRustで役にたつ知識も得ることができる、楽しいプロジェクトだった。GitHubのレポジトリ(https://github.com/nkon/boot-k)を参照しつつ、知見をまとめておこう。

Read More

probe-rsの使い方

プロジェクト・テンプレートどおりに使う場合はcargo runすれば内部でprobe-rsが使われ、コマンドとして意識することはすくない。 しかし、直接、コマンドを実行することで、細かな操作を行うことができる。 ただし、ドキュメントは不足しているので必要に応じてソースを見る必要がある。

Read More

Raspberry Pi PicoとRustで組み込みプログラム環境を整える

昔は組み込み=Cという感じだったが、2023年現在に、組み込み(ベアメタル)プログラミングを試してみるのであればRust+Raspberry Pi Picoの組み合わせが良いだろう。理由はいろいろあるが、1:クロスコンパイラの導入が楽。WindowsでもMacでもLinuxでも、クロスプラットフォームで楽。2:ボード、クレート(HAL)、デバッガなどの情報が豊富で、みな同じ構成を使っており選択に迷いがない。3:Rustは素晴らしいシステムプログラミング言語であり、あと数年すれば仕事で書く場合でもRust>Cとなるだろう。いまから取り組んで、Rustの概念、作法に慣れておくのがよい。残念ながらCでやることになったとしてもRust的な考え方は絶対に役に立つ。

Read More

clang-tidy のおすすめの設定

LLVMプロジェクトが出している静的解析ツールclang-tidyのおすすめの設定項目を紹介する。とくに組み込み分野でのCでの使用にフォーカスた設定であり、アプリケーション分野、C++での使用には適さないかもしれないのでご注意いただきたい。

Read More

『低レベルプログラミング』

ネットで勧められていた『低レベルプログラミング』を例題を解きながら読みすすめていた。 本書は、x86_64 + Linuxの環境でアセンブラとCを使って低レイヤーのプログラミングをする教科書。 これがわかれば、だいたい中級だと思う。本書の環境はLinuxベースだが、紹介されているテクニックはCortex-M+baremetal組み込みでも十分役に立つと思う。

Read More

Lima - x86_64 ubuntu on M2 Macbook Air

別記事にあるように『低レベルプログラミング』という本を履修。この本はx86_64とUbuntuの環境が前提となっている。今のパソコンはM2 Macbook Air。エミューレーション環境を構築する必要がある。そのような用途にはLimaが好適。インストールは簡単で情報は豊富。この記事は2022年末時点での情報に基づくインストールメモ。

Read More

設定ファイルをGitHubに置く(Dotfiles)

新しいマシンを買ったら定番の初期設定が必要だ。仮想環境の普及で、買わずとも新しい仮想マシンを立ち上げる機会が増える。OSのバージョンアップにも付き合っていかなければならない。新しい環境の障壁を下げるために「デフォルトで使う」派もある。しかし、「簡単に初期設定をできるように工夫する」派があってもいいだろう。Unix系のツールはホームディレクトリのファイルで初期設定を行う。設定GUIが付いていても、人間が読めるファイルに保存されることが多い。そういうツールはファイルをコピーするだけで設定がコピーできる。vscodeなどは、自身で設定をクラウドに持っておくこともできる。しかし、そうでなツールも、設定ファイルをGitHubにおいておけばgit cloneするだけで、ほぼ同等だ。

Read More

M2 MacBook AirでStable Diffusionをローカル実行する

流行りの画像生成AI, Stable Diffusion をローカルで実行してみる。手元の環境はM2 MacBook Air。通常、AIの実行にはnVidiaのGPUが業界標準となっているが、Stable DiffusionはMacのGPU(MPS)へのポートが進められており、MacでもGPUを使って実行できる。

Read More

シェルのプロンプトを StarShip でいい感じにする

シェルのプロンプトの設定は、凝ろうと思ったら無限に時間が消費される。2022年時点、最も現代的でおすすめできる方法が StarShip だ。 従来、プロンプトの設定は環境変数やシェル関数などを組み合わせて、ググりながら暗号的なコードと格闘しなければならなかった。 StarShipはプロンプトの生成をRust製の実行ファイルに一任し、それ設定ファイルはTOMLファイルに抽象化されている。 クロスプラットフォーム(LinuxでもMacでもWindowsでも)、マルチシェル(zsh, fish, windows-power-shell, …)対応。 Nerd Font(Powerline font)を使ったカラフルな表示や現代的な機能にも、もちろん対応している。

Read More

GitHub supply chain security features for Rust

GitHubにRustのプロジェクトをアップしていると、依存しているライブラリ(直接だけでなくその先も)をボットが自動でチェックして、セキュリティ的な問題があると警告メールを送ってくる。それだけでなく、言われるがままにポチポチしていくと、修正のプルリクエストを作成してマージして完了。なにこれ、すごい。

Read More

『ゼロからのOS自作入門』履修メモ

『ゼロからのOS自作入門』(通称「Mikan本」)を購入して履修した。 本書はUEFI+x86_64で動作するOS(MikanOS)をC++を使って自作するための教科書・チュートリアルである。 昔、『30日でできる!OS自作入門』という「はりぼてOS」を作る本があったが、環境が古くなったので、本書の著者が新しい環境に適応して新規に書き下ろしたもの。

Read More

MCUBoot

組込用BootloaderのひとつとしてMCUBootがある。いくつかのMCUやROTSがサポートしているが日本語の記事は少ない。以下はCypreessのModusToolBoxでサポートしているMCUBootを使ってみたまとめである。MCUBootを使ってみようと思う方の参考になれば幸いだ。

Read More

Writing Interpreters in Rust

Rustでインタプリタを製作したときの設計メモ。主要部は、トークン化後に手書きの再帰降順パーサでASTを作り評価機でそれを評価するという良くある構成。Rustでの設計に特徴がある点(文字列の取り扱い、Enumの活用、MoveとBorrow、タプルによる複数値返し、など)についての解説。

Read More

GitHubのActionでマルチ環境向けのバイナリをビルドして配布する(Rust)

CLI(command line interface)ツールはRustでも力を入れてりるターゲット。RustはLLVMをバックエンドとしているし、ライブラリも抽象化されている。GUIを扱わない範囲ではWindows/Linux/Macを対象とした移植性があるCLIツールを書きやすい。さらにGitHubではActionを用いたビルドファーム(テストも)がOSSでは利用可能だ。ソースからビルドではなく、多環境向けのバイナリをGitHub Actionsでビルドしてバイナリ配布するための設定について述べる。

Read More

コーディング動画(Rustで関数電卓を作る)

この冬もコロナで篭もることになりそうだ。関数電卓作成のプロジェクトを行っている。プロジェクトの説明、設計や実装については別途記事にしたいと考えているが、現時点では執筆中だ。一方、最近、他人のコーディング動画を見る機会があった。私の職場にはペアプログラミングの習慣はないので、他人のコーディングを見る機会は少なかったが、動画からは、記事だけでは伝わらない・ナルホドと関心する点が多かった。自分もコーディング動画を配信すれば、コーディングの進め方やツールの使い方などで参考にしていただけることもあるだろう。

Read More

Firebase + Vue.js で ToDo アプリ開発

コロナ・引きこもり記事の第3弾。引きこもり期間中に新しいことにトライしようと思ってFirebase+Vue.jsでアプリを作ってみた。もうすこしブラッシュアップしてから公開しようと思っていたのだが、他の活動が忙しくなってしまい、時期を逃してしまいそうだ。改善の余地は多いがポストしておこう。

Read More

組込み用ファームウェアの基本構造

コロナ・引きこもり記事の第二弾。たぶん、もうじき新しいファームウェアプロジェクトを担当してもらうであろう職場の同僚氏に向けて書いた記事なのだが、果たして読んでくれるだろうか。

Read More

テキストエディタを作る

ここの記事を更新するのは約1年ぶり。夏の間は遊んでいたり秋からは仕事が忙しくなったりの近況だった。 コロナウィルスで自宅に閉じ込められてしまったので、プログラミングの練習のためにテキストエディタを作ってみた。 得られた知見などを紹介しよう。

Read More

GDBの使い方メモ

最近、コンパイラを作ろうとチャレンジしている。コンパイラは基本的にアセンブラコードを出力する。その結果が意図通りに動いてテストに通れば良いが、開発中はそうならない。このアセンブラ出力が意図どおりかどうかをデバッグすることになる。ただし、コンパイラが自作でヘボいので、それが出力するアセンブラは、ソースコードデバッグができない。デバッグ情報が無い実行ファイルをデバッグするのと同じ状況になる。そんな状況でよく使う gdb コマンドをまとめた。あんまり細工していない、素のgdbコマンドを使う助けになると思う。

Read More

fish の始め方

これは unix のシェル環境である fish を紹介する記事だ。 Ubuntu では標準のシェルは bash であるが、快適な環境を求める人は zsh を使うことが多い。 zsh は多機能で快適だが設定に手間がかかる。 ついつい、設定に力が入ってしまい「奥が深い」症候群になってしまうこともあるだろう。このへん、Emacs に似ている。 そんなところをリセットして新しくて、標準でも使いやすく設定もしやすい fish を使って環境構築をしたメモである。

Read More

Amazon Web Service の始め方(2019年版)

仕事で、実験用に外へつながったサーバが必要になった。 しかし、いろいろ手続きが大変なので、とりあえず自分のアカウントで作業することにした。 ウェブを探しても、この進歩が早い世の中で、古い記事が混じっていたりする。 自分の作業メモを兼ねて、現時点でのはじめ方をまとめておこう。

Read More

移動平均とFIRフィルタ

センサからの信号を処理する時など、ノイズ低減の目的で移動平均フィルタを使うことがある。 アルゴリズムが理解しやすく(平均は小学生でもわかる)、実装が簡単で(コツもあるが)、ある程度の効果もある。 しかし、大学ではFIRなどのフィルタを習う。どっちがいいのだろうか?Jupyter Notebook の結果を GitHub Pages に貼る実験も兼ねて計算してみた。

Read More

NumWorksの電卓

NumWorksというフランスのメーカが、新しい電卓を発売した。 コンピュータがこれだけ普及しているのに「いまさら電卓なんて」という声がほとんどだと思う。しかし、次の特徴を知れば興味を持つ方もいるだろう。

Read More

GitHub でスライドを作る

この Blog は GitHub Pages と、その上でホスティングされている Jekyll を使って作成されている。その仕組みの延長で、スライドを作成し公開する方法についてまとめる。

Read More

ようこそ Japaric Park へ

Rust embedded 界の第一人者である japaric さんの提唱する RTFM 及び cortex-rt などのフレームワークについての自習記録。日本語の記事が少なかったし、私自身は STM32CubeMXとの連携を模索していて方向が違っていたのであまりトレースしていなかった。しかし、@tatsuya6502さんの良記事を見かけ、改めて興味をもってやってみた。

Read More

rust tools

rust で標準的に使われるツールや便利なツールの使い方を、毎回検索しなくても済むように備忘録的にまとめる。

Read More

GPD Pocket の環境整備

GPD Pocket を購入したので設定メモ。Windows10を使うのも初めてということもあり、前半はGPD Pocket 特有の話も書いてあるが、後半はWindows10の環境構築の話がメインになってしまった。

Read More

rust で組み込み(Cortex-M3)

この記事では、rust を使ってCortex-Mの上で直接(ベアメタルで)動作するプログラムの作り方を説明する。全部を自前で書くのではなく、STが提供する CubeMX といったツールや HAL を有効活用することを基本方針とする。

Read More

You're up and running!

Next you can update your site name, avatar and other options using the _config.yml file in the root of your repository (shown below).

Read More