2010年07月31日

OpenOCD:CMSIS: lpc1768/STM32 I/Oビュー画面の研究(Peripheral view magic)

OpenOCD:CMSIS: lpc1768/STM32 I/Oビュー画面の研究(Peripheral view magic)


ocd-pv-magic-logo2.gif
I/Oビュー画面が何かは以下で述べた。 OpenOCD vs LPCXpresso (IOビュー画面) I/Oビュー画面を持たない無料系のデバッガで「簡単にI/Oビュー画面」機能を 持たせる試みです。 io_vew_lpc17xx.gif io_vew_lpc17xx-expand.gif 上はOpenOCD+EclipseでI/O View表示してみた。 insight-io-view.gif Insightでも表示してみた。 良いよい。 raid7-io-view.gif STM32を持っていないので上はRaid7のシミュレータで「io view」を表示してみた。 大丈夫そうだ。(Raid7では「未使用変数」を消去しないような設定が必要) *原理 やりかたは何種類かあるけど、例えば
#include "LPC17xx.h"

LPC_SC_TypeDef * const IO_SC_ = LPC_SC;

と定義してやると上の方に掲載した画像のように「IO_SC_」が 「変数ウインドウ」に表示可能になります。 同様に、 IO_GPIO0_,IO_ADC_とか47個ほど(LPC1768)あるので全部宣言すれば終了です。 宣言1個あたり「4バイト」(ポインタなので)消費します。 47個あるので190バイトくらい必要です。 SRAMに割り当ててもたいした量じゃないけど、 「このポインタ自身は絶対変更されないので、変数である必要はない」。 従って、「const」を付けてFlashに割り付けたのがミソかな。 SRAMの消費量はゼロです。 (別な思考としては、 I/Oマップ用のセクションを作成、そのセクションに変数として割り当てる というようなやり方。これはリンカスクリプトの変更が必要そうなので 今回は不採用。(未検証)(SRAMもFLASHも消費しない?)) *効能 かなり便利です。 I/Oビュー機能のない「Eclipse」や「Insight」、「TrueSTUDIO Lite」でも 簡単に表示できます。 1,定義さえすれば、LPC1768,STM32でも同様。 2,非常に簡単に組み込める。(プロジェクトにファイルを1つ追加するだけ) 3,CMSISの「LPC17xx.h」が必須だけど「LPC17xx.h」だけもってくれば   他のCMSISファイルと関係なくI/Oビューが利用できる。   (STM32も同様)   と。思ったが、   「LPC17xx.h」の中からインクルードしているファイルがあるので   CMSIS環境が良い。 *注意点 1,分解能がレジスタ単位。一部は8ビット単位。   ビット単位のビューは出来ない。(手動で作る例を後述) 2,定義ファイルの最適化を「OFF」にする。   (「Unused」で抹消されるのを防ぐため。) *状況 LPC2388とLPC17xxはレジスタ構成に共通部分が多いので 共通部分のLPC2388用「IO VIEW」を作るのは比較的アレかも。 *使い方 LPC17xx用:io-view-lpc1768-v01-201008.zip STM32f10x用:io-view-stm32f10x-v01-201008.zip 以下LPC1768で説明。 1,解凍して出来た「LPC17xx_io_view.c」を自分の任意のプロジェクトに追加します。 2,このファイルのコンパイル時の「最適化をなし」に設定します。   gccなら「-O0」(オーゼロ) 3,プロジェクトを普通にビルド、デバッグ開始。   すると、グローバル変数登録画面に現れるので登録する。   手動で登録する場合は「IO_ADC」等と入力する。(Insightなど)   (「LPC17xx_io_view.c」の中身参照。 *ビット構造の表示 ビット構造表示用の定義はないので自前で作る必要がある。 LPC17xxの「etc」フォルダにある「LPC17xx_io_view_bits.c」が具体例だ。 よく参照するレジスタだけ定義して使うと良いだろう。 io-view-bits.gif 上はステップ実行で変化したビットが黄色で表示された図。 (2010/08) *ねむいさんのLPC1343/LPC11xx対応版 ねむいさんが LPC1343/LPC11xx対応版を作成されました。 ここの kickstartプロジェクトに含まれています。 さらに便利になったと思います。
posted by Copyright (C) avrin All Rights Reserved. at 21:46| Comment(4) | OpenOCD | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ねむいです。おはようございます。
早速試させてもらいましたが予想以上に使い勝手が上がってびっくらです。
これは…ありがたい…!

人海戦術で残りのレジスタ群の定義埋めて完成させればフリーでも
市販品に引けを取らないデバッグ環境ができると思います。
Posted by ねむい at 2010年08月09日 09:56
こんばんわ audinです。
使っていただいてありがとうございます。

>>人海戦術で残りのレジスタ群の定義埋めて
そうですね、「Web上の人」がもっと増えるのを期待してます。

作ったばかりなのでこれから自分でも、もっと使おうと思います。(オイ
Posted by audin at 2010年08月09日 20:19

ねむいです。こんにちは。

audinさんに倣ってLPC1343とLPC1114用のIOViewの
ファイルを作ってみました。
わたしのブログの"おきば"で公開しているLPC1114,LPC1343用の
各プロジェクトファイルに組み入れていますのでどうぞ。

GPIOビットバンドアクセス用の"MASKED_ACCESS”の部分のレジスタ
配列が4096もあり、CMSISに忠実にIOViewを作るとデバッグ時にい
ちいち参照しにいってものすごく時間がかかってしまいますので
少し細工してあります。
Posted by ねむい at 2010年08月19日 10:31
こんばんわ audinです。
LPC1343とLPC1114の両方が一気にできあがって
うれしいです。
是非利用させていただきます。
ありがとうございました。
Posted by audin at 2010年08月19日 22:34
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。