
Example using semaphore in ISR
Dependencies: IHM_V2
Purpose: Simple application example with 1 thread triggered by a interrupt service routine (ISR) through a semaphore. Target: L432KC / Nboard (from IUT-Cachan) Tested: YES (2019-01-09) Author: Jacques-Olivier Klein - IUT de CACHAN Date: 2018-02-10 rev. 2019-01-09 OS_STACK_SIZE=4096 Libraries: mbed-os rev5345:c966348(03jan2019) + IHMV2 (from IUT-Cachan) rev6:ad91067
Revision 27:edb6c6685907, committed 2018-02-10
- Comitter:
- jacquesolivierklein
- Date:
- Sat Feb 10 20:57:06 2018 +0000
- Parent:
- 26:0b45eb26bd42
- Child:
- 28:be81ea276c3a
- Commit message:
- initial
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/IHM_V1.lib Sat Feb 10 20:57:06 2018 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/NBoard/code/IHM_V1/#a9e51ac904e2
--- a/README.md Wed Feb 15 10:00:05 2017 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -# Getting started with Blinky on mbed OS - -This is a very simple guide, reviewing the steps required to get Blinky working on an mbed OS platform. - -Please install [mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli). - -## Get the example application! - -From the command line, import the example: - -``` -mbed import mbed-os-example-blinky -cd mbed-os-example-blinky -``` - -### Now compile - -Invoke `mbed compile` specifying the name of your platform and your favorite toolchain (`GCC_ARM`, `ARM`, `IAR`). For example, for the ARM Compiler 5: - -``` -mbed compile -m K64F -t ARM -``` - -Your PC may take a few minutes to compile your code. At the end you should get the following result: - -``` -[snip] -+----------------------------+-------+-------+------+ -| Module | .text | .data | .bss | -+----------------------------+-------+-------+------+ -| Misc | 13939 | 24 | 1372 | -| core/hal | 16993 | 96 | 296 | -| core/rtos | 7384 | 92 | 4204 | -| features/FEATURE_IPV4 | 80 | 0 | 176 | -| frameworks/greentea-client | 1830 | 60 | 44 | -| frameworks/utest | 2392 | 512 | 292 | -| Subtotals | 42618 | 784 | 6384 | -+----------------------------+-------+-------+------+ -Allocated Heap: unknown -Allocated Stack: unknown -Total Static RAM memory (data + bss): 7168 bytes -Total RAM memory (data + bss + heap + stack): 7168 bytes -Total Flash memory (text + data + misc): 43402 bytes -Image: .\.build\K64F\ARM\mbed-os-example-blinky.bin -``` - -### Program your board - -1. Connect your mbed device to the computer over USB. -1. Copy the binary file to the mbed device . -1. Press the reset button to start the program. - -You should see the LED of your platform turning on and off. - -Congratulations if you managed to complete this test! - -## Export the project to Keil MDK and debug your application - -From the command line, run the following command: - -``` -mbed export -m K64F -i uvision -``` - -To debug the application: - -1. Start uVision. -1. Import the uVision project generated earlier. -1. Compile your application and generate an `.axf` file. -1. Make sure uVision is configured to debug over CMSIS-DAP (From the Project menu > Options for Target '...' > Debug tab > Use CMSIS-DAP Debugger). -1. Set breakpoints and start a debug session. - - - -## Troubleshooting - -1. Make sure `mbed-cli` is working correctly and its version is `>1.0.0` - - ``` - mbed --version - ``` - - If not, you can update it easily: - - ``` - pip install mbed-cli --upgrade - ``` - -2. If using Keil MDK, make sure you have a license installed. [MDK-Lite](http://www.keil.com/arm/mdk.asp) has a 32KB restriction on code size.
--- a/main.cpp Wed Feb 15 10:00:05 2017 +0000 +++ b/main.cpp Sat Feb 10 20:57:06 2018 +0000 @@ -1,13 +1,48 @@ +// Title : mbed-os-irq-semaphore +// Author: Jacques-Olivier Klein - IUT de CACHAN +// Date: 2018-02-10 + #include "mbed.h" +#include "IHM.h" -DigitalOut led1(LED1); +IHM ihm; + +DigitalOut L0 (PB_3) ; // led L0 +DigitalOut L1 (PA_7) ; // led L1 + +InterruptIn BP0_Interrupt(PA_9); + +void thread_Semaphore(); +void isrBP0 (); -// main() runs in its own thread in the OS -// (note the calls to wait below for delays) -int main() { - while (true) { - led1 = !led1; - wait(0.5); +Thread thread_waiting_for_semaphore (osPriorityNormal,DEFAULT_STACK_SIZE );; +Semaphore mysemaphore(0); + +int main(void) +{ ihm.LCD_clear(); + ihm.LCD_printf("irq-semaphore-%s %s",__DATE__,__TIME__); + printf("mbed-os-irq-semaphore-%s %s\n\r",__DATE__,__TIME__); + printf("DEFAULT_STACK_SIZE:%d\n\r", DEFAULT_STACK_SIZE); + + BP0_Interrupt.mode(PullUp); + thread_waiting_for_semaphore.start(thread_Semaphore); + BP0_Interrupt.fall(&isrBP0); + while(1){ + L0=!L0; + printf("* [pid-%d]Main \n\r",Thread::gettid()); + Thread::wait(200); } } +void isrBP0 (){ + mysemaphore.release(); +} + +void thread_Semaphore(){ + while(1){ + mysemaphore.wait(); + L1=!L1; + printf(" * [pid-%d]Main \n\r",Thread::gettid()); + } +} + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/readme.txt Sat Feb 10 20:57:06 2018 +0000 @@ -0,0 +1,10 @@ +Title : mbed-os-irq-semaphore + +Purpose: Simple application example with 1 thread +triggered by a irq through a semaphore. +Target: L432KC / Nboard (from IUT-Cachan) +Tested: yes +Author: Jacques-Olivier Klein - IUT de CACHAN +Date: 2018-02-10 +DEFAULT_STACK_SIZE=2048 +Libraries: mbed-os rev2741:bcf7085(26feb-2017) + IHMV1 (from IUT-Cachan) rev4:a9e51ac