inport from local

Dependents:   Hobbyking_Cheetah_0511

Committer:
NYX
Date:
Mon Mar 16 06:35:48 2020 +0000
Revision:
0:85b3fd62ea1a
reinport to mbed;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NYX 0:85b3fd62ea1a 1 /*
NYX 0:85b3fd62ea1a 2 * PackageLicenseDeclared: Apache-2.0
NYX 0:85b3fd62ea1a 3 * Copyright (c) 2017 ARM Limited
NYX 0:85b3fd62ea1a 4 *
NYX 0:85b3fd62ea1a 5 * Licensed under the Apache License, Version 2.0 (the "License");
NYX 0:85b3fd62ea1a 6 * you may not use this file except in compliance with the License.
NYX 0:85b3fd62ea1a 7 * You may obtain a copy of the License at
NYX 0:85b3fd62ea1a 8 *
NYX 0:85b3fd62ea1a 9 * http://www.apache.org/licenses/LICENSE-2.0
NYX 0:85b3fd62ea1a 10 *
NYX 0:85b3fd62ea1a 11 * Unless required by applicable law or agreed to in writing, software
NYX 0:85b3fd62ea1a 12 * distributed under the License is distributed on an "AS IS" BASIS,
NYX 0:85b3fd62ea1a 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
NYX 0:85b3fd62ea1a 14 * See the License for the specific language governing permissions and
NYX 0:85b3fd62ea1a 15 * limitations under the License.
NYX 0:85b3fd62ea1a 16 */
NYX 0:85b3fd62ea1a 17
NYX 0:85b3fd62ea1a 18 #ifndef MBED_CRITICALSECTIONLOCK_H
NYX 0:85b3fd62ea1a 19 #define MBED_CRITICALSECTIONLOCK_H
NYX 0:85b3fd62ea1a 20
NYX 0:85b3fd62ea1a 21 #include "platform/mbed_critical.h"
NYX 0:85b3fd62ea1a 22
NYX 0:85b3fd62ea1a 23 namespace mbed {
NYX 0:85b3fd62ea1a 24
NYX 0:85b3fd62ea1a 25 /** RAII object for disabling, then restoring, interrupt state
NYX 0:85b3fd62ea1a 26 * Usage:
NYX 0:85b3fd62ea1a 27 * @code
NYX 0:85b3fd62ea1a 28 *
NYX 0:85b3fd62ea1a 29 * void f() {
NYX 0:85b3fd62ea1a 30 * // some code here
NYX 0:85b3fd62ea1a 31 * {
NYX 0:85b3fd62ea1a 32 * CriticalSectionLock lock;
NYX 0:85b3fd62ea1a 33 * // Code in this block will run with interrupts disabled
NYX 0:85b3fd62ea1a 34 * }
NYX 0:85b3fd62ea1a 35 * // interrupts will be restored to their previous state
NYX 0:85b3fd62ea1a 36 * }
NYX 0:85b3fd62ea1a 37 * @endcode
NYX 0:85b3fd62ea1a 38 */
NYX 0:85b3fd62ea1a 39 class CriticalSectionLock {
NYX 0:85b3fd62ea1a 40 public:
NYX 0:85b3fd62ea1a 41 CriticalSectionLock()
NYX 0:85b3fd62ea1a 42 {
NYX 0:85b3fd62ea1a 43 core_util_critical_section_enter();
NYX 0:85b3fd62ea1a 44 }
NYX 0:85b3fd62ea1a 45
NYX 0:85b3fd62ea1a 46 ~CriticalSectionLock()
NYX 0:85b3fd62ea1a 47 {
NYX 0:85b3fd62ea1a 48 core_util_critical_section_exit();
NYX 0:85b3fd62ea1a 49 }
NYX 0:85b3fd62ea1a 50
NYX 0:85b3fd62ea1a 51 /** Mark the start of a critical section
NYX 0:85b3fd62ea1a 52 *
NYX 0:85b3fd62ea1a 53 */
NYX 0:85b3fd62ea1a 54 void lock()
NYX 0:85b3fd62ea1a 55 {
NYX 0:85b3fd62ea1a 56 core_util_critical_section_enter();
NYX 0:85b3fd62ea1a 57 }
NYX 0:85b3fd62ea1a 58
NYX 0:85b3fd62ea1a 59 /** Mark the end of a critical section
NYX 0:85b3fd62ea1a 60 *
NYX 0:85b3fd62ea1a 61 */
NYX 0:85b3fd62ea1a 62 void unlock()
NYX 0:85b3fd62ea1a 63 {
NYX 0:85b3fd62ea1a 64 core_util_critical_section_exit();
NYX 0:85b3fd62ea1a 65 }
NYX 0:85b3fd62ea1a 66 };
NYX 0:85b3fd62ea1a 67
NYX 0:85b3fd62ea1a 68
NYX 0:85b3fd62ea1a 69 } // namespace mbed
NYX 0:85b3fd62ea1a 70
NYX 0:85b3fd62ea1a 71 #endif