realtime process control with RTOS
Fork of mbed-os-example-mbed5-blinky by
Diff: main.cpp
- Revision:
- 21:967504024346
- Parent:
- 20:13fcc82f4cab
- Child:
- 22:f0164a2a09b0
--- a/main.cpp Tue Oct 02 03:04:57 2018 +0000 +++ b/main.cpp Thu Oct 04 02:05:55 2018 +0000 @@ -3,6 +3,7 @@ // // 20161027 ... v1.0 ... originally written by Y.Kuroda for Mechatronics // 20180917 ... v2.0 ... customised for Jikken1(mbed LPC1768専用) +// 20181004 ... v2.1 ... RtosTimer // #include "mbed.h" @@ -37,12 +38,16 @@ PwmOut squarewave(p23); PwmOut pulsewave(p24); +RtosTimer* rt; +Thread* thread_dt; // サンプリング処理スレッドを起動 + // サンプリング処理をするスレッド(時間管理された処理) void sampling_thread(const void* arg) { while(true){ Thread::signal_wait(SIG_MYT); // シグナルを待つ unsigned short a_data = ain.read_u16(); // AD入力(ADは12ビット) aout.write_u16((a_data>>qbits)<<qbits);// DA出力(量子化粒度はピンにより設定) + led4=0; } } @@ -65,6 +70,8 @@ pulsewave.period_ms(delta_t); // パルス波の周期の設定 squarewave.write(0.5F); // duty比 pulsewave.write(0.1F); // duty比 + rt->stop(); + rt->start(delta_t); } // デジタル入力割り込みハンドラ...デジタル入力信号の状態が変化した時に呼び出される @@ -73,12 +80,20 @@ led2 = din2; } +void rtos_catcher(void const* n) { + led4=1; + thread_dt->signal_set(SIG_MYT); // スレッドへ再開シグナルを送る +} + int main() { squarewave.period_ms(delta_t); // 初期周期の設定 pulsewave.period_ms(delta_t); // 初期周期の設定 squarewave.write(0.5F); // 初期duty比(方形波=50%) pulsewave.write(0.1F); // 初期duty比(パルス波=10%) + rt = new RtosTimer(rtos_catcher, osTimerPeriodic, (void*)0); + rt->start(delta_t); + samplingtime_MSB.rise(pinstate_handler);// 周期設定ハンドラの設定. samplingtime_MSB.fall(pinstate_handler);// 設定ピンの状態変化で samplingtime_LSB.rise(pinstate_handler);// ハンドラが呼び出される @@ -92,11 +107,11 @@ din2.rise(&din_handler); // が呼ばれる din2.fall(&din_handler); - Thread thread_dt(sampling_thread); // サンプリング処理スレッドを起動 + thread_dt = new Thread(sampling_thread); // サンプリング処理スレッドを起動 while(true){ Thread::wait(delta_t); // mainスレッドの時間間隔の設定[ms] - thread_dt.signal_set(SIG_MYT); // スレッドへ再開シグナルを送る - led4 = !led4; // 処理の先頭でLEDをを点滅 +// thread_dt.signal_set(SIG_MYT); // スレッドへ再開シグナルを送る +// led4 = !led4; // 処理の先頭でLEDをを点滅 } } \ No newline at end of file