This is a sample to make sleep using OS.

Committer:
dkato
Date:
Fri Nov 18 10:39:33 2016 +0000
Revision:
2:22bc64c6ee90
Parent:
1:8ba32924482c
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:680321964ff9 1 #include "mbed.h"
dkato 0:680321964ff9 2 #include "rtos.h"
dkato 0:680321964ff9 3
dkato 0:680321964ff9 4 InterruptIn button(USER_BUTTON0);
dkato 0:680321964ff9 5 DigitalOut led1(LED1);
dkato 0:680321964ff9 6 Thread * pTestTask = NULL;
dkato 1:8ba32924482c 7
dkato 1:8ba32924482c 8 static void idle_hook(void) {
dkato 2:22bc64c6ee90 9 __WFI(); // Do not set when using SoftwareStandby.
dkato 1:8ba32924482c 10 }
dkato 0:680321964ff9 11
dkato 0:680321964ff9 12 static void interrupt_button(void) {
dkato 0:680321964ff9 13 if (pTestTask != NULL) {
dkato 0:680321964ff9 14 pTestTask->signal_set(1);
dkato 0:680321964ff9 15 }
dkato 0:680321964ff9 16 }
dkato 0:680321964ff9 17
dkato 0:680321964ff9 18 void test_task(void) {
dkato 0:680321964ff9 19 int test_cnt = 0;
dkato 0:680321964ff9 20
dkato 0:680321964ff9 21 button.fall(&interrupt_button);
dkato 0:680321964ff9 22 button.rise(&interrupt_button);
dkato 0:680321964ff9 23
dkato 0:680321964ff9 24 while (true) {
dkato 0:680321964ff9 25 // It becomes sleep during idle task.
dkato 0:680321964ff9 26 Thread::signal_wait(1);
dkato 0:680321964ff9 27 led1 = !led1;
dkato 0:680321964ff9 28 printf("%d\n", test_cnt++);
dkato 0:680321964ff9 29 }
dkato 0:680321964ff9 30 }
dkato 0:680321964ff9 31
dkato 0:680321964ff9 32 int main() {
dkato 1:8ba32924482c 33 Thread::attach_idle_hook(idle_hook);
dkato 0:680321964ff9 34 pTestTask = new Thread();
dkato 0:680321964ff9 35 pTestTask->start(test_task);
dkato 0:680321964ff9 36 }