对比新文件 |
| | |
| | | /**************************************************************************//** |
| | | * @file cmsis_compiler.h |
| | | * @brief CMSIS compiler generic header file |
| | | * @version V5.1.0 |
| | | * @date 09. October 2018 |
| | | ******************************************************************************/ |
| | | /* |
| | | * Copyright (c) 2009-2018 Arm Limited. All rights reserved. |
| | | * |
| | | * SPDX-License-Identifier: Apache-2.0 |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the License); you may |
| | | * not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * |
| | | * www.apache.org/licenses/LICENSE-2.0 |
| | | * |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an AS IS BASIS, WITHOUT |
| | | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | */ |
| | | |
| | | #ifndef __CMSIS_COMPILER_H |
| | | #define __CMSIS_COMPILER_H |
| | | |
| | | #include <stdint.h> |
| | | |
| | | /* |
| | | * Arm Compiler 4/5 |
| | | */ |
| | | #if defined ( __CC_ARM ) |
| | | #include "cmsis_armcc.h" |
| | | |
| | | |
| | | /* |
| | | * Arm Compiler 6.6 LTM (armclang) |
| | | */ |
| | | #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) && (__ARMCC_VERSION < 6100100) |
| | | #include "cmsis_armclang_ltm.h" |
| | | |
| | | /* |
| | | * Arm Compiler above 6.10.1 (armclang) |
| | | */ |
| | | #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) |
| | | #include "cmsis_armclang.h" |
| | | |
| | | |
| | | /* |
| | | * GNU Compiler |
| | | */ |
| | | #elif defined ( __GNUC__ ) |
| | | #include "cmsis_gcc.h" |
| | | |
| | | |
| | | /* |
| | | * IAR Compiler |
| | | */ |
| | | #elif defined ( __ICCARM__ ) |
| | | #include <cmsis_iccarm.h> |
| | | |
| | | |
| | | /* |
| | | * TI Arm Compiler |
| | | */ |
| | | #elif defined ( __TI_ARM__ ) |
| | | #include <cmsis_ccs.h> |
| | | |
| | | #ifndef __ASM |
| | | #define __ASM __asm |
| | | #endif |
| | | #ifndef __INLINE |
| | | #define __INLINE inline |
| | | #endif |
| | | #ifndef __STATIC_INLINE |
| | | #define __STATIC_INLINE static inline |
| | | #endif |
| | | #ifndef __STATIC_FORCEINLINE |
| | | #define __STATIC_FORCEINLINE __STATIC_INLINE |
| | | #endif |
| | | #ifndef __NO_RETURN |
| | | #define __NO_RETURN __attribute__((noreturn)) |
| | | #endif |
| | | #ifndef __USED |
| | | #define __USED __attribute__((used)) |
| | | #endif |
| | | #ifndef __WEAK |
| | | #define __WEAK __attribute__((weak)) |
| | | #endif |
| | | #ifndef __PACKED |
| | | #define __PACKED __attribute__((packed)) |
| | | #endif |
| | | #ifndef __PACKED_STRUCT |
| | | #define __PACKED_STRUCT struct __attribute__((packed)) |
| | | #endif |
| | | #ifndef __PACKED_UNION |
| | | #define __PACKED_UNION union __attribute__((packed)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32 /* deprecated */ |
| | | struct __attribute__((packed)) T_UINT32 { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT16_WRITE |
| | | __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; |
| | | #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT16_READ |
| | | __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; |
| | | #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32_WRITE |
| | | __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32_READ |
| | | __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) |
| | | #endif |
| | | #ifndef __ALIGNED |
| | | #define __ALIGNED(x) __attribute__((aligned(x))) |
| | | #endif |
| | | #ifndef __RESTRICT |
| | | #define __RESTRICT __restrict |
| | | #endif |
| | | #ifndef __COMPILER_BARRIER |
| | | #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. |
| | | #define __COMPILER_BARRIER() (void)0 |
| | | #endif |
| | | |
| | | |
| | | /* |
| | | * TASKING Compiler |
| | | */ |
| | | #elif defined ( __TASKING__ ) |
| | | /* |
| | | * The CMSIS functions have been implemented as intrinsics in the compiler. |
| | | * Please use "carm -?i" to get an up to date list of all intrinsics, |
| | | * Including the CMSIS ones. |
| | | */ |
| | | |
| | | #ifndef __ASM |
| | | #define __ASM __asm |
| | | #endif |
| | | #ifndef __INLINE |
| | | #define __INLINE inline |
| | | #endif |
| | | #ifndef __STATIC_INLINE |
| | | #define __STATIC_INLINE static inline |
| | | #endif |
| | | #ifndef __STATIC_FORCEINLINE |
| | | #define __STATIC_FORCEINLINE __STATIC_INLINE |
| | | #endif |
| | | #ifndef __NO_RETURN |
| | | #define __NO_RETURN __attribute__((noreturn)) |
| | | #endif |
| | | #ifndef __USED |
| | | #define __USED __attribute__((used)) |
| | | #endif |
| | | #ifndef __WEAK |
| | | #define __WEAK __attribute__((weak)) |
| | | #endif |
| | | #ifndef __PACKED |
| | | #define __PACKED __packed__ |
| | | #endif |
| | | #ifndef __PACKED_STRUCT |
| | | #define __PACKED_STRUCT struct __packed__ |
| | | #endif |
| | | #ifndef __PACKED_UNION |
| | | #define __PACKED_UNION union __packed__ |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32 /* deprecated */ |
| | | struct __packed__ T_UINT32 { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT16_WRITE |
| | | __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; |
| | | #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT16_READ |
| | | __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; |
| | | #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32_WRITE |
| | | __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32_READ |
| | | __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) |
| | | #endif |
| | | #ifndef __ALIGNED |
| | | #define __ALIGNED(x) __align(x) |
| | | #endif |
| | | #ifndef __RESTRICT |
| | | #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. |
| | | #define __RESTRICT |
| | | #endif |
| | | #ifndef __COMPILER_BARRIER |
| | | #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. |
| | | #define __COMPILER_BARRIER() (void)0 |
| | | #endif |
| | | |
| | | |
| | | /* |
| | | * COSMIC Compiler |
| | | */ |
| | | #elif defined ( __CSMC__ ) |
| | | #include <cmsis_csm.h> |
| | | |
| | | #ifndef __ASM |
| | | #define __ASM _asm |
| | | #endif |
| | | #ifndef __INLINE |
| | | #define __INLINE inline |
| | | #endif |
| | | #ifndef __STATIC_INLINE |
| | | #define __STATIC_INLINE static inline |
| | | #endif |
| | | #ifndef __STATIC_FORCEINLINE |
| | | #define __STATIC_FORCEINLINE __STATIC_INLINE |
| | | #endif |
| | | #ifndef __NO_RETURN |
| | | // NO RETURN is automatically detected hence no warning here |
| | | #define __NO_RETURN |
| | | #endif |
| | | #ifndef __USED |
| | | #warning No compiler specific solution for __USED. __USED is ignored. |
| | | #define __USED |
| | | #endif |
| | | #ifndef __WEAK |
| | | #define __WEAK __weak |
| | | #endif |
| | | #ifndef __PACKED |
| | | #define __PACKED @packed |
| | | #endif |
| | | #ifndef __PACKED_STRUCT |
| | | #define __PACKED_STRUCT @packed struct |
| | | #endif |
| | | #ifndef __PACKED_UNION |
| | | #define __PACKED_UNION @packed union |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32 /* deprecated */ |
| | | @packed struct T_UINT32 { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT16_WRITE |
| | | __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; |
| | | #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT16_READ |
| | | __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; |
| | | #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32_WRITE |
| | | __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) |
| | | #endif |
| | | #ifndef __UNALIGNED_UINT32_READ |
| | | __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; |
| | | #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) |
| | | #endif |
| | | #ifndef __ALIGNED |
| | | #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. |
| | | #define __ALIGNED(x) |
| | | #endif |
| | | #ifndef __RESTRICT |
| | | #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. |
| | | #define __RESTRICT |
| | | #endif |
| | | #ifndef __COMPILER_BARRIER |
| | | #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. |
| | | #define __COMPILER_BARRIER() (void)0 |
| | | #endif |
| | | |
| | | |
| | | #else |
| | | #error Unknown compiler. |
| | | #endif |
| | | |
| | | |
| | | #endif /* __CMSIS_COMPILER_H */ |
| | | |