Official mbed Real Time Operating System based on the RTX implementation of the CMSIS-RTOS API open standard.
Dependents: denki-yohou_b TestY201 Network-RTOS NTPClient_HelloWorld ... more
Deprecated
This is the mbed 2 rtos library. mbed OS 5 integrates the mbed library with mbed-rtos. With this, we have provided thread safety for all mbed APIs. If you'd like to learn about using mbed OS 5, please see the docs.
Revision 107:bdd541595fc5, committed 2016-03-15
- Comitter:
- mbed_official
- Date:
- Tue Mar 15 09:00:39 2016 +0000
- Parent:
- 106:dfc27975e193
- Child:
- 108:ac4f3830f9ff
- Commit message:
- Synchronized with git revision 3afb55095212c88fc1c17177348bc1e16259c1ca
Full URL: https://github.com/mbedmicro/mbed/commit/3afb55095212c88fc1c17177348bc1e16259c1ca/
[STM32F4] Add DEVICE_RTC_LSI=0 to all targets
Changed in this revision
--- a/rtos/Thread.cpp Wed Mar 02 11:30:15 2016 +0000
+++ b/rtos/Thread.cpp Tue Mar 15 09:00:39 2016 +0000
@@ -22,6 +22,7 @@
#include "Thread.h"
#include "mbed_error.h"
+#include "rtos_idle.h"
namespace rtos {
@@ -132,6 +133,10 @@
return osThreadGetId();
}
+void Thread::attach_idle_hook(void (*fptr)(void)) {
+ rtos_attach_idle_hook(fptr);
+}
+
Thread::~Thread() {
terminate();
if (_dynamic_stack) {
--- a/rtos/Thread.h Wed Mar 02 11:30:15 2016 +0000
+++ b/rtos/Thread.h Tue Mar 15 09:00:39 2016 +0000
@@ -131,6 +131,11 @@
@return thread ID for reference by other functions or NULL in case of error.
*/
static osThreadId gettid();
+
+ /** Attach a function to be called by the RTOS idle task
+ @param fptr pointer to the function to be called
+ */
+ static void attach_idle_hook(void (*fptr)(void));
virtual ~Thread();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rtos/rtos_idle.c Tue Mar 15 09:00:39 2016 +0000
@@ -0,0 +1,51 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2012 ARM Limited
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "rtos_idle.h"
+
+static void default_idle_hook(void)
+{
+ /* Sleep: ideally, we should put the chip to sleep.
+ Unfortunately, this usually requires disconnecting the interface chip (debugger).
+ This can be done, but it would break the local file system.
+ */
+ // sleep();
+}
+static void (*idle_hook_fptr)(void) = &default_idle_hook;
+
+void rtos_attach_idle_hook(void (*fptr)(void))
+{
+ //Attach the specified idle hook, or the default idle hook in case of a NULL pointer
+ if (fptr != NULL) {
+ idle_hook_fptr = fptr;
+ } else {
+ idle_hook_fptr = default_idle_hook;
+ }
+}
+
+void rtos_idle_loop(void)
+{
+ //Continuously call the idle hook function pointer
+ while (1) {
+ idle_hook_fptr();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rtos/rtos_idle.h Tue Mar 15 09:00:39 2016 +0000
@@ -0,0 +1,37 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2012 ARM Limited
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef RTOS_IDLE_H
+#define RTOS_IDLE_H
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void rtos_attach_idle_hook(void (*fptr)(void));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- a/rtx/TARGET_ARM7/RTX_Conf_CM.c Wed Mar 02 11:30:15 2016 +0000
+++ b/rtx/TARGET_ARM7/RTX_Conf_CM.c Tue Mar 15 09:00:39 2016 +0000
@@ -204,17 +204,12 @@
/*----------------------------------------------------------------------------
* OS Idle daemon
*---------------------------------------------------------------------------*/
-void os_idle_demon (void) {
- /* The idle demon is a system thread, running when no other thread is */
- /* ready to run. */
+extern void rtos_idle_loop(void);
- /* Sleep: ideally, we should put the chip to sleep.
- Unfortunately, this usually requires disconnecting the interface chip (debugger).
- This can be done, but it would break the local file system.
- */
- for (;;) {
- // sleep();
- }
+void os_idle_demon (void) {
+ /* The idle demon is a system thread, running when no other thread is */
+ /* ready to run. */
+ rtos_idle_loop();
}
/*----------------------------------------------------------------------------
--- a/rtx/TARGET_CORTEX_A/RTX_Conf_CA.c Wed Mar 02 11:30:15 2016 +0000
+++ b/rtx/TARGET_CORTEX_A/RTX_Conf_CA.c Tue Mar 15 09:00:39 2016 +0000
@@ -223,14 +223,12 @@
*---------------------------------------------------------------------------*/
/*--------------------------- os_idle_demon ---------------------------------*/
+extern void rtos_idle_loop(void);
void os_idle_demon (void) {
/* The idle demon is a system thread, running when no other thread is */
/* ready to run. */
-
- for (;;) {
- /* HERE: include optional user code to be executed when no thread runs.*/
- }
+ rtos_idle_loop();
}
#if (OS_SYSTICK == 0) // Functions for alternative timer as RTX kernel timer
--- a/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c Wed Mar 02 11:30:15 2016 +0000
+++ b/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c Tue Mar 15 09:00:39 2016 +0000
@@ -305,17 +305,12 @@
/*----------------------------------------------------------------------------
* OS Idle daemon
*---------------------------------------------------------------------------*/
-void os_idle_demon (void) {
- /* The idle demon is a system thread, running when no other thread is */
- /* ready to run. */
+extern void rtos_idle_loop(void);
- /* Sleep: ideally, we should put the chip to sleep.
- Unfortunately, this usually requires disconnecting the interface chip (debugger).
- This can be done, but it would break the local file system.
- */
- for (;;) {
- // sleep();
- }
+void os_idle_demon (void) {
+ /* The idle demon is a system thread, running when no other thread is */
+ /* ready to run. */
+ rtos_idle_loop();
}
/*----------------------------------------------------------------------------
mbed official




