mbed-dev-f303

Committer:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4
Date:
Tue Jun 14 09:21:18 2022 +0000
Revision:
0:bdf663c61a82
lib

Who changed what in which revision?

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