0件のコメントESP32に搭載されているコプロセッサーのULPまわりを調べました。最新情報はM5StickC非公式日本語リファレンスにまとめてあります。Power)で、省電力で動くコプロセッサーです。ESP32のメインコアとは別にあり、メインコアがスリープ状態でも動かすことができます。省電力で動く反面、複雑な処理や高速処理ができないデメリットと、プログラミングがアセンブラなところがネックです。情報が極端に少ないです。ulp_run(0);}300ms間隔でGPIO26に接続したLEDを光らせるサンプルです。本当はM5StickCで内蔵しているGPIO10が使いたかったのですが、ULPからはアクセスできないpinでした。上記のようにGPIO26にLEDと抵抗を接続してBlinkしています。本来はアセンブラなので、.sファイルを使って開発をしますが、通常の環境ではアセンブラが使えないので、組み込みマクロを使ってプログラムをしています。以下ハマりどころだけ解説します。ピンについてまずGPIOですが、そのままの番号ではなく、RTCのピン番号に14ビットオフセットした値で指定する必要があります。内部的にはRTC経由でアクセスをおり、初期化などもRTC経由で行っています。RTCIO_GPIO36_CHANNELはesp32_gpioMux[GPIO_NUM_36].rtcでも同じ値です。esp32_gpioMux[GPIO_NUM_3].rtcは-1になるので注意してください。14上記の関係になっており、RTCではすべてのピンに接続されていません。GPIO26はRTC_GPIO7に対応しており、7+14で21ビット目になります。スローメモリについてESP32では8000バイトのスローメモリと呼ばれる領域があり、ULPと通常のプログラムの両方からアクセスが可能です。uint32_tとして定義してあるので、添字0から1999までの2000個の変数になります。ULPで保存したときの5ビット左シフトしたプログラムカウンター(PC)が設定されています。ULPプログラムのsizeが11の場合には、添字0から10までプログラムが収納されていますので、自由に使えるのは添字11から1999までになります。sizeをみて連番を割り振るか、1999から逆順に使っていくなどしないとプログラムを壊すので注意が必要です。まとめやっぱり情報が極端に少ないです。スローメモリも内容をダンプしながら確認して、やっと理解ができました。アセンブラで記述するときには.globalのラベルを宣言しておいて、C言語からそのラベル名でアクセスできるのですが、マクロの場合には自分で管理しないと駄目みたいですね。コメントをキャンセルメールアドレスが公開されることはありません。date*管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。スパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。その2関連記事はこちらです。関連記事はこちらです。Themegraphy。