JTAG/SWD 関係の用語
デバッグ機能の分類
- デバッグ制御インターフェイス : CPU制御を行う。ブレークポイントやプログラムカウンタの増加(実行)など
- トレース機能: 実行履歴を出力する機能。デバッガではいちいち実行を止めるため、実際の速度で動かしたときのタイミング問題などを検出するのは難しい。そこでトレース機能が必要になる。
デバッグ制御インターフェイス
- ICE: in-circuit emulator CPU の代わりに回路中のCPUをエミュレーションするもの。元々は専用の IC だったが、最近のMCUはオンチップエミュレータとなっている。
- JTAG デバッグ制御インターフェイス。元々はデバッグ用ではなく検査用。5線で通信する。各ピンの状態がわかる (バウンダリスキャン)、というのが本来の用途。
- JTAG エミュレータ: JTAG をデバッグ制御として、オンチップエミュレータを操作する形のICE
- SWD デバッグ制御インターフェイス 2線ですむ。ARM MCU はこれが主流。デバッグ専用で、検査ポートとしては使えない (バウンダリスキャンはできない)。プロトコルは32bit値のR/Wに特化している。
JTAG も SWD も CPU 内部のレジスタを読み書きすることで、CPU 側にある任意の機能を呼び出している。なので、デバッグプロトコルは JTAGとSWDの上に乗っており、CPU によって異る。
トレース機能
- ETM: Embedded Trace Macrocell 分岐のたびにPC情報を得ることでトレースする。
- SWV: Serial Wire Viewer PCをサンプリングすることでトレースする。(サンプリングなので抜けが発生しうる)
(高級な print デバッグを想像するとよい。が、自分は使ったことがないのでわからない)
ARM 関連
- CMSIS-DAP: Cortex Microcontroller Software Interface. Standard - CoreSight Debug Access Port . ARM が定義した USB と SWD/JTAG インターフェイスのプロトコル
- ARM CoreSight: ARM Core 内のデバッグ用コンポーネント
USB から CMSIS-DAP を使って JTAG/SWD を操作し、CPU 内部の CoreSight に接続する、という感じ。
USB デバッガ
- SEGGER J-Link: JTAG/SWD を USB 経由で扱うインターフェイス
- ST-Link: STM8/STM32 専用の JTAG/SWD を USB 経由で扱うインターフェイス
- LPC-Link2: CMSIS-DAPデバッガにしたり SEGGER J-Link にしたり Redlink にしたりできるボード。
このへんややこしいが、「SERGGER J-Link」はデバッガハードウェアの名称でもあり、USB 接続時のプロトコルでもある。
ST-Link も同様で、ST-Link2 ST-Link3 というデバッガハードウェアもあるし、USB 接続時のプロトコルでもある。
LPC-Link2 は USB 接続時のプロトコルとして SEGGER J-Link / CMSIS-DAP / Redlink (nxp の独自プロトコル) を切り替えられるボード。
結局どのプロトコルでも、同じCPUならできることは一緒。だが、ホスト側のドライバの関係でパフォーマンスに違いがでることがある。
関連エントリー
- Cortex-M の SWD/ITM を使った UART を使わない printf() デバッグ SWD (Serial Wire Debug) やっててさらにトレース(printfみたいなこと)も行いたいことは多い。別途 USART を...
- stm32f0x 書きこみ速度大会 NanoVNA (stm32f07) に対しての書きこみで、どの方法が早いのだろうか?と気になったので試した。対象は 95764bytes ...
- NanoVNA のリモート化 (Wi-Fi 中継) アンテナの調整をする場合、給電点 (測定点) と調整点は離れていることが多いなというコンテキストで、NanoVNA の Bluetooth ...
- STM32F103 で意図した出力がでないときのチェックリスト Alternate function の再配置(remap)の確認 AFIO_MAPR STM32CubeMX でペリフェラルのピン設定を確...
- root化しなくても Wi-Fi 経由での adb はできる Android Debug Bridge (adb) | Android Developers に従うだけ。 一旦 USB で接続して、...
✖
Comlink は iframe 間通信にも使える
https://github.com/GoogleChromeLabs/comlink
「Comlink makes WebWorkers enjoyable.」と書いてあるが、キモは postMessage の抽象化なので、iframe 間通信にも使用することができる。ただ、origin の取り扱いをする必要があるので、ラッパーが必要。といってもラッパーも Comlink.windowEndpoint() という形で Comlink 自身に用意されている。
iframe の親でも小でも、どちらでも Comlink.expose することができる (役割は反転できる)。ただ、その際に該当する window インスタンスが必要なので、iframe の親側では小フレームのロードを待たなければならない。
関連エントリー
- ブログシステムの HTML 生成を効率化 そろそろやることなくなったので minify などをやることにしました。 ただ、ブログシステムの出力の最後ほうでページごとに全体を mini...
- Gist に置いた JavaScript のベンチマークをとる デモ textContent innerText $().text() の比較ベンチ for of と単純な for の比較ベンチ ある要素...
- 現在の h2o.conf.yaml 今のこのサイトの h2o.conf.yaml です。HTTPS (443) のみを処理しています。HTTP (80) は nginx で受け...
- はてブ用ブックマークレット 現在の非表示ユーザの総数: javascript:(async()=>{alert((await(await fetch("http://b...
- Mojave で Android Emulator が起動しない emulator: Android emulator version 30.5.3.0 (build_id 7196367) (CL:N/A...
3秒でわかる Capacitor と Cordova の違い
実行コンテキストの違い
Cordova は file: で実行される。Capacitor は http: (Android) で実行される。
この違いは案外大きい。ESM (type="module" などでロードされる ECMAScript Modules) は application/javascript でなければ実行されないという厳格なルールがあるが、file:// ではすべてのファイルに mime-type が設定されないため、実行できない。回避する方法は結局のところ localhost にサーバを立てるぐらいしかない。この点だけでももう Cordova は厳しい。
アプリケーションの本体はどこに…
Cordova はビルド時に必要なソースコードを生成する。このため実際のビルドは必ず cordova コマンドを介す。
Capacitor はソースコードのスキャフォルドを最初に生成する。レポジトリには各プラットフォームの完全なプロジェクトが生成される。このため、実際のビルドは Android Studio や Xcode など、ネイティブな環境で行われる。
関連エントリー
- capacitor で Android 向けに minifyEnabled true Android では、アプリのサイズをできるだけ減らしたりするために、リリース前にアプリ全体のコードの最適化 (いわゆるツリーシェイキング)...
- cordova run android --device でエラー :processDebugResources FAILED FAILURE: Build failed with an exception....
- NanoVNA WebApp の Android アプリ化 Capacitor をつかって NanoVNA-Web-Client を Android アプリ化してみた。 https://play.go...
- Android SDK の各プラットフォームのビルドツールの一部を使いたいとき sdkmanager をダウンロードする Android Studio のダウンロードページから「コマンドラインツールのみ」を選んでダウンロ...
- Android O から広色域ディスプレイがサポートされる デベロッパープレビューのそのようなことが書いてあった。 Wide-gamut color for apps: Android develop...
八幡宮来宮神社
root化しなくても Wi-Fi 経由での adb はできる
Android Debug Bridge (adb) | Android Developers に従うだけ。
一旦 USB で接続して、デバイス側の adb を tcpip 経由に変更する
adb tcpip 5555
USB 接続を外して、adb connect [device ip address] を実行する
adb connect device_ip_address
細かい手順は公式の説明にちゃんと書いてある。これで手元の端末 (Huawei P20) ではうまくいった。
これで adb は WiFi 経由でデバイスを認識しているので、adb install なども WiFi 経由で可能になる。
Android Chrome の Wi-Fi 経由デバッグ
上記手順を踏んでいれば chrome://inspect を開くと該当デバイスの Chrome インスタンスも見えているはず。そのままデバッグできる。
なぜ WiFi 経由で adb したいか
Android をホストとして USB デバイスを接続していると、USB ポートは必ず埋まってしまう。もし USB で adb 接続しようと思うと大変煩雑になる
なんか接続が切れる
デバイス側のセキュリティ要件なのかわからないが、しばらく経過すると、勝手に USB デバッグのチェックが外れたりする。よくわかってない。
とりあえず wakelock をとったほうがいいのかも
関連エントリー
- Android と USB 接続したとき、どうあがいても一部のファイルを転送できない 症状としては ファイル転送 / Android Auto モードで USB 接続し Windows Explorer からコピーしたいデバイ...
- NanoVNA のリモート化 (Wi-Fi 中継) アンテナの調整をする場合、給電点 (測定点) と調整点は離れていることが多いなというコンテキストで、NanoVNA の Bluetooth ...
- JTAG/SWD 関係の用語 デバッグ機能の分類 デバッグ制御インターフェイス : CPU制御を行う。ブレークポイントやプログラムカウンタの増加(実行)など トレース機能...
- Mojave で Android Emulator が起動しない emulator: Android emulator version 30.5.3.0 (build_id 7196367) (CL:N/A...
- macOS の EOS Utility 「カメラとUSB接続できませんでした」 どうあがいても接続できなくて困った。 どうやらなんか Google Chrome が USB デバイスをかたっぱしからオープンする挙動をして...
GitHub Pages を GitHub Actions で PDF 化して releases にアップロード
GitHub Pages を GitHub Actions で PDF 化して releases にアップロードするというのをやってみた。
やりかた
- deploy された GitHub Pages を wkhtmltopdf で PDF 化
- ghr で PDF を releases にアップロード
が基本的なところ。GitHub Pages のデプロイは Actions よりも遥かに早く終わるので、厳密に同期をしていない (Actions で Jekyll を起動して HTML を生成するのが正攻法だけど、この方法はものすごく時間がかかってしまう)。
wkhtmltopdf は openlabs/docker-wkhtmltopdf という Docker イメージを利用した。ただし、このイメージには日本語フォントが入っていないので、ちょっと工夫する必要がある。具体的にはレンダリングしたい HTML 側で、明示的に Google Fonts などから Web Fonts としてロードしてやる必要がある。
ghr は go を入れるところからやってしまったが、たぶん ghr の releases からバイナリ落としてきて展開するほうが早いと思う。そのうち変更するかも。
実際の設定
name: document release
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.12
uses: actions/setup-go@v1
with:
version: 1.12
id: go
- name: Convert HTML to PDF
run: |
docker run \
-v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/_site:/srv/jekyll/_site \
openlabs/docker-wkhtmltopdf --print-media-type https://cho45.github.io/NanoVNA-manual/ /srv/jekyll/_site/NanoVNA-manual.pdf
- name: Upload to releases
env:
GO111MODULE: on
GOPATH: /home/runner/work/
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
go get -u github.com/tcnksm/ghr
$GOPATH/bin/ghr -u cho45 -r NanoVNA-manual -recreate -replace -n latest -b "latest" latest ${{ github.workspace }}/_site/NanoVNA-manual.pdf 関連エントリー
- S-A-A-2 (NanoVNA V2) を手に入れてみた NanoVNA V2 という名前で開発されているが、ややこしいので開発コードである S-A-A-2 (Simple Antenna Anal...
- NanoVNA を VSCode + ST-Link + OpenOCD でオンチップデバッグ PCB上にピンヘッダ(未実装)がある。 SWDIO SWCLK GND NRST VCC (使わない) SWD (Serial Wire D...
- RabbitMQ で MQTT over WebSocket ウェブページから JavaScript で MQTT ブローカーに送られてくるデータを取得したかったので、MQTT over WebSock...
- WSL2 で USB (usbipd-win) https://github.com/dorssel/usbipd-win WSL2 内ではホストの USB デバイスを使うことができないと...
- STM32F401CC の安いボード Type-C コネクタ 25MHz / 32.768 kHz 水晶つき NRST / BOOT ボタン 裏面に WeAct と書いてあった。...
MySQL で SET 型の UPDATE
以下のようなテーブルのとき
CREATE TABLE foo
(
aset set('aaa', 'bbb', 'ccc')
); - 空文字列を SET のメンバーとして許していない
- null 可
値を追加する
UPDATE foo SET `aset` = CONCAT_WS(',', NULLIF(aset, ''), #{member}); aset が空文字列(emptyset)のとき、これをそのままカンマで CONCAT_WS すると、",ccc" とかになり、空文字列のメンバーは許容していないため data truncated でエラーになってしまう。
CONCAT_WS は引数が null のときはそれを飛ばして連結するので、それを利用する。
ref. https://stackoverflow.com/questions/14642658/the-best-way-to-remove-value-from-set-field
値を削除する
UPDATE foo SET `aset` = TRIM(BOTH ',' FROM REPLACE(CONCAT(',', aset, ','), CONCAT(',', #{member}, ','), ',')) もっとややこしい。というのも ",aaa" も "aaa,,ccc" も "aaa," も不正なので、こういう値にならないようにしないといけない。
備考
SET は実際は 64bit の数値なので、SET のメンバー名(文字列)を2の乗数の数値に変換する方法があれば、単にビット演算ですむ。けど、MySQL 上にはこの方法 (メンバー名を SET の数値に直接変換する) がない(と思う)。アプリケーション側で数値と文字列のマッピングを持てば SQL は簡単になるが DDL と常に整合性をとる必要があってややこしく、それなら SET じゃなく BIGINT UNSIGNED で持てばいいことになる。
なんかいい方法あったら教えてください (SET 使うな以外で)
関連エントリー
- SQLite で LOG や SQRT を使うには SQLite にはかなり基本的な算術演算関数しかない。追加で何かしらやるためには拡張 (Run-Time Loadable Extensio...
- Ruby Sequel で生 SQL をメインに使う Sequel はドキュメント見ると SQL そのまま書くやりかたもとクエリビルダを介すやりかたも許されていると感じるので (別に他のライブラ...
- TF-IDFとコサイン類似度による類似エントリー機能の実装 TF-IDFによる類似エントリー機能の実装をしてみました。ほぼSQLiteですませるような構成です。 やっていることの概要 エントリーのHT...
- Ubuntu 16.4 LTS クリーンインストールして引越 カスタムOSインストールガイド - Ubuntu 16.04 – さくらのサポート情報 を見ながらインストールまでやる。 旧サーバと同じホス...
- Lightroom のカタログを SQLite で読んで統計を出したりする .lrcat っていったい何なのか カタログファイルの実体である lrcat は SQLite の DB ファイルそのもの。sqlite3 ...






