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.
Diff: rtx/TARGET_CORTEX_A/RTX_CM_lib.h
- Revision:
- 119:19af2d39a542
- Parent:
- 118:6635230e06ba
- Child:
- 121:3da5f554d8bf
--- a/rtx/TARGET_CORTEX_A/RTX_CM_lib.h Mon Jul 25 14:12:24 2016 +0100 +++ b/rtx/TARGET_CORTEX_A/RTX_CM_lib.h Wed Aug 10 16:09:20 2016 +0100 @@ -33,6 +33,7 @@ *---------------------------------------------------------------------------*/ #if defined (__CC_ARM) +#include <rt_misc.h> #pragma O3 #define __USED __attribute__((used)) #elif defined (__GNUC__) @@ -224,6 +225,10 @@ uint32_t const *m_tmr = NULL; uint16_t const mp_tmr_size = 0; +/* singleton mutex */ +osMutexId singleton_mutex_id; +osMutexDef(singleton_mutex); + #if defined (__CC_ARM) && !defined (__MICROLIB) /* A memory space for arm standard library. */ static uint32_t std_libspace[OS_TASK_CNT][96/4]; @@ -433,6 +438,7 @@ void pre_main() { + singleton_mutex_id = osMutexCreate(osMutex(singleton_mutex)); $Super$$__cpp_initialize__aeabi_(); main(); } @@ -442,25 +448,13 @@ void * armcc_heap_base; void * armcc_heap_top; -__asm void pre_main (void) -{ - IMPORT __rt_lib_init - IMPORT main - IMPORT armcc_heap_base - IMPORT armcc_heap_top +int main(void); - LDR R0,=armcc_heap_base - LDR R1,=armcc_heap_top - LDR R0,[R0] - LDR R1,[R1] - /* Save link register (keep 8 byte alignment with dummy R4) */ - PUSH {R4, LR} - BL __rt_lib_init - BL main - /* Return to the thread destroy function. - */ - POP {R4, PC} - ALIGN +void pre_main (void) +{ + singleton_mutex_id = osMutexCreate(osMutex(singleton_mutex)); + __rt_lib_init((unsigned)armcc_heap_base, (unsigned)armcc_heap_top); + main(); } __asm void __rt_entry (void) { @@ -496,6 +490,7 @@ extern int main(int argc, char **argv); void pre_main(void) { + singleton_mutex_id = osMutexCreate(osMutex(singleton_mutex)); atexit(__libc_fini_array); __libc_init_array(); main(0, NULL); @@ -523,12 +518,16 @@ extern __weak void __iar_init_vfp( void ); extern void __iar_dynamic_initialization(void); extern void mbed_sdk_init(void); +extern void mbed_main(void); +extern int main(void); static uint8_t low_level_init_needed; void pre_main(void) { + singleton_mutex_id = osMutexCreate(osMutex(singleton_mutex)); if (low_level_init_needed) { __iar_dynamic_initialization(); } + mbed_main(); main(); }