RTC auf true

Committer:
kevman
Date:
Wed Nov 28 15:10:15 2018 +0000
Revision:
0:38ceb79fef03
RTC modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kevman 0:38ceb79fef03 1 /*
kevman 0:38ceb79fef03 2 * PackageLicenseDeclared: Apache-2.0
kevman 0:38ceb79fef03 3 * Copyright (c) 2017 ARM Limited
kevman 0:38ceb79fef03 4 *
kevman 0:38ceb79fef03 5 * Licensed under the Apache License, Version 2.0 (the "License");
kevman 0:38ceb79fef03 6 * you may not use this file except in compliance with the License.
kevman 0:38ceb79fef03 7 * You may obtain a copy of the License at
kevman 0:38ceb79fef03 8 *
kevman 0:38ceb79fef03 9 * http://www.apache.org/licenses/LICENSE-2.0
kevman 0:38ceb79fef03 10 *
kevman 0:38ceb79fef03 11 * Unless required by applicable law or agreed to in writing, software
kevman 0:38ceb79fef03 12 * distributed under the License is distributed on an "AS IS" BASIS,
kevman 0:38ceb79fef03 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kevman 0:38ceb79fef03 14 * See the License for the specific language governing permissions and
kevman 0:38ceb79fef03 15 * limitations under the License.
kevman 0:38ceb79fef03 16 */
kevman 0:38ceb79fef03 17
kevman 0:38ceb79fef03 18 #ifndef MBED_CRITICALSECTIONLOCK_H
kevman 0:38ceb79fef03 19 #define MBED_CRITICALSECTIONLOCK_H
kevman 0:38ceb79fef03 20
kevman 0:38ceb79fef03 21 #include "platform/mbed_critical.h"
kevman 0:38ceb79fef03 22 #include "platform/mbed_toolchain.h"
kevman 0:38ceb79fef03 23
kevman 0:38ceb79fef03 24 namespace mbed {
kevman 0:38ceb79fef03 25
kevman 0:38ceb79fef03 26 /** \addtogroup platform */
kevman 0:38ceb79fef03 27 /** @{*/
kevman 0:38ceb79fef03 28 /**
kevman 0:38ceb79fef03 29 * \defgroup platform_CriticalSectionLock CriticalSectionLock functions
kevman 0:38ceb79fef03 30 * @{
kevman 0:38ceb79fef03 31 */
kevman 0:38ceb79fef03 32
kevman 0:38ceb79fef03 33 /** RAII object for disabling, then restoring, interrupt state
kevman 0:38ceb79fef03 34 * Usage:
kevman 0:38ceb79fef03 35 * @code
kevman 0:38ceb79fef03 36 *
kevman 0:38ceb79fef03 37 * // RAII style usage
kevman 0:38ceb79fef03 38 * unsigned int atomic_counter_increment(unsigned int &counter) {
kevman 0:38ceb79fef03 39 * CriticalSectionLock lock;
kevman 0:38ceb79fef03 40 * // Code in this block will run with interrupts disabled
kevman 0:38ceb79fef03 41 * // Interrupts will be restored to their previous state automatically
kevman 0:38ceb79fef03 42 * // at the end of function scope
kevman 0:38ceb79fef03 43 * return ++counter;
kevman 0:38ceb79fef03 44 * }
kevman 0:38ceb79fef03 45 *
kevman 0:38ceb79fef03 46 * // free locking usage
kevman 0:38ceb79fef03 47 * unsigned int atomic_counter_decrement(unsigned int &counter) {
kevman 0:38ceb79fef03 48 * CriticalSectionLock::enable();
kevman 0:38ceb79fef03 49 * // Code in this block will run with interrupts disabled
kevman 0:38ceb79fef03 50 * counter--;
kevman 0:38ceb79fef03 51 * CriticalSectionLock::disable(); // need explicitly to disable critical section lock
kevman 0:38ceb79fef03 52 * // interrupts will be restored to their previous state here
kevman 0:38ceb79fef03 53 * return counter;
kevman 0:38ceb79fef03 54 * }
kevman 0:38ceb79fef03 55 *
kevman 0:38ceb79fef03 56 * @endcode
kevman 0:38ceb79fef03 57 */
kevman 0:38ceb79fef03 58 class CriticalSectionLock {
kevman 0:38ceb79fef03 59 public:
kevman 0:38ceb79fef03 60 CriticalSectionLock()
kevman 0:38ceb79fef03 61 {
kevman 0:38ceb79fef03 62 core_util_critical_section_enter();
kevman 0:38ceb79fef03 63 }
kevman 0:38ceb79fef03 64
kevman 0:38ceb79fef03 65 ~CriticalSectionLock()
kevman 0:38ceb79fef03 66 {
kevman 0:38ceb79fef03 67 core_util_critical_section_exit();
kevman 0:38ceb79fef03 68 }
kevman 0:38ceb79fef03 69
kevman 0:38ceb79fef03 70 /** Mark the start of a critical section
kevman 0:38ceb79fef03 71 * @deprecated This function is inconsistent with RAII and is being removed in the future. Replaced by static function CriticalSectionLock::enable.
kevman 0:38ceb79fef03 72 *
kevman 0:38ceb79fef03 73 */
kevman 0:38ceb79fef03 74 MBED_DEPRECATED_SINCE("mbed-os-5.8",
kevman 0:38ceb79fef03 75 "This function is inconsistent with RAII and is being removed in the future."
kevman 0:38ceb79fef03 76 "Replaced by static function CriticalSectionLock::enable.")
kevman 0:38ceb79fef03 77 void lock()
kevman 0:38ceb79fef03 78 {
kevman 0:38ceb79fef03 79 core_util_critical_section_enter();
kevman 0:38ceb79fef03 80 }
kevman 0:38ceb79fef03 81
kevman 0:38ceb79fef03 82 /** Mark the end of a critical section
kevman 0:38ceb79fef03 83 * @deprecated This function is inconsistent with RAII and is being removed in the future. Replaced by static function CriticalSectionLock::enable.
kevman 0:38ceb79fef03 84 *
kevman 0:38ceb79fef03 85 */
kevman 0:38ceb79fef03 86 MBED_DEPRECATED_SINCE("mbed-os-5.8",
kevman 0:38ceb79fef03 87 "This function is inconsistent with RAII and is being removed in the future."
kevman 0:38ceb79fef03 88 "Replaced by static function CriticalSectionLock::disable.")
kevman 0:38ceb79fef03 89 void unlock()
kevman 0:38ceb79fef03 90 {
kevman 0:38ceb79fef03 91 core_util_critical_section_exit();
kevman 0:38ceb79fef03 92 }
kevman 0:38ceb79fef03 93
kevman 0:38ceb79fef03 94 /** Mark the start of a critical section
kevman 0:38ceb79fef03 95 */
kevman 0:38ceb79fef03 96 static void enable()
kevman 0:38ceb79fef03 97 {
kevman 0:38ceb79fef03 98 core_util_critical_section_enter();
kevman 0:38ceb79fef03 99 }
kevman 0:38ceb79fef03 100
kevman 0:38ceb79fef03 101 /** Mark the end of a critical section
kevman 0:38ceb79fef03 102 */
kevman 0:38ceb79fef03 103 static void disable()
kevman 0:38ceb79fef03 104 {
kevman 0:38ceb79fef03 105 core_util_critical_section_exit();
kevman 0:38ceb79fef03 106 }
kevman 0:38ceb79fef03 107 };
kevman 0:38ceb79fef03 108
kevman 0:38ceb79fef03 109 /**@}*/
kevman 0:38ceb79fef03 110
kevman 0:38ceb79fef03 111 /**@}*/
kevman 0:38ceb79fef03 112
kevman 0:38ceb79fef03 113 } // namespace mbed
kevman 0:38ceb79fef03 114
kevman 0:38ceb79fef03 115 #endif