目次

Arduino

圧倒的シェアの高さによるユーザ数によりソースコードがたくさん転がっているしラピッドプロトタイピングにはさいつよ(多分)
あんまり使わないので関数のメモ

STM32のボードを使えるようにする.

stm32duinoという拡張機能を追加する.
Install Arduino.cc IDEを参照
Upload methocが設定できる,定番のArduinoみたいに書き込むにはST-Linkの設定にマスストレージが必要.
マスストレージが設定されていない場合にはST-Linkを更新する際に有効にしておく.
CubeProgrammerをインストールしていればSWD書き込みもできる.

GPIO

void pinMode(uint8_t pin, uint8_t mode);

GPIOの初期設定、入出力、プルアップなどを決める。

/* GPIOの出力を変える. */
void digitalWrite(uint32_t ulPin, uint32_t ulVal);
 
/* ピンの状態を読み込む */
int digitalRead(uint32_t ulPin);
 
/* HIGH,LOWの状態を切り替え */
void digitalToggle(uint32_t ulPin);

EXTI

void attachInterrupt(uint32_t pin, callback_function_t callback, uint32_t mode)

外部入力割り込みの設定,ピン,コールバック関数,極性を設定する.

STM32/Arduino IDE の外部割り込みについて

ADC

/* ADCの分解能を設定 */
void analogReadResolution(int res);
 
/* 指定のピンからアナログ値を取得 */
uint32_t analogRead(uint32_t ulPin);

高速化

コンパイルが遅すぎてストレスマッハなのでなんか方法が無いかと模索したら以外にあった

オブジェクトファイルの出力先を固定する

オブジェクトファイル.oの出力先がIDE起動時やターゲットを変えた時ランダムに変更される.
このため,変更されると以前作られたオブジェクトファイルを使えないため,フルビルドするためクソ遅い.
よって,オブジェクトファイルの出力先を固定すれば,ソースコードの変更がされない限り再利用できる.
(もちろんそのオブジェクトファイルを保持しておく必要があるのでその分の容量は必要になるが)

「環境設定」を開くと,prefence.txtへのパスが記載されている.
prefence.txtを編集する.

build.path=出力先のディレクトリ

を追記する.
MacOS(High Sierra)には

build.path=/Users/name/.cache_arduino

Windows 10には

build.path=C:\Users\name\AppData\Local\Temp\arduino_build

とした.nameはユーザ名を入れる. フォルダ名の最初に.を入れると隠しフォルダ扱いになる.

ccacheを適用する

事前に上のオブジェクトファイルの固定をしておく.
ccacheを参考に事前にシステムにccacheを入れておく.

使うボード,マイコンによってそれぞれ用意されているplatform.txtを編集すれば良い.
platform.txtにて,recipe.c.o.patternrecipe.cpp.o.patternを文字検索 上記のNucleoを .cから.oを作るための設定.
要はgccやg++に渡す引数ということでいいんだろうか?
であればccacheと同じノリでいいはずなので,recipe.c.o.patternrecipe.cpp.o.patternに渡す引数のコマンドの最初に ccacheコマンドを追加すればいい.

MacOSでやったら$PATHが設定できてないよって怒られた.
.bash_profileにccacheのパスを追加してみたけどダメだった.
もうめんどくなって絶対パスを直接渡すことにしたら,無事にスケッチのビルドの際にccacheが動いていることを確認した.
絶対パス渡すのなんか長ったらしくてダサいからちゃんと設定確認しよ…

STM32(Nucleo)の場合

Windowsでやってみた.
上記のstm32(Nucleo)の場合,platform.txtC:\Users\name\AppData\Local\Arduino15\packages\STMicroelectronics\hardware\stm32\2.0.0 に入ってる.
なお,nameはユーザ名,最後のフォルダの数字が変わってることがあるがこれはバージョンによって変わるものだろう.
120行目くらいにあった. 変更前

## Compile c files
recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.flags} {build.info.flags} {compiler.c.extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}"
 
## Compile c++ files
recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {build.info.flags} {compiler.cpp.extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}"

変更後

## Compile c files
recipe.c.o.pattern=ccache "{compiler.path}{compiler.c.cmd}" {compiler.c.flags} {build.info.flags} {compiler.c.extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}"
 
## Compile c++ files
recipe.cpp.o.pattern=ccache "{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {build.info.flags} {compiler.cpp.extra_flags} {build.extra_flags} {compiler.arm.cmsis.c.flags} {includes} "{source_file}" -o "{object_file}"

ccacheのパスが通っていれば問題なく相対パスで設定でき,ccacheが効いていることを確認できた.
問題はccacheのディレクトリの変え方が分からない.

参考文献

Arduino IDEのビルドを速くする|オブジェクトファイルの出力先を固定する
Arduinoでccacheを使ってビルドを高速化!