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)
外部入力割り込みの設定,ピン,コールバック関数,極性を設定する.
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.pattern
,recipe.cpp.o.pattern
を文字検索
上記のNucleoを
.c
から.o
を作るための設定.
要はgccやg++に渡す引数ということでいいんだろうか?
であればccacheと同じノリでいいはずなので,recipe.c.o.pattern
,recipe.cpp.o.pattern
に渡す引数のコマンドの最初に
ccache
コマンドを追加すればいい.
MacOSでやったら$PATHが設定できてないよって怒られた.
.bash_profile
にccacheのパスを追加してみたけどダメだった.
もうめんどくなって絶対パスを直接渡すことにしたら,無事にスケッチのビルドの際にccacheが動いていることを確認した.
絶対パス渡すのなんか長ったらしくてダサいからちゃんと設定確認しよ…
STM32(Nucleo)の場合
Windowsでやってみた.
上記のstm32(Nucleo)の場合,platform.txt
はC:\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のディレクトリの変え方が分からない.