1 | /**************************************************************************//**
|
---|
2 | * @file cmsis_compiler.h
|
---|
3 | * @brief CMSIS compiler generic header file
|
---|
4 | * @version V5.0.4
|
---|
5 | * @date 10. January 2018
|
---|
6 | ******************************************************************************/
|
---|
7 | /*
|
---|
8 | * Copyright (c) 2009-2018 Arm Limited. All rights reserved.
|
---|
9 | *
|
---|
10 | * SPDX-License-Identifier: Apache-2.0
|
---|
11 | *
|
---|
12 | * Licensed under the Apache License, Version 2.0 (the License); you may
|
---|
13 | * not use this file except in compliance with the License.
|
---|
14 | * You may obtain a copy of the License at
|
---|
15 | *
|
---|
16 | * www.apache.org/licenses/LICENSE-2.0
|
---|
17 | *
|
---|
18 | * Unless required by applicable law or agreed to in writing, software
|
---|
19 | * distributed under the License is distributed on an AS IS BASIS, WITHOUT
|
---|
20 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
---|
21 | * See the License for the specific language governing permissions and
|
---|
22 | * limitations under the License.
|
---|
23 | */
|
---|
24 |
|
---|
25 | #ifndef __CMSIS_COMPILER_H
|
---|
26 | #define __CMSIS_COMPILER_H
|
---|
27 |
|
---|
28 | #include <stdint.h>
|
---|
29 |
|
---|
30 | /*
|
---|
31 | * Arm Compiler 4/5
|
---|
32 | */
|
---|
33 | #if defined ( __CC_ARM )
|
---|
34 | #include "cmsis_armcc.h"
|
---|
35 |
|
---|
36 |
|
---|
37 | /*
|
---|
38 | * Arm Compiler 6 (armclang)
|
---|
39 | */
|
---|
40 | #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
|
---|
41 | #include "cmsis_armclang.h"
|
---|
42 |
|
---|
43 |
|
---|
44 | /*
|
---|
45 | * GNU Compiler
|
---|
46 | */
|
---|
47 | #elif defined ( __GNUC__ )
|
---|
48 | #include "cmsis_gcc.h"
|
---|
49 |
|
---|
50 |
|
---|
51 | /*
|
---|
52 | * IAR Compiler
|
---|
53 | */
|
---|
54 | #elif defined ( __ICCARM__ )
|
---|
55 | #include <cmsis_iccarm.h>
|
---|
56 |
|
---|
57 |
|
---|
58 | /*
|
---|
59 | * TI Arm Compiler
|
---|
60 | */
|
---|
61 | #elif defined ( __TI_ARM__ )
|
---|
62 | #include <cmsis_ccs.h>
|
---|
63 |
|
---|
64 | #ifndef __ASM
|
---|
65 | #define __ASM __asm
|
---|
66 | #endif
|
---|
67 | #ifndef __INLINE
|
---|
68 | #define __INLINE inline
|
---|
69 | #endif
|
---|
70 | #ifndef __STATIC_INLINE
|
---|
71 | #define __STATIC_INLINE static inline
|
---|
72 | #endif
|
---|
73 | #ifndef __STATIC_FORCEINLINE
|
---|
74 | #define __STATIC_FORCEINLINE __STATIC_INLINE
|
---|
75 | #endif
|
---|
76 | #ifndef __NO_RETURN
|
---|
77 | #define __NO_RETURN __attribute__((noreturn))
|
---|
78 | #endif
|
---|
79 | #ifndef __USED
|
---|
80 | #define __USED __attribute__((used))
|
---|
81 | #endif
|
---|
82 | #ifndef __WEAK
|
---|
83 | #define __WEAK __attribute__((weak))
|
---|
84 | #endif
|
---|
85 | #ifndef __PACKED
|
---|
86 | #define __PACKED __attribute__((packed))
|
---|
87 | #endif
|
---|
88 | #ifndef __PACKED_STRUCT
|
---|
89 | #define __PACKED_STRUCT struct __attribute__((packed))
|
---|
90 | #endif
|
---|
91 | #ifndef __PACKED_UNION
|
---|
92 | #define __PACKED_UNION union __attribute__((packed))
|
---|
93 | #endif
|
---|
94 | #ifndef __UNALIGNED_UINT32 /* deprecated */
|
---|
95 | struct __attribute__((packed)) T_UINT32 { uint32_t v; };
|
---|
96 | #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
|
---|
97 | #endif
|
---|
98 | #ifndef __UNALIGNED_UINT16_WRITE
|
---|
99 | __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
|
---|
100 | #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
|
---|
101 | #endif
|
---|
102 | #ifndef __UNALIGNED_UINT16_READ
|
---|
103 | __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
|
---|
104 | #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
|
---|
105 | #endif
|
---|
106 | #ifndef __UNALIGNED_UINT32_WRITE
|
---|
107 | __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
|
---|
108 | #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
|
---|
109 | #endif
|
---|
110 | #ifndef __UNALIGNED_UINT32_READ
|
---|
111 | __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
|
---|
112 | #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
|
---|
113 | #endif
|
---|
114 | #ifndef __ALIGNED
|
---|
115 | #define __ALIGNED(x) __attribute__((aligned(x)))
|
---|
116 | #endif
|
---|
117 | #ifndef __RESTRICT
|
---|
118 | #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
|
---|
119 | #define __RESTRICT
|
---|
120 | #endif
|
---|
121 |
|
---|
122 |
|
---|
123 | /*
|
---|
124 | * TASKING Compiler
|
---|
125 | */
|
---|
126 | #elif defined ( __TASKING__ )
|
---|
127 | /*
|
---|
128 | * The CMSIS functions have been implemented as intrinsics in the compiler.
|
---|
129 | * Please use "carm -?i" to get an up to date list of all intrinsics,
|
---|
130 | * Including the CMSIS ones.
|
---|
131 | */
|
---|
132 |
|
---|
133 | #ifndef __ASM
|
---|
134 | #define __ASM __asm
|
---|
135 | #endif
|
---|
136 | #ifndef __INLINE
|
---|
137 | #define __INLINE inline
|
---|
138 | #endif
|
---|
139 | #ifndef __STATIC_INLINE
|
---|
140 | #define __STATIC_INLINE static inline
|
---|
141 | #endif
|
---|
142 | #ifndef __STATIC_FORCEINLINE
|
---|
143 | #define __STATIC_FORCEINLINE __STATIC_INLINE
|
---|
144 | #endif
|
---|
145 | #ifndef __NO_RETURN
|
---|
146 | #define __NO_RETURN __attribute__((noreturn))
|
---|
147 | #endif
|
---|
148 | #ifndef __USED
|
---|
149 | #define __USED __attribute__((used))
|
---|
150 | #endif
|
---|
151 | #ifndef __WEAK
|
---|
152 | #define __WEAK __attribute__((weak))
|
---|
153 | #endif
|
---|
154 | #ifndef __PACKED
|
---|
155 | #define __PACKED __packed__
|
---|
156 | #endif
|
---|
157 | #ifndef __PACKED_STRUCT
|
---|
158 | #define __PACKED_STRUCT struct __packed__
|
---|
159 | #endif
|
---|
160 | #ifndef __PACKED_UNION
|
---|
161 | #define __PACKED_UNION union __packed__
|
---|
162 | #endif
|
---|
163 | #ifndef __UNALIGNED_UINT32 /* deprecated */
|
---|
164 | struct __packed__ T_UINT32 { uint32_t v; };
|
---|
165 | #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
|
---|
166 | #endif
|
---|
167 | #ifndef __UNALIGNED_UINT16_WRITE
|
---|
168 | __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
|
---|
169 | #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
|
---|
170 | #endif
|
---|
171 | #ifndef __UNALIGNED_UINT16_READ
|
---|
172 | __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
|
---|
173 | #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
|
---|
174 | #endif
|
---|
175 | #ifndef __UNALIGNED_UINT32_WRITE
|
---|
176 | __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
|
---|
177 | #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
|
---|
178 | #endif
|
---|
179 | #ifndef __UNALIGNED_UINT32_READ
|
---|
180 | __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
|
---|
181 | #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
|
---|
182 | #endif
|
---|
183 | #ifndef __ALIGNED
|
---|
184 | #define __ALIGNED(x) __align(x)
|
---|
185 | #endif
|
---|
186 | #ifndef __RESTRICT
|
---|
187 | #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
|
---|
188 | #define __RESTRICT
|
---|
189 | #endif
|
---|
190 |
|
---|
191 |
|
---|
192 | /*
|
---|
193 | * COSMIC Compiler
|
---|
194 | */
|
---|
195 | #elif defined ( __CSMC__ )
|
---|
196 | #include <cmsis_csm.h>
|
---|
197 |
|
---|
198 | #ifndef __ASM
|
---|
199 | #define __ASM _asm
|
---|
200 | #endif
|
---|
201 | #ifndef __INLINE
|
---|
202 | #define __INLINE inline
|
---|
203 | #endif
|
---|
204 | #ifndef __STATIC_INLINE
|
---|
205 | #define __STATIC_INLINE static inline
|
---|
206 | #endif
|
---|
207 | #ifndef __STATIC_FORCEINLINE
|
---|
208 | #define __STATIC_FORCEINLINE __STATIC_INLINE
|
---|
209 | #endif
|
---|
210 | #ifndef __NO_RETURN
|
---|
211 | // NO RETURN is automatically detected hence no warning here
|
---|
212 | #define __NO_RETURN
|
---|
213 | #endif
|
---|
214 | #ifndef __USED
|
---|
215 | #warning No compiler specific solution for __USED. __USED is ignored.
|
---|
216 | #define __USED
|
---|
217 | #endif
|
---|
218 | #ifndef __WEAK
|
---|
219 | #define __WEAK __weak
|
---|
220 | #endif
|
---|
221 | #ifndef __PACKED
|
---|
222 | #define __PACKED @packed
|
---|
223 | #endif
|
---|
224 | #ifndef __PACKED_STRUCT
|
---|
225 | #define __PACKED_STRUCT @packed struct
|
---|
226 | #endif
|
---|
227 | #ifndef __PACKED_UNION
|
---|
228 | #define __PACKED_UNION @packed union
|
---|
229 | #endif
|
---|
230 | #ifndef __UNALIGNED_UINT32 /* deprecated */
|
---|
231 | @packed struct T_UINT32 { uint32_t v; };
|
---|
232 | #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
|
---|
233 | #endif
|
---|
234 | #ifndef __UNALIGNED_UINT16_WRITE
|
---|
235 | __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
|
---|
236 | #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
|
---|
237 | #endif
|
---|
238 | #ifndef __UNALIGNED_UINT16_READ
|
---|
239 | __PACKED_STRUCT T_UINT16_READ { uint16_t v; };
|
---|
240 | #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
|
---|
241 | #endif
|
---|
242 | #ifndef __UNALIGNED_UINT32_WRITE
|
---|
243 | __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
|
---|
244 | #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
|
---|
245 | #endif
|
---|
246 | #ifndef __UNALIGNED_UINT32_READ
|
---|
247 | __PACKED_STRUCT T_UINT32_READ { uint32_t v; };
|
---|
248 | #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
|
---|
249 | #endif
|
---|
250 | #ifndef __ALIGNED
|
---|
251 | #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
|
---|
252 | #define __ALIGNED(x)
|
---|
253 | #endif
|
---|
254 | #ifndef __RESTRICT
|
---|
255 | #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.
|
---|
256 | #define __RESTRICT
|
---|
257 | #endif
|
---|
258 |
|
---|
259 |
|
---|
260 | #else
|
---|
261 | #error Unknown compiler.
|
---|
262 | #endif
|
---|
263 |
|
---|
264 |
|
---|
265 | #endif /* __CMSIS_COMPILER_H */
|
---|
266 |
|
---|