*

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開発(17)-コマンドによるTOPPERS/HRP2 EV3RT アプリケーションの制御(コントロール)

どもです。 今回は、TOPPERS/HRP2 EV3RT で作成したアプリをPC上から操作するため

記事を読む

toppers

C言語でEV3開発(23)-モーターの性能確認

どもです。 今回は、EV3に付属しているモーター(Lモーター/Mモーター)の性能について調べてみた

記事を読む

eclipse_oxygen

Eclipse/CrossCompile環境でプロジェクトをクリーンできない

どもです。 今回は、Eclipseでクロスコンパイル環境を作成した場合、を実行すると「指定されたフ

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

toppers

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

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

記事を読む

python

Ev3開発サポートツール(4)-Pythonによるグラフ表示

どもです。 前回のエントリーで、VisualStudioCommunityでのPythonの開発環

記事を読む

no image

C言語でEV3開発(12)-opOUTPUT_TIME_POWERコマンド

どもです。 今回のエントリーでは、これまた前回に引き続き、モーターを動かすためのコマンドについて書

記事を読む

no image

C言語でEV3開発(7)

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

記事を読む

eclipse_4.3_kepler

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

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

記事を読む

google_test

C言語でEV3開発(6)

どもです。 今回のエントリーは、前回のエントリーの続き、google testでの単体テスト環境に

記事を読む

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="">

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

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

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

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

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

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

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

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

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

どもです。 前回のエントリでは、WindowsにRaspberryP

→もっと見る

PAGE TOP ↑