ラベル 組み込み の投稿を表示しています。 すべての投稿を表示
ラベル 組み込み の投稿を表示しています。 すべての投稿を表示

2024/06/16

Embedded Swift Example のビルド (ESP32-C6)

最近は仕事が充実(忙しい)しているので電子工作は全くやってませんでした。

というところで、 WWDC2024 にて Embedded Swift なるものが紹介されてる。。というのを知り合いの facebook の投稿で知る。

Swift だと何がいいのか?うん、よくわからないけど Swift で書いたコードが組み込みマイコンで動かしてみたいじゃないですか。

というわけで Example のビルドに成功したっぽいので、そこまでの軌跡を忘れないようメモしておきます(2024/6/16)。

WWDC2024 のビデオはこちら。各種ドキュメントなどのリンクもまとまってるので便利。
ESP32-C6 のボードを Home app でコントロールできるようにするデモです。
Matter API というのを導入して、Smart Home Network に接続できるようにしてるみたい。

開発環境の導入

対応するマイコンボードはいくつかあるようですが、手元にあるのはラズピコ、ラズピコw なので、まずはラズピコの環境を整えてみました。
結論からいうとビルドの途中でリンク時にこけます。どうやら ** (冪乗かな?)の記述を受け付けないライブラリなのに、コードの中にそういう記述があってリンクできないでこけるようです。最新のツールチェーンでもダメなようなので、ラズピコは諦めて ESP32-C6 の Example のビルドを試みました。

インストール

インストールは Swift の Toolchain とマイコンの SDK を入れる二つの作業が必要です。
うちは M2 MacBook Air なのでそれに合うツールをインストールしていきます。

Swift

https://www.swift.org/install/macos/ から持ってきます。現状は組み込み向けの Toolchain は普通の最新版を持ってきてはダメで、リンク先の main っていうところの Download Toolchain から dev 版をダウンロードしました。pkg なんで、ダブルクリックして開いてインストールします。
それで TOOLCHAINS という環境変数をセットしてあげると dev 版を使えるようになります。
TOOLCHAINS という環境変数に与える値は、
/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2024-06-13-a.xctoolchain/Info.plist
(バージョンによってパスが異なるので適宜合わせること)の中を見れば書いてあります(正式にはどうやって調べるのかわかりません)。以下の string に囲まれたのが TOOLCHAINSS に与える値です。
<string>org.swift.59202406131a</string>

以下のように指定します。
% TOOLCHAINS=org.swift.59202406131a

すると
% swift --version
で、バージョン確認できます。

% swift --version
Apple Swift version 6.0-dev (LLVM 57177aa1b91540b, Swift 8be62863326595c)
Target: arm64-apple-macosx14.0

ちゃんと 6.0-dev に切り替わってました。
これで Swift は OK。

ESP32C6 SDK

マイコンの SDK を入れます。
こちらの macOS のところを参考にインストールしていきます。
brew は入ってるので、
% brew install cmake ninja dfu-util
% brew install ccache
% mkdir -p ~/esp
% cd ~/esp
% git clone -b v5.2 --recursive https://github.com/espressif/esp-idf.git
% cd ~/esp/esp-idf
% ./install.sh esp32c6
を順に実行していきました。すでに rosetta は有効にしてあったのか、特に問題でなかったので rosetta はインストールしませんでした。
インストールしたツールを有効にするために以下のコマンドを実行します。
% . $HOME/esp/esp-idf/export.sh
これ、小さなドットがあるのに注意。忘れると動きません。

Example のビルド

Example を GitHub からもってきます。
% git clone https://github.com/apple/swift-embedded-examples.git

こちらに ESP32-C6 のビルドの仕方がでているので実行してみます。

% cd esp32-led-strip-sdk
% export TOOLCHAINS=org.swift.59202406131a
% . $IDF_PATH/tools/export.sh
% idf.py set-target esp32c6
% idf.py build

これで特に問題なければいいのですが、自分の場合は libssl.1.1.dylib がないっぽく、export.sh の実行がエラーで中断しました。
以下の Qiita の投稿を参考にインストールしてとりあえず export.sh が少し進みました。

しかしこの先二度ほどひっかかりました。
一つは、
% idf_tools.py install-python-env
を実行する必要があったようです。
あとは、なんだろ、メッセージにこれを実行したら?というのが出てたのでその指示に従ってたので、Error メッセージをよくみて対応してみてください。

以上で、ようやくビルドが成功したっぽいのですが、実機がないので書き込めるのか、実行できるのかは不明です。

実機を秋月から手に入れて書き込んでみたらボード上の LED をランダムに点灯させることに成功しました!LED の繋がってるポートと数が違うので、main/Main.swift の一部を書き換える必要があります。
  let n = 1
  let ledStrip = LedStrip(gpioPin: 8, maxLeds: n)
  // let n = 8
  // let ledStrip = LedStrip(gpioPin: 0, maxLeds: n)
ビルドと書き込みとシリアルモニターをいっぺんにやるには以下のコマンドでOK。ただ、シリアルモニターを有効にすると、どうやって抜けるのかがわからない。。
% idf.py build flash monitor



雑談

Swift ではやはり低レベルなアクセスはできないようで、ベンダーの用意した SDK の API を叩かなければならない。もしくは自前で C/C++ でその部分のコードを書く必要がある。
Example にある BridgingHeader.h をみるに、FreeRTOS.h をインクルードしているところから、結局は FreeRTOS の上で走ってるのねということ。ファーム屋ではないので、何が良くて悪いのかわかりませんが。

あと GPIO を直で叩いてみたいのですが、ライブラリに見つからず。Button/ADC の Read 系ならあるんだけど。また WWDC2024 のデモのコードも置いてあったのでビルドしてみようと思ったら Matter を入れないとだめっぽく、こちらも面倒だなと先に進まず。ちなみにこのデモも簡単な L チカから始まるように見えるんだけど、そもそも乗っかってる LED が GPIO H or L だけでは光ってくれない代物 (WS2812B) なので、同じく led_strip の API を叩いているという。。

とりあえず GPIO H/L と単純に叩きたいー。

(追記) ビデオ最後までちゃんと見るべきでしたね。最後の方に Swift MMIO なるものをチラッと説明してます。リンクもありますね。memory mapped register を直接安全に叩けるとか。これだー。

2023/02/05

MacBook Air M2 で Windows11 ARM 環境は使い物になるのか?

一週間ほど Parallels に Windows11 を入れて触った感触としては、周辺機器とは関係ない、単にソフトウェアを動かしたいだけなのなら結構違和感なく使えるのではないんでしょうか。macOS と Win11 の切り替えは全画面にしている Win11 とは指3本でスワイプでスカスカ切り替えられて、とてもスムーズ。とても別な OS が同居してる感はないです。CPU 半分 (4個)貸してるけど、macOS 側も特にストレスなしです。何年前か忘れたけど出始めのころの Palallels を触った感覚ではもっさり感はあったなぁ。隔世の感があります。

また動かなくて困ってる組み込み系のソフトはあるのですが、想定内でやはりなぁと。困ったらいままでの Intel Mac でどうにかしつつ、M2 で出来ることが増やせればな感じです。

比較対象にしてるマシンは、それまで使っていた MacBook Pro 2015 15" Retina。Core-i7 2.5GHzで、Memory 16GB 搭載してて macOS でも Bootcamp の Windows10 でもまだ十分使えるなというマシンです(個人的な感想)。

購入マシン構成とその経緯

MacBook Air M2 2022 8CPU, 8GPU (Mac14,2)
Memory: 24GB
SSD: 1TB

購入を決めたのは M2 Pro/Max が発表になってから一週間後ぐらい。M2 Pro が高すぎるのであきらめて、Parallels を使う前提で構成を決めました。候補としては M1 Air もあったのですが、仮想環境がまともに走ってほしいので、最大メモリ搭載量が大きく、MagSafe があってポートに余裕のある M2 Air にすることにしました。OS も二つ以上入れることと、天体撮影で必要な一時的なデータセーブサイズを考えて SSD も多めに。ちょっと高いんだけど。あと MagSafe 好きなんです。本体のコネクタに負担かからないので。今回の MagSafe のケーブルは前と見た目と違うんだけど、耐久性に改良がされているんでしょうか?期待しちゃいますね。GPU については GPU をガンガンに使ってくれるソフトはあんまり縁がなさそうだなと思ったので 8GPU にしておきました。 
キーボードはポクポクしたクリックを感じるタッチです。嫌いではないです。HHKB の方が好きですが。

アミアミ?ケーブル


速度と体感

速度

Geekbench 5 で CPU 性能を比較してみます。

macOS
MachineCPUOSSingle-coreMulti-core
MacBook Pro 2015Core-i7Monterey7443294
MacBook Air M2M2Ventura19098923

Windows
MachineVMOSSingle-coreMulti-core
MacBook Pro 2015(Bootcamp)Windows107313173
MacBook Air M2Parallels18Windows1116625560

macOS だと Intel Mac (Monteley) のスコアが 744/3294 のところ、M2 Air (Ventrura) が 1909/8923 程度。Windows だと Bootcamp (Win10) が 731/3173 で、Parallels 仮想環境 (Win11) が 1662/5560 という結果になりました (それぞれ single core/multi core の値)。macOS 同士の比較で 2.6/2.7 倍で Windows 同士だと 2.27/1.75倍と仮想環境はやや遅めとはいえど、2倍程度の速度の違いがあり、十分体感できる差になります。あれ、こんなもんかとは思いましたが。ただしバッテリーの持ちは抜群で、丸一日使ってもまだ余裕ある感じです。倍の性能で何倍電池持つんだよって感じで。macOS の方も、積極的に輝度下げたりとか低消費電力対策をしてるようには感じましたが。

体感

いままで古い Intel Mac で普段使いのソフトでは特に不満がなかったので、多少キビキビしててもその差ははっきり言って分かりにくいのですが、コンパイルなどでは流石にその差を体感できました。うぉー速いとまでは思わないけど、あ、速くなったって感じです。M5Stack のコンパイルは Arduino IDE でとても遅くてイライラしてたのが耐えられるぐらいの速度になりました。macOS ネイティブ環境しか比べていませんが。また、天文系の画処理ソフトはそこまで速くなった感は無いのですが。と思って、Windows で Autostakkert によるスタッキングの速度を比較したら、えーという結果が。。 Parallels の Edition 選択のところにその顛末を。

Parallels vs UTM

どうしようか迷ったが、とりあえず安定しているだろう Parallels にしとこう。

Parallels Standard Edition vs Pro Edition

てんこ盛りにしても CPU 数 8、メモリ最大 24GB とあまりリソースの多くない M2 Air に Standard だと CPU 4, メモリ 8GB までしか割り当てられなくて十分に感じられる。したがって多くの CPU やメモリを割り当てられる Pro にするメリットはない。ほんと?ということで、CPU の数を 4 と 6 動画撮影して PiPP で前処理した木星 2400フレームを Autostakkert! 3でスタックしてみた。
スタック時間が 84秒と 70秒。メモリ使用量も 1.4GB 程度なので 8GB もあればとりあえず十分。かな?使用した画像はだいぶトリムしてるので、ちょっと大き目な画像を処理したら 8GB では足りないかもしれない。そんなの滅多にないと思うので、Standard でいいかもしれないし、24GB ではなく、16GB で十分だったかもという気になってる。Standard Edition と Pro Edition の価格差は 1,000円ほど。macOS の更新が毎年あったとして、それに合わせて Parallels もアップデートした方が良いかもと考えると微妙だなぁ。この差。どうしよ。年に +1,000円して少しおまけな機能と OS のアップデートに合わせた更新をしていくのかとか。
結局。。一年間はプロにして様子見。ということにした。


4 core

6 core

ここで衝撃の事実。
実は今まで使ってた Intel Mac 爆速でした。


Stacking という項目をみるとわかるのですが、倍速です。えぇ、涙目です。なんで古い Intel Mac が勝つんだ〜と。

ちなみになんでこういう差になるかというと、真ん中の上の方に Thread という項目があるのですが、Intel Mac 8 なんですよね。それと比べて 4 コアだと 4, 6 コアだと 6 スレッドというようにコアの数しかスレッド流せないみたいです。M2。それとも OS がサポートしていないだけなのか。。Intel Mac は Core i7-4770HQ というプロセッサーで、4 コアなのですが、8スレッドあるので、スレッド数で優ってるんですね。M2 ネイティブなソフトならコア数で同じ数のスレッド走らせるとするとどうなるんだろう?というのは気になりますね。

VM

Windows 11

は DSP版でお安くした分、無駄に Pro にしておいた。
Windows11 は今までの MacBook Pro の Bootcamp で走る Windows 10 は残すので、別途 DSP版を購入したのだけど、アクティベーションに苦労した。DSP版だからというわけではなさそうなのだけど。多分。終わりよければ全てよし。アクティベーションを何度も試すときはVM捨てるので、インストールしたソフトはすべて空に。。

Ubuntu

Windows に WSL ではなく、Parallels に Ubuntu を導入。こちらのほうが素直ですよね。とりあえず iverilog + gtkwave が走る環境を準備。iverilog は apt で最新版を入れられたのだけど、fst フォーマットが扱えなかったので、ビルドからやりなおし。RISC-V チップの Verilog simulation の実行は結構速く、、いや今までの環境に比べると体感爆速。

M2 Air で出来たこと出来ていないこと

(2023/2/5 時点)
天文関係のソフトと組み込み系のソフトを試しています。Win11 は Parallels18 上で走らせています。Parallels には Ubuntu も入れています。

動かせたもの一覧。

天文関係

macOS

  • Firecapture 2.7.10 + ASI462MC
  • ASIStudio v1.7 + ASI462MC
  • SynScan Pro v2.1.12 + AZ-GTi
Firecapture と ASIStudio はどちらもカメラを認識してカメラをオン、画像を表示できました。SynsScan Pro の Mac 版なんてあったんですね。撮影は Mac で、画処理は Windows でいけそうです。いままで Sharpcap だったんで、Firecapture 覚えないと。

Win11

  • PiPP  x64 v2.5.9
  • Autostakkert 3.1.4
  • RegiStax6 Version6.1.0.8
  • WinJUPOS 12.2.4
ファイルの Open, Save に関しては Mac と共有のフォルダではダメなケースがありましたが、処理自体は特に問題ない感じです。どのツールも速くなった感じはあるものの、もともとそれなりに時間がかかる処理なので、めっちゃ速くなったという感じはしませんでした。

組み込み系

macOS

  • Arduino IDE + M5Stack Basic, Gray, Stick, Stick+, Atom-Matrix,Atom-Lite,M5 Core2,M5Paper,CoreInk
Basic, Gray, Stick は認識させるのに苦労しました。M5Stack のサイトにあるドライバを入れたりなんなりごちゃごちゃしてたらいつの間にか認識するように。他は特になにもしなくてもあっさり認識しました。Arduino IDE のコンパイル時間は速くなりました。ちょっとは待たされるのですが個人的に許容範囲です。PlatformIO や VSCode の Arduino 環境ではまだ動作確認できていません。
  • MakeCode + micro:bit 
初代 micro:bit です。最初すぐに認識してくれなかったのですが、接続できて MakeCode からダウンロードボタンで書き込みができました。

Win11

  • Gowin V1.9.8.09 Education + TangNano4K, TangNano9K
この手のツールは全然ダメだろうと諦めていたのですが、ビットストリーム吐き出して、書き込みも OK でした。ただ表示が崩れていてシリアルの設定か何かは全く内容を確認することも設定することもできない感じです。また無印 TangNano に関しては認識してくれなかったので、書き込みテストできていません。

上手くできなかったもの ToDo

上記はうまく動いてそうな組み合わせ。動かなかった・または一部動いていないものは以下です。
  • SynScan Pro (望遠鏡の架台 AZ-GTi の制御)
    Windows からだとツールは立ち上がります。シリアル接続がうまくいかないです。なぜかこの環境だとシリアルデータに偶数パリティが追加されるようで、それが原因のようです。Mac 版があることがわかってそれが動作するのでいいのですが、他のソフトとの連帯はどうなんだろ。
  • SyarpCap
    起動はします。カメラ認識してくれないんですよ。ZWO で ARM 向けのドライバを用意してくれていないからだと思います。ただ、ZWO としてはなんかしてくれそうな雰囲気
  • Vivado 2015 (旧Xilinx の FPGA 向けツール)
    入れたけど起動せず。困ったことにアンインストールもできずに無駄なディスクを食ってます。OS 入れなおそうか。。新しいバージョンは動いているらしい事例ありです。
  • Tang Dynasty (TangPrimer 搭載 Anlogic の FPGA 向けツール)
    Win は Bitstream まで出せるが、ダウンロードできない, Ubuntu では起動しないが、シリアルは認識してるので、どっちもどっちな感じ。惜しい。Win 11 ARM 向けドライバ作ってー。もしくは Linux 版リビルドしてー。
  • Quatus (旧Altera の FPGA 向けツール)
    Win, Ubuntu ともにインストールすらままならず。Win 版 Quatus は WSL が必要らしいので、入れてみようと思ったけど WSL そのものが入らず。そもそも仮想マシンの仮想マシンってどうよという。しかも WSL で Ubuntu が走ったとしても ARM 系 Ubuntu だと結局だめじゃんとなりそう。

というわけで、なにか代替え手段があるかもしれませんが、上記はまだまだなツールです。ハードに依存しない Windows のソフトは結構動いている感じです。組み込み系も FTDI の USB シリアル系搭載デバイスであれば案外いける雰囲気があります。他にも ARM 版ドライバさえあれば、、という惜しいツールもあったりします。また Visual C++ 再配布可能なパッケージが必要なソフトウェアもあるので入れなければならないかもしれません。が、これはこの環境とはまた別でよくある話かも。他には XX.DLL がありませんのようなメッセージが出て起動できないツールがあるのですが、DLL のみを入手できるサイトから入手して適切なフォルダに置くと OK とかいう場合もあるそうです(自分では上手く行ったものは無いのですが)。
Ubuntu や Windows 上の WSL (インストールできてない)は、軒並み既存バイナリは動かなそうな雰囲気です。ARM アーキテクチャ向けに再ビルドが必要なのかなという感じ。

USB のドライバ

ちなみに Windows 向けの FTDI のドライバは ARM 版をインストールできます。.zip をダウンロードして C: ドライブに展開。デバイスマネージャーから黄色三角の出ている FTDI 系デバイスに対してドライバを展開したフォルダを指定してインストールすれば OK です。注意点はドライバーを Windows の C: ドライブのどこかに置くことです。Mac 側と共有されているダウンロードフォルダーに置かれていたりすると認識してくれません。
M5Stack は USBのドライバを 配布してます。

AE-F234X も使えてますよ〜。
TX と RX をワニでショートな荒技ループバック



Parallels での Windows で注意すること

あれおかしいと思ったらデータを保存、起動する場所を調べてみるといいかも。上記で書いた通り、Mac との共有フォルダに置いたファイルの読み書きは Windows のソフト次第でできたりできなかったりなので、基本 C: ドライブにおいた方が問題なさそうです。


とりあえず進捗あったら更新します。気が向いたら。