*

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

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

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

記事を読む

google_test_top

C言語でEV3開発(5)

どもです。 今回のエントリーは、前回のエントリーでちくっと触れた、「単体テスト」について、です。

記事を読む

no image

C言語でEV3開発(7)

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

記事を読む

no image

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします

記事を読む

no image

C言語でEV3開発(10)-opOUTPUT_CLEAR_COUNTコマンド

どもです。 前回のエントリーのラストで、「モーターを動かすコマンド」と書きましたが、今回紹介するコ

記事を読む

eclipse-juno-logo

C言語でEV3開発(2)

どもです。 今回のエントリーの内容は、前回に引き続き「EV3の開発環境の構築」の追記です。

記事を読む

eclipse_4.3_kepler

elicpse/CDTでのgdbでのソースを追従したデバッグができない問題

どもです。 今回のエントリーは、Eclipse上でgdbを利用したデバッグ中に発生する問題について

記事を読む

google_test

C言語でEV3開発(6)

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

記事を読む

no image

C言語でEV3開発(9)-opOUTPUT_SPEEDコマンド

どもです。 今回のエントリーでは、前回に引き続きEV3のモーターを動かしていきます。 ただし、単

記事を読む

no image

C言語でEV3開発(14)-opOUTPUT_TIME_SPEEDコマンド

どもです。 今回のエントリーは、モーターを動かすコマンドである「opOUTPUT_TIME_SPE

記事を読む

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

どもです。 今回は、TOPPERS/HRP2 EV3RT で作成した

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

どもです。 今回は、EV3 の環境をTOPPERS/HRP2 EV3

no image
C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて

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

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

eclipse_4.3_kepler
elicpse/CDTでのgdbでのソースを追従したデバッグができない問題

どもです。 今回のエントリーは、Eclipse上でgdbを利用したデ

→もっと見る

PAGE TOP ↑