Signalling thread inside ISR .. delay observed to be 15 us
Fork of rtos_basic by
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 00004 DigitalOut led1(LED1); 00005 DigitalOut led2(LED2); 00006 InterruptIn button(PTC12); 00007 00008 Thread *ptr_thread ; 00009 Thread *ptr_priya ; 00010 Thread *ptr_t_acs; 00011 Thread *ptr_t_bea; 00012 Thread *ptr_t_i2c; 00013 Thread *ptr_t_wdt; 00014 00015 Timer t ; 00016 Timer P,pia ; 00017 Serial pc(USBTX, USBRX); // tx, rx --> serial feedback for debug 00018 00019 void flip(void); 00020 void T_BAE(void const *args); 00021 void T_ACS(void const *args); 00022 00023 //Thread thread1(led3_thread); 00024 00025 //Thread thread(led2_thread); 00026 // Thread Priya(led3_thread); 00027 00028 00029 void T_BAE(void const *args) { 00030 while (true) { 00031 Thread::signal_wait(0x2); 00032 pia.stop(); 00033 led1 = !led1; 00034 //Thread::wait(1000); 00035 00036 } 00037 } 00038 00039 00040 00041 00042 00043 00044 00045 int main() { 00046 00047 ptr_t_acs = new Thread(T_ACS); 00048 ptr_t_bea = new Thread(T_BAE); 00049 ptr_t_bea->set_priority(osPriorityHigh); 00050 ptr_t_acs->set_priority(osPriorityAboveNormal); 00051 ptr_t_acs -> signal_set(0x1); 00052 button.rise(&flip); 00053 while (true) { 00054 00055 P.start(); 00056 wait_us(1000); 00057 led2 = !led2; 00058 P.stop(); 00059 00060 00061 t.start(); 00062 wait_us(500); 00063 t.stop(); 00064 //pia.start(); 00065 //ptr_t_bea -> signal_set(0x2); 00066 00067 //thread.signal_set(0x1); 00068 //Priya.set_priority(osPriorityAboveNormal); 00069 pc.printf("Time Taken : %d \n\r",t.read_us()); 00070 pc.printf("Time Taken2 : %d \n\r",P.read_us()); 00071 pc.printf("Time Taken3 : %d \n\r",pia.read_us()); 00072 00073 wait (5); 00074 00075 //time = t.read(); 00076 t.reset(); 00077 P.reset(); 00078 //pia.reset(); 00079 00080 00081 pc.printf("Time Taken(reset) : %d \n\r",t.read_us()); 00082 pc.printf("Time Taken2(reset) : %d \n\r",P.read_us()); 00083 00084 00085 00086 00087 00088 00089 } 00090 } 00091 00092 void flip(void) { 00093 00094 //Thread Priya(led3_thread); 00095 pia.reset(); 00096 pia.start(); 00097 ptr_t_bea -> signal_set(0x2); 00098 //led2 = !led2; 00099 } 00100 00101 void T_ACS (void const *args) { 00102 while (true) { 00103 00104 Thread::signal_wait(0x1); 00105 00106 00107 led2 = !led2; 00108 //Thread::wait(1000); 00109 00110 00111 } 00112 }
Generated on Thu Jul 21 2022 16:30:22 by 1.7.2