Marco Zecchini
/
Example_RTOS
Rtos API example
Embed:
(wiki syntax)
Show/hide line numbers
arm_hal_interrupt.c
00001 /* 00002 * Copyright (c) 2016 ARM Limited, All Rights Reserved 00003 */ 00004 00005 #include "arm_hal_interrupt.h" 00006 #include "arm_hal_interrupt_private.h" 00007 #include "cmsis_os2.h" 00008 #include "mbed_rtos_storage.h" 00009 #include <mbed_assert.h> 00010 00011 static uint8_t sys_irq_disable_counter; 00012 00013 static mbed_rtos_storage_mutex_t critical_mutex; 00014 static const osMutexAttr_t critical_mutex_attr = { 00015 .name = "nanostack_critical_mutex", 00016 .attr_bits = osMutexRecursive | osMutexPrioInherit | osMutexRobust, 00017 .cb_mem = &critical_mutex, 00018 .cb_size = sizeof critical_mutex, 00019 }; 00020 static osMutexId_t critical_mutex_id; 00021 00022 void platform_critical_init(void) 00023 { 00024 critical_mutex_id = osMutexNew(&critical_mutex_attr); 00025 MBED_ASSERT(critical_mutex_id); 00026 } 00027 00028 void platform_enter_critical(void) 00029 { 00030 osMutexAcquire(critical_mutex_id, osWaitForever); 00031 sys_irq_disable_counter++; 00032 } 00033 00034 void platform_exit_critical(void) 00035 { 00036 --sys_irq_disable_counter; 00037 osMutexRelease(critical_mutex_id); 00038 }
Generated on Sun Jul 17 2022 08:25:19 by 1.7.2