Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed shimabara unzen_lpcxpresso_4337
Homepage
雲仙フレームワークにはデバッグ用のコールバックを登録することができます。
これらのコールバックはそれぞれ割り込み処理の前、割り込み処理の後、信号処理の前、信号処理の後に毎回読み出されるため、リアルタイムに進む時間計測をオシロスコープなどで観測することができます。
このアプリケーションは、それらのコールバックの宣言方法、使用方法を説明しています。
コールバックの宣言¶
デバッグ用コールバックは全てvoidを受け取り、voidを返すプロトタイプを持っています。これらはユーザー関数ですので名前は任意です。
コールバックの宣言
void pre_int_callback(void); void post_int_callback(void); void pre_process_callback(void); void post_process_callback(void);
コールバックの定義¶
デバッグ用コールバックは、割り込みコンテキストで呼び出されます。ですので、割り込みコンテキストでやってもいい処理ならば、何をしてもかまいません。
今回の例ではデバッグ用の信号ピンをトグルしています。すなわち、割り込みの入り口で1にし、出口で0に戻しています。
コールバックの定義
void pre_int_callback(void)
{
debug_flag_1 = 1;
}
void post_int_callback(void)
{
debug_flag_1 = 0;
}
void pre_process_callback(void)
{
debug_flag_2= 1;
}
void post_process_callback(void)
{
debug_flag_2 = 0;
}
コールバックの登録¶
デバッグ用コールバックの登録メソッドがフレームワークに用意されています。これらの登録は、start()メソッドの呼び出しよりも前にしなければなりません。
コールバックの登録
// debug call back registration
audio.set_pre_interrupt_callback( pre_int_callback );
audio.set_post_interrupt_callback( post_int_callback );
audio.set_pre_process_callback( pre_process_callback );
audio.set_post_process_callback( post_process_callback );
set_pre_interrupt_callback() および set_post_interrupt_callback() で登録されたデバッグ用コールバックは、I2S割り込みの前後でそれぞれ呼び出されます。そのため、デバッグピンをトグルすれば、割り込み処理ルーチンの実行時間を知ることができます。
set_pre_process_callback() および set_post_process_callback() で登録されたデバッグ用コールバックは、信号処理コールバックの前後でそれぞれ呼び出されます。そのため、デバッグピンをトグルすれば、信号処理ルーチンの実行時間を知ることができます。
波形観測¶
このサンプルを実行した結果をオシロスコープで測定しました。割り込みハンドラの処理終了に続いて、信号処理コールバックが実行されていることがわかります。