*

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 側で実装済みだった、という話でした…。

関連記事

raspberry-pi

QtでRaspberryPi/GUI開発(7):pigpioを使用したチャタリング対策の問題

どもです。 前回のエントリーで、pigpioを使用したチャタリング対策について記載しました。 今

記事を読む

toppers

C言語でEV3開発(24)-APIの実行時間を測定してみた。

どもです。 今回、以前から気になっていた、開発環境/プラットフォームであるTOPPERS HRP2

記事を読む

toppers

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

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

記事を読む

google_test_top

C言語でEV3開発(5)

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

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。 前回のエントリーで、「

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(12)-gpioの状態をGUIに反映する

どもです。 今回は、gpioピンの状態(HIGH/LOW)の変化を画面上に即座に反映する方法につい

記事を読む

toppers

C言語でEV3開発(20)-超音波センサと安全状態

どもです。 前回は、BluetoothでPCとEv3を接続してコマンドの送受信について書きました。

記事を読む

raspberry-pi

QtでRaspberryPi/GUI開発(9)-SPI通信をしてみた

どもです。 えー。 「Qtで…」とか書いておきながら、今回はQtは出てきません。 今回のエ

記事を読む

source_trail_eye_catch

Sourcetrailを試してみました(2)-Eclipseと連携

どもです。 前回のエントリで、ソースコードを解析するオープンソース「Sourcetrail」を紹介

記事を読む

no image

QtでRaspberryPi/GUI開発(3):ためしに時計を作ってみた(其の参)-StyleSheetの適用

どもです。 前回のエントリーでは、グループ化されたボタンに対するイベントハンドラについて書きました

記事を読む

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

think_about_utest
VisualStudioで実行した単体テストの結果の出力(3)-テスト実行からレポート生成までをツールで自動化

どもです。 前々回、前回と、VisualStudio/C#での単

think_about_utest
VisualStudioで実行した単体テストの結果の出力(2)-出力ファイルの読める化

どもです。 前回の続きです。 前回は、VisualStud

think_about_utest
VisualStudioで実行した単体テストの結果の出力(1)-ファイルへの出力

どもです。 最近、VisualStudio/C#でよく開発してい

think_about_utest
単体テストの効率化を考える(6)-スタブの自動生成ツール

どもです。 「単体テストの効率化について考える」の6回目です。

think_about_utest
単体テストの効率化を考える(5)-スタブの自動生成への入力

どもです。 「単体テストの効率化について考える」の5回目です。

→もっと見る

PAGE TOP ↑