Nothing Special / mbed-STM32F103C8

Fork of mbed-STM32F103C8_org by Nothing Special

Committer:
mega64
Date:
Thu Mar 16 06:15:53 2017 +0000
Revision:
146:03e976389d16
fully rebuild, now based on mbed-dev v160

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mega64 146:03e976389d16 1
mega64 146:03e976389d16 2 /** \addtogroup platform */
mega64 146:03e976389d16 3 /** @{*/
mega64 146:03e976389d16 4 /* mbed Microcontroller Library
mega64 146:03e976389d16 5 * Copyright (c) 2006-2013 ARM Limited
mega64 146:03e976389d16 6 *
mega64 146:03e976389d16 7 * Licensed under the Apache License, Version 2.0 (the "License");
mega64 146:03e976389d16 8 * you may not use this file except in compliance with the License.
mega64 146:03e976389d16 9 * You may obtain a copy of the License at
mega64 146:03e976389d16 10 *
mega64 146:03e976389d16 11 * http://www.apache.org/licenses/LICENSE-2.0
mega64 146:03e976389d16 12 *
mega64 146:03e976389d16 13 * Unless required by applicable law or agreed to in writing, software
mega64 146:03e976389d16 14 * distributed under the License is distributed on an "AS IS" BASIS,
mega64 146:03e976389d16 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mega64 146:03e976389d16 16 * See the License for the specific language governing permissions and
mega64 146:03e976389d16 17 * limitations under the License.
mega64 146:03e976389d16 18 */
mega64 146:03e976389d16 19 #ifndef MBED_TOOLCHAIN_H
mega64 146:03e976389d16 20 #define MBED_TOOLCHAIN_H
mega64 146:03e976389d16 21
mega64 146:03e976389d16 22 #include "mbed_preprocessor.h"
mega64 146:03e976389d16 23
mega64 146:03e976389d16 24
mega64 146:03e976389d16 25 // Warning for unsupported compilers
mega64 146:03e976389d16 26 #if !defined(__GNUC__) /* GCC */ \
mega64 146:03e976389d16 27 && !defined(__CC_ARM) /* ARMCC */ \
mega64 146:03e976389d16 28 && !defined(__clang__) /* LLVM/Clang */ \
mega64 146:03e976389d16 29 && !defined(__ICCARM__) /* IAR */
mega64 146:03e976389d16 30 #warning "This compiler is not yet supported."
mega64 146:03e976389d16 31 #endif
mega64 146:03e976389d16 32
mega64 146:03e976389d16 33
mega64 146:03e976389d16 34 // Attributes
mega64 146:03e976389d16 35
mega64 146:03e976389d16 36 /** MBED_PACKED
mega64 146:03e976389d16 37 * Pack a structure, preventing any padding from being added between fields.
mega64 146:03e976389d16 38 *
mega64 146:03e976389d16 39 * @code
mega64 146:03e976389d16 40 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 41 *
mega64 146:03e976389d16 42 * MBED_PACKED(struct) foo {
mega64 146:03e976389d16 43 * char x;
mega64 146:03e976389d16 44 * int y;
mega64 146:03e976389d16 45 * };
mega64 146:03e976389d16 46 * @endcode
mega64 146:03e976389d16 47 */
mega64 146:03e976389d16 48 #ifndef MBED_PACKED
mega64 146:03e976389d16 49 #if defined(__ICCARM__)
mega64 146:03e976389d16 50 #define MBED_PACKED(struct) __packed struct
mega64 146:03e976389d16 51 #else
mega64 146:03e976389d16 52 #define MBED_PACKED(struct) struct __attribute__((packed))
mega64 146:03e976389d16 53 #endif
mega64 146:03e976389d16 54 #endif
mega64 146:03e976389d16 55
mega64 146:03e976389d16 56 /** MBED_ALIGN(N)
mega64 146:03e976389d16 57 * Declare a variable to be aligned on an N-byte boundary.
mega64 146:03e976389d16 58 *
mega64 146:03e976389d16 59 * @note
mega64 146:03e976389d16 60 * IAR does not support alignment greater than word size on the stack
mega64 146:03e976389d16 61 *
mega64 146:03e976389d16 62 * @code
mega64 146:03e976389d16 63 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 64 *
mega64 146:03e976389d16 65 * MBED_ALIGN(16) char a;
mega64 146:03e976389d16 66 * @endcode
mega64 146:03e976389d16 67 */
mega64 146:03e976389d16 68 #ifndef MBED_ALIGN
mega64 146:03e976389d16 69 #if defined(__ICCARM__)
mega64 146:03e976389d16 70 #define MBED_ALIGN(N) _Pragma(MBED_STRINGIFY(data_alignment=N))
mega64 146:03e976389d16 71 #else
mega64 146:03e976389d16 72 #define MBED_ALIGN(N) __attribute__((aligned(N)))
mega64 146:03e976389d16 73 #endif
mega64 146:03e976389d16 74 #endif
mega64 146:03e976389d16 75
mega64 146:03e976389d16 76 /** MBED_UNUSED
mega64 146:03e976389d16 77 * Declare a function argument to be unused, suppressing compiler warnings
mega64 146:03e976389d16 78 *
mega64 146:03e976389d16 79 * @code
mega64 146:03e976389d16 80 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 81 *
mega64 146:03e976389d16 82 * void foo(MBED_UNUSED int arg) {
mega64 146:03e976389d16 83 *
mega64 146:03e976389d16 84 * }
mega64 146:03e976389d16 85 * @endcode
mega64 146:03e976389d16 86 */
mega64 146:03e976389d16 87 #ifndef MBED_UNUSED
mega64 146:03e976389d16 88 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 89 #define MBED_UNUSED __attribute__((__unused__))
mega64 146:03e976389d16 90 #else
mega64 146:03e976389d16 91 #define MBED_UNUSED
mega64 146:03e976389d16 92 #endif
mega64 146:03e976389d16 93 #endif
mega64 146:03e976389d16 94
mega64 146:03e976389d16 95 /** MBED_WEAK
mega64 146:03e976389d16 96 * Mark a function as being weak.
mega64 146:03e976389d16 97 *
mega64 146:03e976389d16 98 * @note
mega64 146:03e976389d16 99 * weak functions are not friendly to making code re-usable, as they can only
mega64 146:03e976389d16 100 * be overridden once (and if they are multiply overridden the linker will emit
mega64 146:03e976389d16 101 * no warning). You should not normally use weak symbols as part of the API to
mega64 146:03e976389d16 102 * re-usable modules.
mega64 146:03e976389d16 103 *
mega64 146:03e976389d16 104 * @code
mega64 146:03e976389d16 105 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 106 *
mega64 146:03e976389d16 107 * MBED_WEAK void foo() {
mega64 146:03e976389d16 108 * // a weak implementation of foo that can be overriden by a definition
mega64 146:03e976389d16 109 * // without __weak
mega64 146:03e976389d16 110 * }
mega64 146:03e976389d16 111 * @endcode
mega64 146:03e976389d16 112 */
mega64 146:03e976389d16 113 #ifndef MBED_WEAK
mega64 146:03e976389d16 114 #if defined(__ICCARM__)
mega64 146:03e976389d16 115 #define MBED_WEAK __weak
mega64 146:03e976389d16 116 #else
mega64 146:03e976389d16 117 #define MBED_WEAK __attribute__((weak))
mega64 146:03e976389d16 118 #endif
mega64 146:03e976389d16 119 #endif
mega64 146:03e976389d16 120
mega64 146:03e976389d16 121 /** MBED_PURE
mega64 146:03e976389d16 122 * Hint to the compiler that a function depends only on parameters
mega64 146:03e976389d16 123 *
mega64 146:03e976389d16 124 * @code
mega64 146:03e976389d16 125 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 126 *
mega64 146:03e976389d16 127 * MBED_PURE int foo(int arg){
mega64 146:03e976389d16 128 * // no access to global variables
mega64 146:03e976389d16 129 * }
mega64 146:03e976389d16 130 * @endcode
mega64 146:03e976389d16 131 */
mega64 146:03e976389d16 132 #ifndef MBED_PURE
mega64 146:03e976389d16 133 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 134 #define MBED_PURE __attribute__((const))
mega64 146:03e976389d16 135 #else
mega64 146:03e976389d16 136 #define MBED_PURE
mega64 146:03e976389d16 137 #endif
mega64 146:03e976389d16 138 #endif
mega64 146:03e976389d16 139
mega64 146:03e976389d16 140 /** MBED_FORCEINLINE
mega64 146:03e976389d16 141 * Declare a function that must always be inlined. Failure to inline
mega64 146:03e976389d16 142 * such a function will result in an error.
mega64 146:03e976389d16 143 *
mega64 146:03e976389d16 144 * @code
mega64 146:03e976389d16 145 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 146 *
mega64 146:03e976389d16 147 * MBED_FORCEINLINE void foo() {
mega64 146:03e976389d16 148 *
mega64 146:03e976389d16 149 * }
mega64 146:03e976389d16 150 * @endcode
mega64 146:03e976389d16 151 */
mega64 146:03e976389d16 152 #ifndef MBED_FORCEINLINE
mega64 146:03e976389d16 153 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 154 #define MBED_FORCEINLINE static inline __attribute__((always_inline))
mega64 146:03e976389d16 155 #elif defined(__ICCARM__)
mega64 146:03e976389d16 156 #define MBED_FORCEINLINE _Pragma("inline=forced") static
mega64 146:03e976389d16 157 #else
mega64 146:03e976389d16 158 #define MBED_FORCEINLINE static inline
mega64 146:03e976389d16 159 #endif
mega64 146:03e976389d16 160 #endif
mega64 146:03e976389d16 161
mega64 146:03e976389d16 162 /** MBED_NORETURN
mega64 146:03e976389d16 163 * Declare a function that will never return.
mega64 146:03e976389d16 164 *
mega64 146:03e976389d16 165 * @code
mega64 146:03e976389d16 166 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 167 *
mega64 146:03e976389d16 168 * MBED_NORETURN void foo() {
mega64 146:03e976389d16 169 * // must never return
mega64 146:03e976389d16 170 * while (1) {}
mega64 146:03e976389d16 171 * }
mega64 146:03e976389d16 172 * @endcode
mega64 146:03e976389d16 173 */
mega64 146:03e976389d16 174 #ifndef MBED_NORETURN
mega64 146:03e976389d16 175 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM)
mega64 146:03e976389d16 176 #define MBED_NORETURN __attribute__((noreturn))
mega64 146:03e976389d16 177 #elif defined(__ICCARM__)
mega64 146:03e976389d16 178 #define MBED_NORETURN __noreturn
mega64 146:03e976389d16 179 #else
mega64 146:03e976389d16 180 #define MBED_NORETURN
mega64 146:03e976389d16 181 #endif
mega64 146:03e976389d16 182 #endif
mega64 146:03e976389d16 183
mega64 146:03e976389d16 184 /** MBED_UNREACHABLE
mega64 146:03e976389d16 185 * An unreachable statement. If the statement is reached,
mega64 146:03e976389d16 186 * behaviour is undefined. Useful in situations where the compiler
mega64 146:03e976389d16 187 * cannot deduce the unreachability of code.
mega64 146:03e976389d16 188 *
mega64 146:03e976389d16 189 * @code
mega64 146:03e976389d16 190 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 191 *
mega64 146:03e976389d16 192 * void foo(int arg) {
mega64 146:03e976389d16 193 * switch (arg) {
mega64 146:03e976389d16 194 * case 1: return 1;
mega64 146:03e976389d16 195 * case 2: return 2;
mega64 146:03e976389d16 196 * ...
mega64 146:03e976389d16 197 * }
mega64 146:03e976389d16 198 * MBED_UNREACHABLE;
mega64 146:03e976389d16 199 * }
mega64 146:03e976389d16 200 * @endcode
mega64 146:03e976389d16 201 */
mega64 146:03e976389d16 202 #ifndef MBED_UNREACHABLE
mega64 146:03e976389d16 203 #if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM)
mega64 146:03e976389d16 204 #define MBED_UNREACHABLE __builtin_unreachable()
mega64 146:03e976389d16 205 #else
mega64 146:03e976389d16 206 #define MBED_UNREACHABLE while (1)
mega64 146:03e976389d16 207 #endif
mega64 146:03e976389d16 208 #endif
mega64 146:03e976389d16 209
mega64 146:03e976389d16 210 /** MBED_DEPRECATED("message string")
mega64 146:03e976389d16 211 * Mark a function declaration as deprecated, if it used then a warning will be
mega64 146:03e976389d16 212 * issued by the compiler possibly including the provided message. Note that not
mega64 146:03e976389d16 213 * all compilers are able to display the message.
mega64 146:03e976389d16 214 *
mega64 146:03e976389d16 215 * @code
mega64 146:03e976389d16 216 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 217 *
mega64 146:03e976389d16 218 * MBED_DEPRECATED("don't foo any more, bar instead")
mega64 146:03e976389d16 219 * void foo(int arg);
mega64 146:03e976389d16 220 * @endcode
mega64 146:03e976389d16 221 */
mega64 146:03e976389d16 222 #ifndef MBED_DEPRECATED
mega64 146:03e976389d16 223 #if defined(__CC_ARM)
mega64 146:03e976389d16 224 #define MBED_DEPRECATED(M) __attribute__((deprecated))
mega64 146:03e976389d16 225 #elif defined(__GNUC__) || defined(__clang__)
mega64 146:03e976389d16 226 #define MBED_DEPRECATED(M) __attribute__((deprecated(M)))
mega64 146:03e976389d16 227 #else
mega64 146:03e976389d16 228 #define MBED_DEPRECATED(M)
mega64 146:03e976389d16 229 #endif
mega64 146:03e976389d16 230 #endif
mega64 146:03e976389d16 231
mega64 146:03e976389d16 232 /** MBED_DEPRECATED_SINCE("version", "message string")
mega64 146:03e976389d16 233 * Mark a function declaration as deprecated, noting that the declaration was
mega64 146:03e976389d16 234 * deprecated on the specified version. If the function is used then a warning
mega64 146:03e976389d16 235 * will be issued by the compiler possibly including the provided message.
mega64 146:03e976389d16 236 * Note that not all compilers are able to display this message.
mega64 146:03e976389d16 237 *
mega64 146:03e976389d16 238 * @code
mega64 146:03e976389d16 239 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 240 *
mega64 146:03e976389d16 241 * MBED_DEPRECATED_SINCE("mbed-os-5.1", "don't foo any more, bar instead")
mega64 146:03e976389d16 242 * void foo(int arg);
mega64 146:03e976389d16 243 * @endcode
mega64 146:03e976389d16 244 */
mega64 146:03e976389d16 245 #define MBED_DEPRECATED_SINCE(D, M) MBED_DEPRECATED(M " [since " D "]")
mega64 146:03e976389d16 246
mega64 146:03e976389d16 247 /** MBED_CALLER_ADDR()
mega64 146:03e976389d16 248 * Returns the caller of the current function.
mega64 146:03e976389d16 249 *
mega64 146:03e976389d16 250 * @note
mega64 146:03e976389d16 251 * This macro is only implemented for GCC and ARMCC.
mega64 146:03e976389d16 252 *
mega64 146:03e976389d16 253 * @code
mega64 146:03e976389d16 254 * #include "mbed_toolchain.h"
mega64 146:03e976389d16 255 *
mega64 146:03e976389d16 256 * printf("This function was called from %p", MBED_CALLER_ADDR());
mega64 146:03e976389d16 257 * @endcode
mega64 146:03e976389d16 258 *
mega64 146:03e976389d16 259 * @return Address of the calling function
mega64 146:03e976389d16 260 */
mega64 146:03e976389d16 261 #ifndef MBED_CALLER_ADDR
mega64 146:03e976389d16 262 #if (defined(__GNUC__) || defined(__clang__)) && !defined(__CC_ARM)
mega64 146:03e976389d16 263 #define MBED_CALLER_ADDR() __builtin_extract_return_addr(__builtin_return_address(0))
mega64 146:03e976389d16 264 #elif defined(__CC_ARM)
mega64 146:03e976389d16 265 #define MBED_CALLER_ADDR() __builtin_return_address(0)
mega64 146:03e976389d16 266 #else
mega64 146:03e976389d16 267 #define MBED_CALLER_ADDR() (NULL)
mega64 146:03e976389d16 268 #endif
mega64 146:03e976389d16 269 #endif
mega64 146:03e976389d16 270
mega64 146:03e976389d16 271 #ifndef MBED_SECTION
mega64 146:03e976389d16 272 #if (defined(__GNUC__) || defined(__clang__)) || defined(__CC_ARM)
mega64 146:03e976389d16 273 #define MBED_SECTION(name) __attribute__ ((section (name)))
mega64 146:03e976389d16 274 #elif defined(__ICCARM__)
mega64 146:03e976389d16 275 #define MBED_SECTION(name) _Pragma(MBED_STRINGIFY(location=name))
mega64 146:03e976389d16 276 #else
mega64 146:03e976389d16 277 #error "Missing MBED_SECTION directive"
mega64 146:03e976389d16 278 #endif
mega64 146:03e976389d16 279 #endif
mega64 146:03e976389d16 280
mega64 146:03e976389d16 281 // FILEHANDLE declaration
mega64 146:03e976389d16 282 #if defined(TOOLCHAIN_ARM)
mega64 146:03e976389d16 283 #include <rt_sys.h>
mega64 146:03e976389d16 284 #endif
mega64 146:03e976389d16 285
mega64 146:03e976389d16 286 #ifndef FILEHANDLE
mega64 146:03e976389d16 287 typedef int FILEHANDLE;
mega64 146:03e976389d16 288 #endif
mega64 146:03e976389d16 289
mega64 146:03e976389d16 290 // Backwards compatibility
mega64 146:03e976389d16 291 #ifndef WEAK
mega64 146:03e976389d16 292 #define WEAK MBED_WEAK
mega64 146:03e976389d16 293 #endif
mega64 146:03e976389d16 294
mega64 146:03e976389d16 295 #ifndef PACKED
mega64 146:03e976389d16 296 #define PACKED MBED_PACKED()
mega64 146:03e976389d16 297 #endif
mega64 146:03e976389d16 298
mega64 146:03e976389d16 299 #ifndef EXTERN
mega64 146:03e976389d16 300 #define EXTERN extern
mega64 146:03e976389d16 301 #endif
mega64 146:03e976389d16 302
mega64 146:03e976389d16 303 #endif
mega64 146:03e976389d16 304
mega64 146:03e976389d16 305 /** @}*/