APIはTOPPERS/EV3RThttp://dev.toppers.jp/trac_user/ev3pf/w ... 3%E3%82%B9を使用しており、このサイトをなんとか見ながらやっています。
今回はEv3で音を鳴らすプログラムをサンプルを参考に組んで見ました。
そこでわからない事が多数あるため質問させてもらいます。
1,static void button_clicked_handler(intptr_t button)と有りますがintptr_tとは何なのでしょうか。何かしら定義してるのは分かりますがAPIを参考にするサイトにもいまいちよく載っていません。
2,void main_task(intptr_t unused)と有りますがこれも1と同様(inptr_t unused)の意味が分かりません。
またこの文以下のプログラムではボタンについて書かれていますがここで記述しないといけない理由が分かりません。上のswitch文に組み込むことはできないのでしょうか?
マルチタスク処理で動いていると耳にした事が有りそれのせいなのでしょうか...分かりません。
3,app.h(2つめのコード)というものが有りそこではどうやら関数の宣言?定義?をしているようです。
このapp.hなるものは一体全体app.cのどの部分に影響して働きかけているのでしょうか?
長くなってしまいましたが、Ev3をいじった事がある方や分かる方などご回答頂けるととても勉強になります。よろしくお願いします。
//app.cメインプログラム
#include "ev3api.h"
#include "app.h"
#if defined(BUILD_MODULE)
#include "module_cfg.h"
#else
#include "kernel_cfg.h"
#endif
static void button_clicked_handler(intptr_t button) {
switch (button) {
case ENTER_BUTTON:
ev3_led_set_color( LED_RED );
ev3_lcd_draw_string("Now Playing",50,500);
ev3_speaker_play_tone(NOTE_E4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_E4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_F4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_G4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_G4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_F4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_E4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_D4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_C4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_C4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_D4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_E4, 500);
tslp_tsk(500);
ev3_speaker_play_tone(NOTE_D4, 500);
tslp_tsk(800);
ev3_speaker_play_tone(NOTE_C4, 500);
tslp_tsk(200);
ev3_speaker_play_tone(NOTE_C4, 500);
tslp_tsk(800);
break;
default:
break;
}
}
void main_task(intptr_t unused) {
//制御したいボタン、button_clicked_handlerが呼び出される、ENTER_BUTTONの時。
ev3_button_set_on_clicked(ENTER_BUTTON, button_clicked_handler, ENTER_BUTTON);
ev3_speaker_set_volume(5);
ev3_led_set_color( LED_OFF );
}
//app.h関数の宣言をするところらしい。
/*
* ターゲット依存の定義
*/
#include "target_test.h"
/*
* ターゲットに依存する可能性のある定数の定義
*/
#ifndef STACK_SIZE
#define STACK_SIZE 4096 /* タスクのスタックサイズ */
#endif /* STACK_SIZE */
/*
* 関数のプロトタイプ宣言
*/
#ifndef TOPPERS_MACRO_ONLY
//exinfとは制御したいボタンの事。
extern void main_task(intptr_t exinf);
#endif /* TOPPERS_MACRO_ONLY */