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:
123:58563e6cba1e
Parent:
121:3da5f554d8bf
Child:
125:5713cbbdb706
--- a/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c	Wed Nov 09 12:22:14 2016 -0600
+++ b/rtx/TARGET_CORTEX_M/RTX_Conf_CM.c	Mon Nov 14 17:14:42 2016 -0600
@@ -39,6 +39,9 @@
  *      RTX User configuration part BEGIN
  *---------------------------------------------------------------------------*/
 
+// Include per-target RTX config file
+#include "mbed_rtx.h"
+
 //-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
 //
 // <h>Thread Configuration
@@ -48,23 +51,7 @@
 //   <i> Defines max. number of user threads that will run at the same time.
 //   <i> Default: 6
 #ifndef OS_TASKCNT
-#  if   defined(TARGET_LPC1768) || defined(TARGET_LPC2368)   || defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM) || defined(TARGET_LPC4330) || defined(TARGET_LPC4337) || defined(TARGET_LPC1347) || defined(TARGET_K64F) || defined(TARGET_K66F)|| defined(TARGET_STM32F401RE)\
-   || defined(TARGET_STM32F410RB) || defined(TARGET_KL46Z) || defined(TARGET_KL43Z)  || defined(TARGET_STM32F407) || defined(TARGET_F407VG)  || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_LPC11U68) \
-   || defined(TARGET_STM32F411RE) || defined(TARGET_STM32F207ZG) || defined(TARGET_STM32F405RG) || defined(TARGET_K22F) || defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F401VC) || defined(TARGET_MAX32610) || defined(TARGET_MAX32600) || defined(TARGET_MAX32620) || defined(TARGET_TEENSY3_1) \
-   || defined(TARGET_STM32L152RE) || defined(TARGET_STM32F446RE) || defined(TARGET_STM32F446VE) || defined(TARGET_STM32F446ZE) || defined(TARGET_STM32L432KC) || defined(TARGET_STM32L476VG) || defined(TARGET_STM32L476RG) || defined(TARGET_STM32F469NI) || defined(TARGET_STM32F746NG) || defined(TARGET_STM32F746ZG) || defined(TARGET_STM32L152RC) \
-   || defined(TARGET_EFM32GG_STK3700) || defined(TARGET_EFM32WG_STK3800) || defined(TARGET_EFM32LG_STK3600) || defined(TARGET_EFM32PG_STK3401) || defined(TARGET_STM32F767ZI) \
-   || defined(TARGET_NUMAKER_PFM_NUC472) || defined(TARGET_NCS36510)
-#    define OS_TASKCNT         14
-#  elif defined(TARGET_LPC11U24) || defined(TARGET_STM32F303RE) || defined(TARGET_STM32F303K8) || defined(TARGET_LPC11U35_401)  || defined(TARGET_LPC11U35_501) || defined(TARGET_LPCCAPPUCCINO) || defined(TARGET_LPC1114) \
-   || defined(TARGET_LPC812)   || defined(TARGET_KL25Z)         || defined(TARGET_KL26Z)       || defined(TARGET_KL27Z)         || defined(TARGET_KL05Z)        || defined(TARGET_STM32F100RB)  || defined(TARGET_STM32F051R8) \
-   || defined(TARGET_STM32F103RB) || defined(TARGET_LPC824) || defined(TARGET_STM32F302R8) || defined(TARGET_STM32F334R8) || defined(TARGET_STM32F334C8) \
-   || defined(TARGET_STM32L031K6) || defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8) || defined(TARGET_STM32L073RZ) || defined(TARGET_STM32F072RB) || defined(TARGET_STM32F091RC) || defined(TARGET_NZ32_SC151) \
-   || defined(TARGET_SSCI824)  || defined(TARGET_STM32F030R8) || defined(TARGET_STM32F070RB) \
-   || defined(TARGET_EFM32HG_STK3400) || defined(TARGET_MCU_NRF51822) || defined(TARGET_BEETLE) || defined(TARGET_MCU_NRF52832)
-#    define OS_TASKCNT         6
-#  else
-#    error "no target defined"
-#  endif
+ #error "no target defined"
 #endif
 
 #ifdef __MBED_CMSIS_RTOS_CM
@@ -84,28 +71,7 @@
 
 //   <o>Main Thread stack size [bytes] <64-32768:8><#/4>
 #ifndef OS_MAINSTKSIZE
-#  if   defined(TARGET_LPC1768) || defined(TARGET_LPC2368)   || defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM) || defined(TARGET_LPC4330) || defined(TARGET_LPC4337) || defined(TARGET_LPC1347)  || defined(TARGET_K64F) || defined(TARGET_K66F) ||defined(TARGET_STM32F401RE)\
-   || defined(TARGET_STM32F410RB) || defined(TARGET_KL46Z) || defined(TARGET_KL43Z) || defined(TARGET_STM32F407) || defined(TARGET_F407VG)  || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_LPC11U68) \
-   || defined(TARGET_STM32F411RE) || defined(TARGET_STM32F405RG) || defined(TARGET_K22F) || defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F401VC) || defined(TARGET_MAX32610) || defined(TARGET_MAX32600) || defined(TARGET_MAX32620) || defined(TARGET_TEENSY3_1) \
-   || defined(TARGET_STM32L152RE) || defined(TARGET_STM32F446RE) || defined(TARGET_STM32F446VE) || defined(TARGET_STM32F446ZE) || defined(TARGET_STM32L432KC) || defined(TARGET_STM32L476VG) || defined(TARGET_STM32L476RG) || defined(TARGET_STM32F469NI) || defined(TARGET_STM32F746NG) || defined(TARGET_STM32F746ZG) || defined(TARGET_STM32L152RC) \
-   ||defined(TARGET_EFM32GG_STK3700) || defined(TARGET_STM32F767ZI) || defined(TARGET_STM32F207ZG) \
-   || defined(TARGET_NUMAKER_PFM_NUC472) || defined(TARGET_NCS36510)
-#      define OS_MAINSTKSIZE    256
-#  elif defined(TARGET_LPC11U24) || defined(TARGET_LPC11U35_401)  || defined(TARGET_LPC11U35_501) || defined(TARGET_LPCCAPPUCCINO)  || defined(TARGET_LPC1114) \
-   || defined(TARGET_LPC812)   || defined(TARGET_KL25Z)         || defined(TARGET_KL26Z)        || defined(TARGET_KL27Z)        || defined(TARGET_KL05Z)        || defined(TARGET_STM32F100RB)  || defined(TARGET_STM32F051R8) \
-   || defined(TARGET_STM32F103RB) || defined(TARGET_LPC824) || defined(TARGET_STM32F302R8) || defined(TARGET_STM32F072RB) || defined(TARGET_STM32F091RC) || defined(TARGET_NZ32_SC151) \
-   || defined(TARGET_SSCI824) || defined(TARGET_STM32F030R8) || defined(TARGET_STM32F070RB) \
-   || defined(TARGET_EFM32WG_STK3800) || defined(TARGET_EFM32LG_STK3600) || defined(TARGET_EFM32PG_STK3401)
-#      define OS_MAINSTKSIZE    128
-#  elif defined(TARGET_STM32F334R8) || defined(TARGET_STM32F303RE) ||  defined(TARGET_STM32F303K8) ||  defined(TARGET_STM32F334C8) \
-   || defined(TARGET_STM32L031K6) || defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8) || defined(TARGET_STM32L073RZ) \
-   || defined(TARGET_EFM32HG_STK3400) || defined(TARGET_BEETLE)
-#      define OS_MAINSTKSIZE    112
-#  elif defined(TARGET_MCU_NRF51822) ||  defined(TARGET_MCU_NRF52832)
-#      define OS_MAINSTKSIZE    512
-#  else
-#    error "no target defined"
-#  endif
+ #error "no target defined"
 #endif
 
 #ifndef __MBED_CMSIS_RTOS_CM
@@ -135,7 +101,11 @@
 //   <i> Initialize thread stack with watermark pattern for analyzing stack usage (current/maximum) in System and Thread Viewer.
 //   <i> Enabling this option increases significantly the execution time of osThreadCreate.
 #ifndef OS_STKINIT
-#define OS_STKINIT      0
+  #if (defined(MBED_STACK_STATS_ENABLED) && MBED_STACK_STATS_ENABLED)
+   #define OS_STKINIT   1
+  #else
+   #define OS_STKINIT   0
+  #endif
 #endif
 
 //   <o>Processor mode for thread execution
@@ -154,11 +124,7 @@
 //   <i> Cortex-M processors provide in most cases a SysTick timer that can be used as
 //   <i> as time-base for RTX.
 #ifndef OS_SYSTICK
-#   if defined(TARGET_MCU_NRF51822)
-#       define OS_SYSTICK                0
-#   else
-#       define OS_SYSTICK                1
-#   endif
+ #define OS_SYSTICK                1
 #endif
 //
 //   <o>RTOS Kernel Timer input clock frequency [Hz] <1-1000000000>
@@ -166,119 +132,7 @@
 //   <i> When the Cortex-M SysTick timer is used, the input clock
 //   <i> is on most systems identical with the core clock.
 #ifndef OS_CLOCK
-#  if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_TEENSY3_1)
-#    define OS_CLOCK       96000000
-
-#  elif defined(TARGET_LPC1347) || defined(TARGET_STM32F303VC) || defined(TARGET_LPC1549) || defined(TARGET_STM32F334R8) || defined(TARGET_STM32F334C8) || defined(TARGET_STM32F303RE)
-#    define OS_CLOCK       72000000
-
-#  elif defined(TARGET_STM32F303K8)
-#    define OS_CLOCK       64000000
-
-#  elif defined(TARGET_LPC11U24) || defined(TARGET_LPC11U35_401)  || defined(TARGET_LPC11U35_501) || defined(TARGET_LPCCAPPUCCINO)  || defined(TARGET_LPC1114) || defined(TARGET_KL25Z) \
-     || defined(TARGET_KL26Z) || defined(TARGET_KL27Z) || defined(TARGET_KL05Z) || defined(TARGET_KL46Z) || defined(TARGET_KL43Z) || defined(TARGET_STM32F051R8) || defined(TARGET_LPC11U68) || defined(TARGET_STM32F072RB) || defined(TARGET_STM32F091RC)
-#    define OS_CLOCK       48000000
-
-#  elif defined(TARGET_LPC812)
-#    define OS_CLOCK       36000000
-
-#  elif defined(TARGET_LPC824) || defined(TARGET_SSCI824)
-#    define OS_CLOCK       30000000
-
-#  elif  defined(TARGET_STM32F100RB) || defined(TARGET_BEETLE)
-#    define OS_CLOCK       24000000
-
-#  elif defined(TARGET_LPC4088) || defined(TARGET_LPC4088_DM) || defined(TARGET_K64F) || defined(TARGET_K66F)
-#    define OS_CLOCK       120000000
-
-#  elif defined(TARGET_LPC4330)
-#    define OS_CLOCK       204000000
-
-#  elif defined(TARGET_LPC4337)
-#    define OS_CLOCK       204000000
-
-#  elif defined(TARGET_STM32F407) || defined(TARGET_F407VG)
-#    define OS_CLOCK       168000000
-
-#  elif defined(TARGET_STM32F401RE)
-#    define OS_CLOCK       84000000
-
-#  elif defined(TARGET_STM32F411RE)
-#     define OS_CLOCK      100000000
-
-#  elif defined(TARGET_STM32F207ZG)
-#     define OS_CLOCK      120000000
-
-#  elif defined(TARGET_STM32F410RB)
-#     define OS_CLOCK      100000000
-
-#elif defined(TARGET_STM32F103RB)
-#    define OS_CLOCK       72000000
-
-#elif defined(TARGET_STM32F429ZI)
-#    define OS_CLOCK       168000000
-
-#elif defined(TARGET_STM32F302R8)
-#    define OS_CLOCK       72000000
-
-#elif defined(TARGET_STM32L031K6) || defined(TARGET_STM32L053R8) || defined(TARGET_STM32L053C8) || defined(TARGET_STM32L073RZ) 
-#    define OS_CLOCK       32000000
-
-#elif defined(TARGET_STM32F401VC)
-#    define OS_CLOCK       84000000
-
-#  elif defined(TARGET_STM32F746NG) || defined(TARGET_STM32F746ZG) || defined(TARGET_STM32F767ZI)
-#     define OS_CLOCK      216000000
-
-#elif defined(TARGET_MAX32610) || defined(TARGET_MAX32600)
-#    define OS_CLOCK       24000000
-
-#elif defined(TARGET_MAX32620)
-#    define OS_CLOCK       96000000
-
-#elif defined(TARGET_NZ32_SC151)
-#    define OS_CLOCK       32000000
-
-#elif defined(TARGET_STM32L152RE)
-#    define OS_CLOCK       24000000
-
-#elif defined(TARGET_STM32F446RE) || defined(TARGET_STM32F446ZE) || defined(TARGET_STM32F446VE)
-#    define OS_CLOCK       180000000
-
-#elif defined(TARGET_STM32F030R8)
-#    define OS_CLOCK       48000000
-
-#elif defined(TARGET_STM32F070RB)
-#    define OS_CLOCK       48000000
-
-#elif defined(TARGET_STM32L432KC) || defined(TARGET_STM32L476VG) || defined(TARGET_STM32L476RG) || defined(TARGET_K22F)
-#    define OS_CLOCK       80000000
-
-#elif defined(TARGET_STM32F469NI)
-#    define OS_CLOCK       168000000
-
-#elif defined(TARGET_STM32L152RC)
-#    define OS_CLOCK       24000000
-
-#elif defined(TARGET_EFM32)
-#    include "clocking.h"
-#    define OS_CLOCK       REFERENCE_FREQUENCY
-
-#elif defined(TARGET_MCU_NRF51822)
-#    define OS_CLOCK        32768
-
-#elif defined(TARGET_MCU_NRF52832)
-#    define OS_CLOCK        64000000
-
-#elif defined(TARGET_NUMAKER_PFM_NUC472)
-#    define OS_CLOCK       84000000
-
-#elif defined(TARGET_NCS36510)
-#    define OS_CLOCK       32000000
-
-#  else
-#    error "no target defined"
-#  endif
+ #error "no target defined"
 #endif
 
 //   <o>RTX Timer tick interval value [us] <1-1000000>
@@ -408,6 +262,15 @@
 }
 
 /*----------------------------------------------------------------------------
+ *      RTX Hooks
+ *---------------------------------------------------------------------------*/
+extern void thread_terminate_hook(osThreadId id);
+
+void sysThreadTerminate(osThreadId id) {
+    thread_terminate_hook(id);
+}
+
+/*----------------------------------------------------------------------------
  *      RTX Configuration Functions
  *---------------------------------------------------------------------------*/