For CQ LPC1U35 board. Multitask scheduler demo project.,arduino,due,compatible
Fork of scheduler-demo by
Diff: led_tsk.cpp
- Revision:
- 1:48a906a94c32
- Parent:
- 0:79e298c7d4b9
diff -r 79e298c7d4b9 -r 48a906a94c32 led_tsk.cpp --- a/led_tsk.cpp Sun Aug 25 10:28:46 2013 +0000 +++ b/led_tsk.cpp Fri Mar 07 14:37:12 2014 +0000 @@ -1,6 +1,7 @@ /* # -# Copyright (C) 2010-2013, audin +# Copyright (C) 2010-2014, audin +# 2014/02: Modify for mbed for CQ LPC11U35 # 2013/08: Modify for mbed for LPC1114FN28 # 2013/07: Modify for LPCOpen Platform. # 2011/04, 2012/11 @@ -14,60 +15,43 @@ #include "led_tsk.h" #include "Scheduler.h" -static int max_val = 0; -static int val = 0; -#define sio_get_led_blink_speed() 9 /* fixed preiod */ -/* for CQ MyARM ,lpc1114fn28 */ -DigitalOut led1(LED1); -DigitalOut led2(LED2); +/* for CQ ,lpc11u35 */ +DigitalOut led1(P0_20); +DigitalOut led2(P0_21); + #define led1_on() led1=0 /* Negative on */ #define led1_off() led1=1 -#define led2_on() led2=1 -#define led2_off() led2=0 - -/******************* - -* LED1 init - - *******************/ -void led_init(void) -{ - led1_off(); /* first off */ -} +#define led2_on() led2=0 /* Negative on */ +#define led2_off() led2=1 /******************* -* Fake PWM +* Fake PWM class *******************/ -static void pwm( int ms ) +static void pwm_elm( int ms, int max_ms, DigitalOut *led ) { - led1_on(); + *led=0; // negative on taskWait( ms ); - led1_off(); - taskWait( max_val - val); + *led=1; + taskWait( max_ms - ms); } -/******************* - -* LED task - - *******************/ -void led_task( void) +class pwm_fake_t { - led_tsk( (void *)0 ); /* Just stub */ -} - -void led_tsk( void *pvParameters ) -{ - ( void ) pvParameters; // not used - led_init(); - const int MIN_VAL = 0; - static int dir = 1; - while( 1 ) { + int max_val, val, MIN_VAL, dir, speed; + DigitalOut *led; +public: + pwm_fake_t(DigitalOut *_led, int _speed) { + max_val = speed = _speed; + val = MIN_VAL = 0; + dir =1; + led = _led; + } + void run() { if( ( val >= max_val) || ( val <= MIN_VAL) ) { - max_val = sio_get_led_blink_speed() + 3 ; // change period + max_val = speed;//sio_get_led_blink_speed() + 3 ; // change period max_val <<= 1; // adjust time if( val <= MIN_VAL ) { dir = 1; @@ -78,28 +62,36 @@ } } val += dir; - pwm( val ); + pwm_elm( val, max_val, led ); + } +}; + +/******************* + +* LED1 task + + *******************/ +void led1_task( void ) +{ + led1_off(); + pwm_fake_t pwm_led( &led1, 10+3); + while( 1 ) { + pwm_led.run(); } } /******************* -* LED2 init +* LED2 task *******************/ -void led2_init(void) -{ - led2_off(); /* first off */ -} - void led2_task( void ) { - led2_init(); + led2_off(); + taskWait( 666 ); + pwm_fake_t pwm_led( &led2, 6+3); while( 1 ) { - led2_on(); - taskWait(2000); - led2_off(); - taskWait(2000); + pwm_led.run(); } }