RTC auf true
rtos/TARGET_CORTEX/mbed_rtos_rtx.c@0:38ceb79fef03, 2018-11-28 (annotated)
- Committer:
- kevman
- Date:
- Wed Nov 28 15:10:15 2018 +0000
- Revision:
- 0:38ceb79fef03
RTC modified
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kevman | 0:38ceb79fef03 | 1 | /* mbed Microcontroller Library |
kevman | 0:38ceb79fef03 | 2 | * Copyright (c) 2018-2018 ARM Limited |
kevman | 0:38ceb79fef03 | 3 | * |
kevman | 0:38ceb79fef03 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
kevman | 0:38ceb79fef03 | 5 | * you may not use this file except in compliance with the License. |
kevman | 0:38ceb79fef03 | 6 | * You may obtain a copy of the License at |
kevman | 0:38ceb79fef03 | 7 | * |
kevman | 0:38ceb79fef03 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
kevman | 0:38ceb79fef03 | 9 | * |
kevman | 0:38ceb79fef03 | 10 | * Unless required by applicable law or agreed to in writing, software |
kevman | 0:38ceb79fef03 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
kevman | 0:38ceb79fef03 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
kevman | 0:38ceb79fef03 | 13 | * See the License for the specific language governing permissions and |
kevman | 0:38ceb79fef03 | 14 | * limitations under the License. |
kevman | 0:38ceb79fef03 | 15 | */ |
kevman | 0:38ceb79fef03 | 16 | |
kevman | 0:38ceb79fef03 | 17 | #include "cmsis.h" |
kevman | 0:38ceb79fef03 | 18 | #include "mbed_rtx.h" |
kevman | 0:38ceb79fef03 | 19 | #include "mbed_rtos_storage.h" |
kevman | 0:38ceb79fef03 | 20 | #include "cmsis_os2.h" |
kevman | 0:38ceb79fef03 | 21 | #include "mbed_toolchain.h" |
kevman | 0:38ceb79fef03 | 22 | #include "mbed_error.h" |
kevman | 0:38ceb79fef03 | 23 | #include "mbed_critical.h" |
kevman | 0:38ceb79fef03 | 24 | #include "mbed_boot.h" |
kevman | 0:38ceb79fef03 | 25 | |
kevman | 0:38ceb79fef03 | 26 | osThreadAttr_t _main_thread_attr; |
kevman | 0:38ceb79fef03 | 27 | |
kevman | 0:38ceb79fef03 | 28 | #ifndef MBED_CONF_APP_MAIN_STACK_SIZE |
kevman | 0:38ceb79fef03 | 29 | #define MBED_CONF_APP_MAIN_STACK_SIZE MBED_CONF_RTOS_MAIN_THREAD_STACK_SIZE |
kevman | 0:38ceb79fef03 | 30 | #endif |
kevman | 0:38ceb79fef03 | 31 | MBED_ALIGN(8) char _main_stack[MBED_CONF_APP_MAIN_STACK_SIZE]; |
kevman | 0:38ceb79fef03 | 32 | mbed_rtos_storage_thread_t _main_obj; |
kevman | 0:38ceb79fef03 | 33 | |
kevman | 0:38ceb79fef03 | 34 | osMutexId_t singleton_mutex_id; |
kevman | 0:38ceb79fef03 | 35 | mbed_rtos_storage_mutex_t singleton_mutex_obj; |
kevman | 0:38ceb79fef03 | 36 | osMutexAttr_t singleton_mutex_attr; |
kevman | 0:38ceb79fef03 | 37 | |
kevman | 0:38ceb79fef03 | 38 | void mbed_rtos_init() |
kevman | 0:38ceb79fef03 | 39 | { |
kevman | 0:38ceb79fef03 | 40 | osKernelInitialize(); |
kevman | 0:38ceb79fef03 | 41 | } |
kevman | 0:38ceb79fef03 | 42 | |
kevman | 0:38ceb79fef03 | 43 | MBED_NORETURN void mbed_rtos_start() |
kevman | 0:38ceb79fef03 | 44 | { |
kevman | 0:38ceb79fef03 | 45 | singleton_mutex_attr.name = "singleton_mutex"; |
kevman | 0:38ceb79fef03 | 46 | singleton_mutex_attr.attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust; |
kevman | 0:38ceb79fef03 | 47 | singleton_mutex_attr.cb_size = sizeof(singleton_mutex_obj); |
kevman | 0:38ceb79fef03 | 48 | singleton_mutex_attr.cb_mem = &singleton_mutex_obj; |
kevman | 0:38ceb79fef03 | 49 | |
kevman | 0:38ceb79fef03 | 50 | _main_thread_attr.stack_mem = _main_stack; |
kevman | 0:38ceb79fef03 | 51 | _main_thread_attr.stack_size = sizeof(_main_stack); |
kevman | 0:38ceb79fef03 | 52 | _main_thread_attr.cb_size = sizeof(_main_obj); |
kevman | 0:38ceb79fef03 | 53 | _main_thread_attr.cb_mem = &_main_obj; |
kevman | 0:38ceb79fef03 | 54 | _main_thread_attr.priority = osPriorityNormal; |
kevman | 0:38ceb79fef03 | 55 | _main_thread_attr.name = "main_thread"; |
kevman | 0:38ceb79fef03 | 56 | |
kevman | 0:38ceb79fef03 | 57 | /* Allow non-secure main thread to call secure functions */ |
kevman | 0:38ceb79fef03 | 58 | #if defined(DOMAIN_NS) && (DOMAIN_NS == 1U) |
kevman | 0:38ceb79fef03 | 59 | _main_thread_attr.tz_module = 1U; |
kevman | 0:38ceb79fef03 | 60 | #endif |
kevman | 0:38ceb79fef03 | 61 | |
kevman | 0:38ceb79fef03 | 62 | singleton_mutex_id = osMutexNew(&singleton_mutex_attr); |
kevman | 0:38ceb79fef03 | 63 | osThreadId_t result = osThreadNew((osThreadFunc_t)mbed_start, NULL, &_main_thread_attr); |
kevman | 0:38ceb79fef03 | 64 | if ((void *)result == NULL) { |
kevman | 0:38ceb79fef03 | 65 | MBED_ERROR1(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_INITIALIZATION_FAILED), "Pre main thread not created", &_main_thread_attr); |
kevman | 0:38ceb79fef03 | 66 | } |
kevman | 0:38ceb79fef03 | 67 | |
kevman | 0:38ceb79fef03 | 68 | osKernelStart(); |
kevman | 0:38ceb79fef03 | 69 | MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_PLATFORM, MBED_ERROR_CODE_INITIALIZATION_FAILED), "Failed to start RTOS"); |
kevman | 0:38ceb79fef03 | 70 | while (1); // Code should never get here |
kevman | 0:38ceb79fef03 | 71 | } |