mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Mon Oct 02 15:33:19 2017 +0100
Revision:
174:b96e65c34a4d
Parent:
165:e614a9f1c9e2
This updates the lib to the mbed lib v 152

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 165:e614a9f1c9e2 1 /*
AnnaBridge 165:e614a9f1c9e2 2 * Copyright (c) 2016 Nordic Semiconductor ASA
AnnaBridge 165:e614a9f1c9e2 3 * All rights reserved.
AnnaBridge 165:e614a9f1c9e2 4 *
AnnaBridge 165:e614a9f1c9e2 5 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 165:e614a9f1c9e2 6 * are permitted provided that the following conditions are met:
AnnaBridge 165:e614a9f1c9e2 7 *
AnnaBridge 165:e614a9f1c9e2 8 * 1. Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 165:e614a9f1c9e2 9 * of conditions and the following disclaimer.
AnnaBridge 165:e614a9f1c9e2 10 *
AnnaBridge 165:e614a9f1c9e2 11 * 2. Redistributions in binary form, except as embedded into a Nordic Semiconductor ASA
AnnaBridge 165:e614a9f1c9e2 12 * integrated circuit in a product or a software update for such product, must reproduce
AnnaBridge 165:e614a9f1c9e2 13 * the above copyright notice, this list of conditions and the following disclaimer in
AnnaBridge 165:e614a9f1c9e2 14 * the documentation and/or other materials provided with the distribution.
AnnaBridge 165:e614a9f1c9e2 15 *
AnnaBridge 165:e614a9f1c9e2 16 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its contributors may be
AnnaBridge 165:e614a9f1c9e2 17 * used to endorse or promote products derived from this software without specific prior
AnnaBridge 165:e614a9f1c9e2 18 * written permission.
AnnaBridge 165:e614a9f1c9e2 19 *
AnnaBridge 165:e614a9f1c9e2 20 * 4. This software, with or without modification, must only be used with a
AnnaBridge 165:e614a9f1c9e2 21 * Nordic Semiconductor ASA integrated circuit.
AnnaBridge 165:e614a9f1c9e2 22 *
AnnaBridge 165:e614a9f1c9e2 23 * 5. Any software provided in binary or object form under this license must not be reverse
AnnaBridge 165:e614a9f1c9e2 24 * engineered, decompiled, modified and/or disassembled.
AnnaBridge 165:e614a9f1c9e2 25 *
AnnaBridge 165:e614a9f1c9e2 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 165:e614a9f1c9e2 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 165:e614a9f1c9e2 28 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 165:e614a9f1c9e2 29 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 165:e614a9f1c9e2 30 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 165:e614a9f1c9e2 31 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 165:e614a9f1c9e2 32 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 165:e614a9f1c9e2 33 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 165:e614a9f1c9e2 34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 165:e614a9f1c9e2 35 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 165:e614a9f1c9e2 36 *
AnnaBridge 165:e614a9f1c9e2 37 */
AnnaBridge 165:e614a9f1c9e2 38
AnnaBridge 165:e614a9f1c9e2 39
AnnaBridge 165:e614a9f1c9e2 40 #ifndef SECTION_VARS_H__
AnnaBridge 165:e614a9f1c9e2 41 #define SECTION_VARS_H__
AnnaBridge 165:e614a9f1c9e2 42
AnnaBridge 165:e614a9f1c9e2 43
AnnaBridge 165:e614a9f1c9e2 44 /**
AnnaBridge 165:e614a9f1c9e2 45 * @defgroup section_vars Section variables
AnnaBridge 165:e614a9f1c9e2 46 * @ingroup app_common
AnnaBridge 165:e614a9f1c9e2 47 * @{
AnnaBridge 165:e614a9f1c9e2 48 *
AnnaBridge 165:e614a9f1c9e2 49 * @brief Section variables.
AnnaBridge 165:e614a9f1c9e2 50 */
AnnaBridge 165:e614a9f1c9e2 51
AnnaBridge 165:e614a9f1c9e2 52 #if defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 53 // Enable IAR language extensions
AnnaBridge 165:e614a9f1c9e2 54 #pragma language=extended
AnnaBridge 165:e614a9f1c9e2 55 #endif
AnnaBridge 165:e614a9f1c9e2 56
AnnaBridge 165:e614a9f1c9e2 57
AnnaBridge 165:e614a9f1c9e2 58 // Macro to delay macro expansion.
AnnaBridge 165:e614a9f1c9e2 59 #define NRF_PRAGMA(x) _Pragma(#x)
AnnaBridge 165:e614a9f1c9e2 60
AnnaBridge 165:e614a9f1c9e2 61
AnnaBridge 165:e614a9f1c9e2 62 /**@brief Macro to register a named section.
AnnaBridge 165:e614a9f1c9e2 63 *
AnnaBridge 165:e614a9f1c9e2 64 * @param[in] section_name Name of the section to register.
AnnaBridge 165:e614a9f1c9e2 65 */
AnnaBridge 174:b96e65c34a4d 66 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 67
AnnaBridge 165:e614a9f1c9e2 68 // Not required by this compiler.
AnnaBridge 165:e614a9f1c9e2 69 #define NRF_SECTION_VARS_REGISTER_SECTION(section_name)
AnnaBridge 165:e614a9f1c9e2 70
AnnaBridge 165:e614a9f1c9e2 71 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 72
AnnaBridge 165:e614a9f1c9e2 73 // Not required by this compiler.
AnnaBridge 165:e614a9f1c9e2 74 #define NRF_SECTION_VARS_REGISTER_SECTION(section_name)
AnnaBridge 165:e614a9f1c9e2 75
AnnaBridge 165:e614a9f1c9e2 76 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 77
AnnaBridge 165:e614a9f1c9e2 78 #define NRF_SECTION_VARS_REGISTER_SECTION(section_name) NRF_PRAGMA(section = #section_name)
AnnaBridge 165:e614a9f1c9e2 79
AnnaBridge 165:e614a9f1c9e2 80 #endif
AnnaBridge 165:e614a9f1c9e2 81
AnnaBridge 165:e614a9f1c9e2 82
AnnaBridge 165:e614a9f1c9e2 83 /*lint -save -e27 */
AnnaBridge 165:e614a9f1c9e2 84
AnnaBridge 165:e614a9f1c9e2 85 /**@brief Macro to obtain the linker symbol for the beginning of a given section.
AnnaBridge 165:e614a9f1c9e2 86 *
AnnaBridge 165:e614a9f1c9e2 87 * @details The symbol that this macro resolves to is used to obtain a section start address.
AnnaBridge 165:e614a9f1c9e2 88 *
AnnaBridge 165:e614a9f1c9e2 89 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 90 */
AnnaBridge 174:b96e65c34a4d 91 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 92
AnnaBridge 165:e614a9f1c9e2 93 #define NRF_SECTION_VARS_START_SYMBOL(section_name) section_name ## $$Base
AnnaBridge 165:e614a9f1c9e2 94
AnnaBridge 165:e614a9f1c9e2 95 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 96
AnnaBridge 165:e614a9f1c9e2 97 #define NRF_SECTION_VARS_START_SYMBOL(section_name) __start_ ## section_name
AnnaBridge 165:e614a9f1c9e2 98
AnnaBridge 165:e614a9f1c9e2 99 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 100
AnnaBridge 165:e614a9f1c9e2 101 #define NRF_SECTION_VARS_START_SYMBOL(section_name) __section_begin(#section_name)
AnnaBridge 165:e614a9f1c9e2 102
AnnaBridge 165:e614a9f1c9e2 103 #endif
AnnaBridge 165:e614a9f1c9e2 104
AnnaBridge 165:e614a9f1c9e2 105
AnnaBridge 165:e614a9f1c9e2 106 /**@brief Macro to obtain the linker symbol for the end of a given section.
AnnaBridge 165:e614a9f1c9e2 107 *
AnnaBridge 165:e614a9f1c9e2 108 * @details The symbol that this macro resolves to is used to obtain a section end address.
AnnaBridge 165:e614a9f1c9e2 109 *
AnnaBridge 165:e614a9f1c9e2 110 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 111 */
AnnaBridge 174:b96e65c34a4d 112 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 113
AnnaBridge 165:e614a9f1c9e2 114 #define NRF_SECTION_VARS_END_SYMBOL(section_name) section_name ## $$Limit
AnnaBridge 165:e614a9f1c9e2 115
AnnaBridge 165:e614a9f1c9e2 116 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 117
AnnaBridge 165:e614a9f1c9e2 118 #define NRF_SECTION_VARS_END_SYMBOL(section_name) __stop_ ## section_name
AnnaBridge 165:e614a9f1c9e2 119
AnnaBridge 165:e614a9f1c9e2 120 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 121
AnnaBridge 165:e614a9f1c9e2 122 #define NRF_SECTION_VARS_END_SYMBOL(section_name) __section_end(#section_name)
AnnaBridge 165:e614a9f1c9e2 123
AnnaBridge 165:e614a9f1c9e2 124 #endif
AnnaBridge 165:e614a9f1c9e2 125
AnnaBridge 165:e614a9f1c9e2 126 /*lint -restore */
AnnaBridge 165:e614a9f1c9e2 127
AnnaBridge 165:e614a9f1c9e2 128
AnnaBridge 165:e614a9f1c9e2 129 /**@brief Macro for retrieving the length of a given section, in bytes.
AnnaBridge 165:e614a9f1c9e2 130 *
AnnaBridge 165:e614a9f1c9e2 131 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 132 */
AnnaBridge 174:b96e65c34a4d 133 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 134
AnnaBridge 165:e614a9f1c9e2 135 #define NRF_SECTION_VARS_LENGTH(section_name) \
AnnaBridge 165:e614a9f1c9e2 136 ((uint32_t)&NRF_SECTION_VARS_END_SYMBOL(section_name) - (uint32_t)&NRF_SECTION_VARS_START_SYMBOL(section_name))
AnnaBridge 165:e614a9f1c9e2 137
AnnaBridge 165:e614a9f1c9e2 138 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 139
AnnaBridge 165:e614a9f1c9e2 140 #define NRF_SECTION_VARS_LENGTH(section_name) \
AnnaBridge 165:e614a9f1c9e2 141 ((uint32_t)&NRF_SECTION_VARS_END_SYMBOL(section_name) - (uint32_t)&NRF_SECTION_VARS_START_SYMBOL(section_name))
AnnaBridge 165:e614a9f1c9e2 142
AnnaBridge 165:e614a9f1c9e2 143 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 144
AnnaBridge 165:e614a9f1c9e2 145 #define NRF_SECTION_VARS_LENGTH(section_name) \
AnnaBridge 165:e614a9f1c9e2 146 ((uint32_t)NRF_SECTION_VARS_END_SYMBOL(section_name) - (uint32_t)NRF_SECTION_VARS_START_SYMBOL(section_name))
AnnaBridge 165:e614a9f1c9e2 147
AnnaBridge 165:e614a9f1c9e2 148 #endif
AnnaBridge 165:e614a9f1c9e2 149
AnnaBridge 165:e614a9f1c9e2 150
AnnaBridge 165:e614a9f1c9e2 151 /**@brief Macro to obtain the start address of a named section.
AnnaBridge 165:e614a9f1c9e2 152 *
AnnaBridge 165:e614a9f1c9e2 153 * param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 154 */
AnnaBridge 174:b96e65c34a4d 155 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 156
AnnaBridge 165:e614a9f1c9e2 157 #define NRF_SECTION_VARS_START_ADDR(section_name) (uint32_t)&NRF_SECTION_VARS_START_SYMBOL(section_name)
AnnaBridge 165:e614a9f1c9e2 158
AnnaBridge 165:e614a9f1c9e2 159 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 160
AnnaBridge 165:e614a9f1c9e2 161 #define NRF_SECTION_VARS_START_ADDR(section_name) (uint32_t)&NRF_SECTION_VARS_START_SYMBOL(section_name)
AnnaBridge 165:e614a9f1c9e2 162
AnnaBridge 165:e614a9f1c9e2 163 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 164
AnnaBridge 165:e614a9f1c9e2 165 #define NRF_SECTION_VARS_START_ADDR(section_name) (uint32_t)iar_ ## section_name ## _start
AnnaBridge 165:e614a9f1c9e2 166
AnnaBridge 165:e614a9f1c9e2 167 #endif
AnnaBridge 165:e614a9f1c9e2 168
AnnaBridge 165:e614a9f1c9e2 169
AnnaBridge 165:e614a9f1c9e2 170 /*@brief Macro to obtain the end address of a named section.
AnnaBridge 165:e614a9f1c9e2 171 *
AnnaBridge 165:e614a9f1c9e2 172 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 173 */
AnnaBridge 174:b96e65c34a4d 174 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 175
AnnaBridge 165:e614a9f1c9e2 176 #define NRF_SECTION_VARS_END_ADDR(section_name) (uint32_t)&NRF_SECTION_VARS_END_SYMBOL(section_name)
AnnaBridge 165:e614a9f1c9e2 177
AnnaBridge 165:e614a9f1c9e2 178 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 179
AnnaBridge 165:e614a9f1c9e2 180 #define NRF_SECTION_VARS_END_ADDR(section_name) (uint32_t)&NRF_SECTION_VARS_END_SYMBOL(section_name)
AnnaBridge 165:e614a9f1c9e2 181
AnnaBridge 165:e614a9f1c9e2 182 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 183
AnnaBridge 165:e614a9f1c9e2 184 #define NRF_SECTION_VARS_END_ADDR(section_name) (uint32_t)iar_ ## section_name ## _end
AnnaBridge 165:e614a9f1c9e2 185
AnnaBridge 165:e614a9f1c9e2 186 #endif
AnnaBridge 165:e614a9f1c9e2 187
AnnaBridge 165:e614a9f1c9e2 188
AnnaBridge 165:e614a9f1c9e2 189 /**@brief Macro to extern a named section start and stop symbols.
AnnaBridge 165:e614a9f1c9e2 190 *
AnnaBridge 165:e614a9f1c9e2 191 * @note These declarations are required for GCC and Keil linkers (but not for IAR's).
AnnaBridge 165:e614a9f1c9e2 192 *
AnnaBridge 165:e614a9f1c9e2 193 * @param[in] type_name Name of the type stored in the section.
AnnaBridge 165:e614a9f1c9e2 194 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 195 */
AnnaBridge 174:b96e65c34a4d 196 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 197
AnnaBridge 165:e614a9f1c9e2 198 #define NRF_SECTION_VARS_REGISTER_SYMBOLS(type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 199 extern type_name * NRF_SECTION_VARS_START_SYMBOL(section_name); \
AnnaBridge 165:e614a9f1c9e2 200 extern void * NRF_SECTION_VARS_END_SYMBOL(section_name)
AnnaBridge 165:e614a9f1c9e2 201
AnnaBridge 165:e614a9f1c9e2 202 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 203
AnnaBridge 165:e614a9f1c9e2 204 #define NRF_SECTION_VARS_REGISTER_SYMBOLS(type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 205 extern type_name * NRF_SECTION_VARS_START_SYMBOL(section_name); \
AnnaBridge 165:e614a9f1c9e2 206 extern void * NRF_SECTION_VARS_END_SYMBOL(section_name)
AnnaBridge 165:e614a9f1c9e2 207
AnnaBridge 165:e614a9f1c9e2 208 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 209
AnnaBridge 165:e614a9f1c9e2 210 // No symbol registration required for IAR.
AnnaBridge 165:e614a9f1c9e2 211 #define NRF_SECTION_VARS_REGISTER_SYMBOLS(type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 212 extern void * iar_ ## section_name ## _start = __section_begin(#section_name); \
AnnaBridge 165:e614a9f1c9e2 213 extern void * iar_ ## section_name ## _end = __section_end(#section_name)
AnnaBridge 165:e614a9f1c9e2 214
AnnaBridge 165:e614a9f1c9e2 215 #endif
AnnaBridge 165:e614a9f1c9e2 216
AnnaBridge 165:e614a9f1c9e2 217
AnnaBridge 165:e614a9f1c9e2 218 /**@brief Macro to declare a variable to be placed in a named section.
AnnaBridge 165:e614a9f1c9e2 219 *
AnnaBridge 165:e614a9f1c9e2 220 * @details Declares a variable to be placed in a named section. This macro ensures that its symbol
AnnaBridge 165:e614a9f1c9e2 221 * is not stripped by the linker because of optimizations.
AnnaBridge 165:e614a9f1c9e2 222 *
AnnaBridge 165:e614a9f1c9e2 223 * @warning The order with which variables are placed in a section is implementation dependant.
AnnaBridge 165:e614a9f1c9e2 224 * Generally, variables are placed in a section depending on the order with which they
AnnaBridge 165:e614a9f1c9e2 225 * are found by the linker.
AnnaBridge 165:e614a9f1c9e2 226 *
AnnaBridge 165:e614a9f1c9e2 227 * @warning The symbols added in the named section must be word aligned to prevent padding.
AnnaBridge 165:e614a9f1c9e2 228 *
AnnaBridge 165:e614a9f1c9e2 229 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 230 * @param[in] type_def Datatype of the variable to place in the given section.
AnnaBridge 165:e614a9f1c9e2 231 */
AnnaBridge 174:b96e65c34a4d 232 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 233
AnnaBridge 165:e614a9f1c9e2 234 #define NRF_SECTION_VARS_ADD(section_name, type_def) \
AnnaBridge 165:e614a9f1c9e2 235 static type_def __attribute__ ((section(#section_name))) __attribute__((used))
AnnaBridge 165:e614a9f1c9e2 236
AnnaBridge 165:e614a9f1c9e2 237 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 238
AnnaBridge 165:e614a9f1c9e2 239 #define NRF_SECTION_VARS_ADD(section_name, type_def) \
AnnaBridge 165:e614a9f1c9e2 240 static type_def __attribute__ ((section("."#section_name))) __attribute__((used))
AnnaBridge 165:e614a9f1c9e2 241
AnnaBridge 165:e614a9f1c9e2 242 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 243
AnnaBridge 165:e614a9f1c9e2 244 #define NRF_SECTION_VARS_ADD(section_name, type_def) \
AnnaBridge 165:e614a9f1c9e2 245 static __root type_def @ #section_name
AnnaBridge 165:e614a9f1c9e2 246
AnnaBridge 165:e614a9f1c9e2 247 #endif
AnnaBridge 165:e614a9f1c9e2 248
AnnaBridge 165:e614a9f1c9e2 249
AnnaBridge 165:e614a9f1c9e2 250 /**@brief Macro to get symbol from named section.
AnnaBridge 165:e614a9f1c9e2 251 *
AnnaBridge 165:e614a9f1c9e2 252 * @warning The stored symbol can only be resolved using this macro if the
AnnaBridge 165:e614a9f1c9e2 253 * type of the data is word aligned. The operation of acquiring
AnnaBridge 165:e614a9f1c9e2 254 * the stored symbol relies on sizeof of the stored type, no
AnnaBridge 165:e614a9f1c9e2 255 * padding can exist in the named section in between individual
AnnaBridge 165:e614a9f1c9e2 256 * stored items or this macro will fail.
AnnaBridge 165:e614a9f1c9e2 257 *
AnnaBridge 165:e614a9f1c9e2 258 * @param[in] i Index of item in section.
AnnaBridge 165:e614a9f1c9e2 259 * @param[in] type_name Type name of item in section.
AnnaBridge 165:e614a9f1c9e2 260 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 261 */
AnnaBridge 174:b96e65c34a4d 262 #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
AnnaBridge 165:e614a9f1c9e2 263
AnnaBridge 165:e614a9f1c9e2 264 #define NRF_SECTION_VARS_GET(i, type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 265 (type_name*)(NRF_SECTION_VARS_START_ADDR(section_name) + i * sizeof(type_name))
AnnaBridge 165:e614a9f1c9e2 266
AnnaBridge 165:e614a9f1c9e2 267 #elif defined(__GNUC__)
AnnaBridge 165:e614a9f1c9e2 268
AnnaBridge 165:e614a9f1c9e2 269 #define NRF_SECTION_VARS_GET(i, type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 270 (type_name*)(NRF_SECTION_VARS_START_ADDR(section_name) + i * sizeof(type_name))
AnnaBridge 165:e614a9f1c9e2 271
AnnaBridge 165:e614a9f1c9e2 272 #elif defined(__ICCARM__)
AnnaBridge 165:e614a9f1c9e2 273
AnnaBridge 165:e614a9f1c9e2 274 #define NRF_SECTION_VARS_GET(i, type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 275 (type_name*)(NRF_SECTION_VARS_START_ADDR(section_name) + i * sizeof(type_name))
AnnaBridge 165:e614a9f1c9e2 276
AnnaBridge 165:e614a9f1c9e2 277 #endif
AnnaBridge 165:e614a9f1c9e2 278
AnnaBridge 165:e614a9f1c9e2 279
AnnaBridge 165:e614a9f1c9e2 280 /**@brief Macro to get number of items in named section.
AnnaBridge 165:e614a9f1c9e2 281 *
AnnaBridge 165:e614a9f1c9e2 282 * @param[in] type_name Type name of item in section.
AnnaBridge 165:e614a9f1c9e2 283 * @param[in] section_name Name of the section.
AnnaBridge 165:e614a9f1c9e2 284 */
AnnaBridge 165:e614a9f1c9e2 285 #define NRF_SECTION_VARS_COUNT(type_name, section_name) \
AnnaBridge 165:e614a9f1c9e2 286 NRF_SECTION_VARS_LENGTH(section_name) / sizeof(type_name)
AnnaBridge 165:e614a9f1c9e2 287
AnnaBridge 165:e614a9f1c9e2 288 /** @} */
AnnaBridge 165:e614a9f1c9e2 289
AnnaBridge 165:e614a9f1c9e2 290 #endif // SECTION_VARS_H__