// ARM Mbed OS Tasking Test // Copyright (C)2019-2020, Philip Munts, President, Munts AM Corp. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. #include #include // Finite duration task -- periodically display "Hello, World" static void TaskHello(void) { unsigned i; for (i = 0; i < 10; i++) { printf("Hello, World\n"); ThisThread::sleep_for(2s); } } // Infinite duration task -- flash an LED static void TaskBlink(void) { DigitalOut led(LED1, false); for (;;) { led = !led; ThisThread::sleep_for(300ms); } } BufferedSerial UART(SERIAL_TX, SERIAL_RX, 115200); int main(void) { MUNTS::AppInfo::Banner("ARM Mbed OS Tasking Test"); // Start some subtasks Thread hello; Thread blink; hello.start(TaskHello); blink.start(TaskBlink); // Wait for finite duration substasks to finish hello.join(); printf("DEBUG: TaskHello() has terminated.\n"); // Terminate infinite duration subtasks and wait for them to finish blink.terminate(); blink.join(); printf("DEBUG: TaskBlink() has terminated.\n"); printf("END OF PROGRAM\n"); }