Windows版のSW4STM32でデバッグを実行しようとすると、「OpenOCD Binary not found」というエラーが発生した。
いろいろ試行錯誤したところ、デバッグの構成で「OpenOCD Command」の指定に拡張子「.exe」を付ければ解決した。
「.exe」が無いとエラーが発生。
「.exe」を付けると正常に動作する。
でも、なんでやねん???
Arduino IDEでサードパーティー製ボードのパッケージをインストールするためのボードマネージャのURLをメモ。 (2021/11/23 追記)
M5Stack
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
ESP32
https://dl.espressif.com/dl/package_esp32_index.json
ESP8266
https://arduino.esp8266.com/stable/package_esp8266com_index.json
chipKIT (PIC32)
https://github.com/chipKIT32/chipKIT-core/raw/master/package_chipkit_index.json
Nucleo (STM32)
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
Adafuit系
https://www.adafruit.com/package_adafruit_index.json
Raspberry Pi Pico (Arduino公式版) → URL設定不要 (Arduino Mbed OS RF2040 Boards)
Raspberry Pi Pico (Earle Philhower版)
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
Seeed系
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json https://dl.espressif.com/dl/package_esp32_index.json https://arduino.esp8266.com/stable/package_esp8266com_index.json https://github.com/chipKIT32/chipKIT-core/raw/master/package_chipkit_index.json https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json https://www.adafruit.com/package_adafruit_index.json https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
Mbed OS5 からSW4STM32にエクポートしてビルドすると、mbed_toolchain.hの下記の行で「'asm' undeclared」というエラーが発生する。
#define MBED_COMPILER_BARRIER() asm volatile("" : : : "memory")
ビルドに用いるコンパイラの違いによるものである。下記のように修正するとビルドが通るようになる。
#define MBED_COMPILER_BARRIER() __asm__ __volatile__("" : : : "memory")
【ネタ元】
mbed os5 からSW4STM32にエクポートしてビルドするときmbed_toolchain.hの中で#define MBED_COMPILER_BARRIER() asm volatile("" : : : "memory") を
— doku38 (@doku38) 2019年11月29日
__asm__ __volatile__ に書き換えてコンパイルは通った
Open OCDのバイナリが見つからないのはプロジェクトプロパティのConfigでパスを指定し直し
コンパイル時に未使用変数の警告を出してくれるのは有用であるが、特定の変数が未使用であることを許容したい場合もある。そのような場合に下記のようなマクロを用意しておくと便利である。
#define UNUSED(x) (void)(x)
例えば下記のように使う。これによって警告を回避できる。
#define UNUSED(x) (void)(x) int main(void) { int hoge; UNUSED(hoge); return 0; }
Androidアプリの画面(Activity)のレイアウトの一部を実行時に動的に変化させたい
Activityのレイアウトで、動的に変化させたい部分のLayout要素に名前(id)を付けておく。ここでは hoge とする。
<LinearLayout android:id="@+id/hoge" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal"> </LinearLayout>
この部分に動的に挿入する内容のレイアウトを別ファイルで作る。ここでは piyo.xml というファイル名とする。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/piyo" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > (ここに内容を入れる) </LinearLayout>
実行時に下記のコードでhogeの部分をpiyo.xmlの内容に変化させる。
// hogeのLayoutを取得 LinearLayout layout = (LinearLayout)findViewById(R.id.hoge); // hogeの内容を全て消去 layout.removeAllViews(); // piyo.xmlの内容を挿入する getLayoutInflater().inflate(R.layout.piyo, layout);
上記のコードのinflateメソッドを実行したすぐ後で、piyo.xmlの内容のViewの高さや幅を取得してもゼロが返ってくることがある。これは、その時点ではまだinflateの処理が完了していないためである。そこで、そのViewないしその親Viewを監視するViewTreeObserverを取得して、レイアウト変化の完了をonGlobalLayoutイベントで知らせてもらう。ただし、このイベントは頻繁に発生する場合があるので、用がすんだらイベントリスナーは削除しておくこと。
// piyoViewというViewを監視するViewTreeObserverを取得 ViewTreeObserver vto = piyoView.getViewTreeObserver(); // レイアウト変化時のイベントリスナを登録 vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // ここにレイアウト変化時の処理を記述 ; // 用がすんだらこのイベントリスナを削除 vto.removeOnGlobalLayoutListener(this); } });