*

C言語でEV3開発(16)-TOPPERS/HRP2 EV3 で Bluetooth割込み

公開日: : マインドストーム/EV3, 開発

どもです。
今回は、EV3 の環境をTOPPERS/HRP2 EV3RT で作成したアプリをPC上から操作しようとした際に出くわした問題・現象について書きます。

出くわした問題は、「割込み処理」です。
EV3を、Bluetooth でMindStorm と接続したPCから操作するために、以下のような構成のアプリ/ツールを考えていました。

PCツール:ユーザーの操作内容を、MindStorm に送信
MindStorm:Bluetooth接続されたデバイスからの指示に従って動作

MindStorm では、Bluetooth でデータを受信したときに割込み処理を発生させ、コマンドデータを処理することを想定しています。

1. 割込み処理の設定
EV3RT の割込み処理の設定(割込み属性や割込み番号、割込みサービスルーチンの登録)には、静的APIである「ATT_ISR」を使用します。
TOPPERS では、割込み処理の登録のためのAPIとしてCRE_ISR とATT_ISR の2つが用意されています。
これに対し、EV3RT はHRP2をベースにしており、HRP2 ではATT_ISR のみがサポートされています。
(詳細は、TOPPERS の仕様書を確認して下さい。)

MindStormのHW仕様書/回路図(LEGO Mindstormのダウンロードページ)

ECUのデータシート(TexasInstrument のAM1808 のページ)

今回は、EV3RT ではATT_ISR を使用して、割込み処理を登録します。

2. コンフィギュレーションファイルの設定
イメージのビルドにあたり、コンフィギュレーションファイルを以下の通りに設定。

コンフィギュレーションファイルの設定の各パラメータの意味を、以下に示します。
第1引数:割込みサービスルーチン属性
第2引数:割込みサービスルーチンの拡張情報
第3引数:割込みサービスルーチンを登録する割込み番号
第4引数:割込みサービスルーチンの先頭番号
第5引数:割込みサービスルーチン優先度

特に第3引数については、MindStormのH/W仕様書、およびCPU(AM1808)のデータシートを確認のうえ、ソースコードから特定した値、マクロです。

3. イメージのビルド
コンフィギュレーションファイルを設定後、イメージファイルのビルドを行います。
なお、ATT_ISR はdynamic loading に対応していないため、app を指定してビルドすると、エラーとなります。

cygwin上で”make img=xxxx”(「xxxx」には、作業環境に合わせて変えてください)を実行します。
すると、エラーが発生してしまいました。
エラー画面は、以下。

e_obj_att_isr

このエラーメッセージをよく見ると…

「ATT_ISR のintno ‘UART2_INT’ が、inhno ‘UART2_INT’ と重複しています」

と記載されています。
つまり、UINT2_INT が他で使用されており、それに対して割込みサービスルーチンを登録しようとしている、ということです。
そこで、どこで使用されているかを調べました。
結果、以下の場所で使用されていました。

sdk\ev3rt-beta6-2-release\hrp2\target\ev3_gcc\drivers\bluetooth\bluetooth_dri.cfg

上記では、「割込みハンドラ」が定義されています。

4. 結論
3.までで書いてきたように、TOPPERS/HRP2 EV3RT では、すでに「割込みハンドラ」が登録されています。
そのため、「割込みサービスルーチン」の登録ができない、ということになります。
では、Bluetoothでデータを受信・解析するのはどうするか、ですが…。
serial_rea_dat() などを使って実現する、というのがよさそうです。

以上、今回はTOPPERS/HRP2 EV3RT で割込み処理を実装しようとしたが、EV3RT 側で実装済みだった、という話でした…。

関連記事

no image

C言語でEV3開発(21)-モーター出力の制御

どもです。 前回は、超音波センサから前方障害物との距離を取得し、それを元に安全状態を判断する、とい

記事を読む

toppers

C言語でEV3開発(19)-コマンド通信処理でEchoBackしてみた

どもです。 前回は、Bluetoothの接続状態の変化に伴う、状態遷移について書きました。 今回

記事を読む

no image

C言語でEV3開発(4)

どもです。 今回のエントリーは、前回のエントリー内容/EclipseでEV3の実行ファイルをビルド

記事を読む

no image

C言語でEV3開発(7)

どもです。 今回のエントリーでは、いよいよEV3を動かしていきます。 新しい環境に対して、最もよ

記事を読む

eclipse_4.3_kepler

eclipse/CDTにおけるgdbでのデバッグ中に発生するpythonのエラー

どもです。 今回のエントリーは、Eclipse上でのデバッグの際に「pythonのエンコードエラー

記事を読む

python

VisualStudioCommunityでのPython開発環境構築

どもです。 最近、VisualStudioでのPython開発を始めました。 その際の環境構築に

記事を読む

eclipse-juno-logo

C言語でEV3開発(1)

どもです。 2回目の投稿。 本格的な投稿としては、初めての投稿になります。 内容は、LEG

記事を読む

eclipse_oxygen

Linux/EclipseでRaspberryPiのクロス環境を構築してみた…がっ!

どもです。 前回のエントリでは、WindowsにRaspberryPi3のクロスコンパイル環境の構

記事を読む

no image

Objective-CからC++コードを呼び出す

どもどもです。 今回は、突然ながらMacに関係する投稿です。 ソフト関係のことを勉強していて

記事を読む

toppers

C言語でEV3開発(28)-EV3の移動距離を計算できるようにしてみた

(テーマ) C言語でEV3開発(28)-EV3の移動距離を計算できるようにしてみた (下書き

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

no image
Windows-QtCreatorでのデバッグ

どもです。 更新の間隔が空いてしまいました。 久しぶりの更新です。

raspberry-pi
RaspberryPiで物体検出(2)-白線検出への挑戦(2):輪郭検出による白線検出(実機編)

どもです。 今回は、前回に引き続きOpenCvを用いて道路の白線検出

OpenCvLogo
RaspberryPiで物体検出(1)-白線検出への挑戦(1):輪郭検出による白線検出

どもです。 今回は、OpenCvを用いて道路の白線検出について、です

OpenCvLogo
OpenCvによる画像サイズ変更

どもです。 最近、カメラの動画をOpenCvで加工する、というこ

eclipse_oxygen
苦肉の策でLinux/EclipseでRaspberryPiのクロス環境を構築してみた

どもです。 前回のエントリでは、仮想環境(VirtaulBox)を用

→もっと見る

PAGE TOP ↑