0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ATfE-21.1.1-Darwin-universal で pico-examples をビルドする

0
Last updated at Posted at 2025-12-18

ATfE 21.1.1 (Arm Toolchain for Embedded) がリリースされたので、pico-sdk で使えるか調べてみました。結論としては、pico-sdk 側がまだ未対応なので pico-examples のビルドはできませんが、開発用のブランチを使うとビルドすることが出来たので手順をまとめます。

前提条件

ホストOS: macOS 26.1 Tahoe

ツールチェイン: ATfE 21.1.1

ATfEのインストール

以下のページからATfE 21.1.1 をダウンロードします。

今回は、以下のファイルをダウンロードしました。
https://github.com/arm/arm-toolchain/releases/download/release-21.1.1-ATfE/ATfE-21.1.1-Darwin-universal.dmg

ダブルクリックすると、以下のようなウィンドウが出来るので、Applicationsフォルダにコピーします。
Screenshot 2025-12-18 at 16.29.22.png

インストール後に環境変数PATHを設定してバージョンを確認します。

$ export PATH=/Applications/ATfE-21.1.1-Darwin-universal/bin:$PATH
$ clang --version
clang version 21.1.1
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /Applications/ATfE-21.1.1-Darwin-universal/bin
Arm Toolchain ID: E0058 (1bbd3573)

ライブラリの Overlay ファイルもダウンロードした後に上書きします。

$ sudo tar xvf ~/Downloads/ATfE-llvmlibc-overlay-21.1.1.tar.xz -C /Applications/ATfE-21.1.1-Darwin-universal
$ sudo tar xvf ~/Downloads/ATfE-newlib-overlay-21.1.1.tar.xz -C /Applications/ATfE-21.1.1-Darwin-universal
$ sudo tar xvf ~/Downloads/ATfE-newlib-nano-overlay-21.1.1.tar.xz -C /Applications/ATfE-21.1.1-Darwin-universal

必要なツールのインストール

$ brew update
$ brew install git ninja cmake picotool

開発版 pico-sdk のダウンロード

# 開発用ブランチをクローンする
$ git clone -b clang-corrections --recursive https://github.com/rgrr/pico-sdk pico-sdk-atfe21

# 環境変数の設定
$ export PICO_SDK_PATH=$PWD/pico-sdk-atfe21

サンプルコードのビルド

pico-examples をダウンロードしてビルドします。-DPICO_BOARD は使用するボードに合わせてください。

$ git clone https://github.com/raspberrypi/pico-examples
$ cd pico-examples
$ mkdir build && cd build
$ cmake .. -G Ninja -DPICO_BOARD=pico2 -DPICO_COMPILER=pico_arm_clang
$ ninja

ターゲットボードへの書き込み

picotool を使って、ターゲットボードに書き込みます。

# BOOTSELモードからターゲットボードに書き込む
$ picotool load ./blink/blink.bin
 

その他

ターゲットがpicoの時(-DPICO_BOARD=pico)、コンパイラがクラッシュしてしまったので報告しておきました。

コンパイラの修正は時間がかかりそうなので、問題となる場合は以下の対策をしてください(コンパイラに最適化されないように明示的にmain関数から条件付きリターンを行う)。

diff --git a/adc/joystick_display/joystick_display.c b/adc/joystick_display/joystick_display.c
index c0a6197..1f142f5 100644
--- a/adc/joystick_display/joystick_display.c
+++ b/adc/joystick_display/joystick_display.c
@@ -33,7 +33,8 @@ int main() {
         printf("]  Y: [");
         for (uint i = 0; i < bar_width; ++i)
             putchar( i == bar_y_pos ? 'o' : ' ');
-        printf("]");
+        int ret = printf("]");
+        if (ret < 0) return ret; // WA for compiler crash bug
         sleep_ms(50);
 
     }

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?