Alex Whittemore
/
threadinterrupt
Simple program that demonstrates how one might send signals to arbitrary threads from an ISR.
Revision 0:32a3e697c11f, committed 2012-04-10
- Comitter:
- alexwhittemore
- Date:
- Tue Apr 10 13:26:44 2012 +0000
- Commit message:
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 32a3e697c11f main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Apr 10 13:26:44 2012 +0000 @@ -0,0 +1,37 @@ +#include "mbed.h" +#include "rtos.h" + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +Serial pc(USBTX,USBRX); + +Thread *LED_THREAD_POINTER; + +uint32_t UART_0_RBR; + +void UART0_ISR(){ + UART_0_RBR = LPC_UART0->RBR; // Clear the RBR flag to make sure the interrupt doesn't loop + led3=!led3; + (*LED_THREAD_POINTER).signal_set(0x1); // Dereference the LED_THREAD_POINTER then set the signal 0x1 flag of the thread it points to +} + +void led3blinker(void const *argument){ + while(true){ + Thread::signal_wait(0x1); + led2=!led2; + //Thread::wait(233); + } +} + +int main() { + Thread led3blinkerthread(led3blinker); + pc.attach(&UART0_ISR); + LED_THREAD_POINTER = &led3blinkerthread; // Set the globally-accessible thread pointer + + while(true){ + led1=!led1; + Thread::wait(1000); + led3blinkerthread.signal_set(0x1); + } +}
diff -r 000000000000 -r 32a3e697c11f mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Apr 10 13:26:44 2012 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/737756e0b479