Signalling thread inside ISR .. delay observed to be 15 us

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by Siva ram

Committer:
Piasiv1206
Date:
Wed Oct 28 10:42:17 2015 +0000
Revision:
8:cfc8daeddc29
Parent:
7:80c659d94cdd
hello

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
emilmont 1:491820ee784d 2 #include "rtos.h"
emilmont 1:491820ee784d 3
emilmont 1:491820ee784d 4 DigitalOut led1(LED1);
emilmont 1:491820ee784d 5 DigitalOut led2(LED2);
Piasiv1206 7:80c659d94cdd 6 InterruptIn button(PTC12);
Piasiv1206 7:80c659d94cdd 7
Piasiv1206 7:80c659d94cdd 8 Thread *ptr_thread ;
Piasiv1206 7:80c659d94cdd 9 Thread *ptr_priya ;
Piasiv1206 7:80c659d94cdd 10 Thread *ptr_t_acs;
Piasiv1206 7:80c659d94cdd 11 Thread *ptr_t_bea;
Piasiv1206 7:80c659d94cdd 12 Thread *ptr_t_i2c;
Piasiv1206 7:80c659d94cdd 13 Thread *ptr_t_wdt;
Piasiv1206 7:80c659d94cdd 14
Piasiv1206 7:80c659d94cdd 15 Timer t ;
Piasiv1206 8:cfc8daeddc29 16 Timer P,pia,siv ;
Piasiv1206 7:80c659d94cdd 17 Serial pc(USBTX, USBRX); // tx, rx --> serial feedback for debug
Piasiv1206 7:80c659d94cdd 18
Piasiv1206 7:80c659d94cdd 19 void flip(void);
Piasiv1206 7:80c659d94cdd 20 void T_BAE(void const *args);
Piasiv1206 7:80c659d94cdd 21 void T_ACS(void const *args);
emilmont 1:491820ee784d 22
Piasiv1206 7:80c659d94cdd 23 //Thread thread1(led3_thread);
Piasiv1206 7:80c659d94cdd 24
Piasiv1206 7:80c659d94cdd 25 //Thread thread(led2_thread);
Piasiv1206 7:80c659d94cdd 26 // Thread Priya(led3_thread);
Piasiv1206 7:80c659d94cdd 27
Piasiv1206 7:80c659d94cdd 28
Piasiv1206 7:80c659d94cdd 29 void T_BAE(void const *args) {
emilmont 1:491820ee784d 30 while (true) {
Piasiv1206 7:80c659d94cdd 31 Thread::signal_wait(0x2);
Piasiv1206 7:80c659d94cdd 32 pia.stop();
Piasiv1206 7:80c659d94cdd 33 led1 = !led1;
Piasiv1206 7:80c659d94cdd 34 //Thread::wait(1000);
Piasiv1206 7:80c659d94cdd 35
emilmont 1:491820ee784d 36 }
emilmont 1:491820ee784d 37 }
emilmont 1:491820ee784d 38
Piasiv1206 7:80c659d94cdd 39
Piasiv1206 7:80c659d94cdd 40
Piasiv1206 7:80c659d94cdd 41
Piasiv1206 7:80c659d94cdd 42
Piasiv1206 7:80c659d94cdd 43
Piasiv1206 7:80c659d94cdd 44
emilmont 1:491820ee784d 45 int main() {
emilmont 1:491820ee784d 46
Piasiv1206 7:80c659d94cdd 47 ptr_t_acs = new Thread(T_ACS);
Piasiv1206 7:80c659d94cdd 48 ptr_t_bea = new Thread(T_BAE);
Piasiv1206 7:80c659d94cdd 49 ptr_t_bea->set_priority(osPriorityHigh);
Piasiv1206 7:80c659d94cdd 50 ptr_t_acs->set_priority(osPriorityAboveNormal);
Piasiv1206 7:80c659d94cdd 51 ptr_t_acs -> signal_set(0x1);
Piasiv1206 7:80c659d94cdd 52 button.rise(&flip);
emilmont 1:491820ee784d 53 while (true) {
Piasiv1206 7:80c659d94cdd 54
Piasiv1206 7:80c659d94cdd 55 P.start();
Piasiv1206 7:80c659d94cdd 56 wait_us(1000);
Piasiv1206 8:cfc8daeddc29 57 //led2 = !led2;
Piasiv1206 7:80c659d94cdd 58 P.stop();
Piasiv1206 7:80c659d94cdd 59
Piasiv1206 7:80c659d94cdd 60
Piasiv1206 7:80c659d94cdd 61 t.start();
Piasiv1206 7:80c659d94cdd 62 wait_us(500);
Piasiv1206 7:80c659d94cdd 63 t.stop();
Piasiv1206 8:cfc8daeddc29 64
Piasiv1206 8:cfc8daeddc29 65 siv.start();
Piasiv1206 8:cfc8daeddc29 66 wait_us(500);
Piasiv1206 8:cfc8daeddc29 67 //siv.stop();
Piasiv1206 8:cfc8daeddc29 68 pc.printf("Time Taken0 : %d \n\r",siv.read_us());
Piasiv1206 8:cfc8daeddc29 69
Piasiv1206 7:80c659d94cdd 70 //pia.start();
Piasiv1206 7:80c659d94cdd 71 //ptr_t_bea -> signal_set(0x2);
Piasiv1206 8:cfc8daeddc29 72 ptr_t_acs -> signal_set(0x1);
Piasiv1206 7:80c659d94cdd 73
Piasiv1206 7:80c659d94cdd 74 //thread.signal_set(0x1);
Piasiv1206 8:cfc8daeddc29 75 //set_priority(osPriorityAboveNormal);
Piasiv1206 8:cfc8daeddc29 76 pc.printf("Time Taken1 : %d \n\r",t.read_us());
Piasiv1206 7:80c659d94cdd 77 pc.printf("Time Taken2 : %d \n\r",P.read_us());
Piasiv1206 7:80c659d94cdd 78 pc.printf("Time Taken3 : %d \n\r",pia.read_us());
Piasiv1206 7:80c659d94cdd 79
Piasiv1206 7:80c659d94cdd 80 wait (5);
Piasiv1206 7:80c659d94cdd 81
Piasiv1206 7:80c659d94cdd 82 //time = t.read();
Piasiv1206 7:80c659d94cdd 83 t.reset();
Piasiv1206 7:80c659d94cdd 84 P.reset();
Piasiv1206 8:cfc8daeddc29 85 siv.reset();
Piasiv1206 7:80c659d94cdd 86 //pia.reset();
Piasiv1206 7:80c659d94cdd 87
Piasiv1206 8:cfc8daeddc29 88 pc.printf("Time Taken0(reset) : %d \n\r",siv.read_us());
Piasiv1206 8:cfc8daeddc29 89 pc.printf("Time Taken1(reset) : %d \n\r",t.read_us());
Piasiv1206 7:80c659d94cdd 90 pc.printf("Time Taken2(reset) : %d \n\r",P.read_us());
Piasiv1206 7:80c659d94cdd 91
Piasiv1206 7:80c659d94cdd 92
Piasiv1206 7:80c659d94cdd 93
Piasiv1206 7:80c659d94cdd 94
Piasiv1206 7:80c659d94cdd 95
Piasiv1206 7:80c659d94cdd 96
emilmont 1:491820ee784d 97 }
emilmont 1:491820ee784d 98 }
Piasiv1206 7:80c659d94cdd 99
Piasiv1206 7:80c659d94cdd 100 void flip(void) {
Piasiv1206 7:80c659d94cdd 101
Piasiv1206 7:80c659d94cdd 102 //Thread Priya(led3_thread);
Piasiv1206 7:80c659d94cdd 103 pia.reset();
Piasiv1206 7:80c659d94cdd 104 pia.start();
Piasiv1206 7:80c659d94cdd 105 ptr_t_bea -> signal_set(0x2);
Piasiv1206 7:80c659d94cdd 106 //led2 = !led2;
Piasiv1206 7:80c659d94cdd 107 }
Piasiv1206 7:80c659d94cdd 108
Piasiv1206 7:80c659d94cdd 109 void T_ACS (void const *args) {
Piasiv1206 7:80c659d94cdd 110 while (true) {
Piasiv1206 7:80c659d94cdd 111
Piasiv1206 7:80c659d94cdd 112 Thread::signal_wait(0x1);
Piasiv1206 8:cfc8daeddc29 113 //pc.printf("hello \r\n");
Piasiv1206 8:cfc8daeddc29 114 led2 = !led2;
Piasiv1206 8:cfc8daeddc29 115 Thread::wait(1000);
Piasiv1206 7:80c659d94cdd 116
Piasiv1206 7:80c659d94cdd 117 led2 = !led2;
Piasiv1206 8:cfc8daeddc29 118
Piasiv1206 8:cfc8daeddc29 119
Piasiv1206 7:80c659d94cdd 120
Piasiv1206 7:80c659d94cdd 121
Piasiv1206 7:80c659d94cdd 122 }
Piasiv1206 7:80c659d94cdd 123 }