Committer:
donatien
Date:
Thu May 31 15:46:30 2012 +0000
Revision:
0:e6ccf0b3d718

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:e6ccf0b3d718 1 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 2 * RL-ARM - RTX
donatien 0:e6ccf0b3d718 3 *----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 4 * Name: RTX_Conf_CM.C
donatien 0:e6ccf0b3d718 5 * Purpose: Configuration of CMSIS RTX Kernel for Cortex-M
donatien 0:e6ccf0b3d718 6 * Rev.: V4.20
donatien 0:e6ccf0b3d718 7 *----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 8 *
donatien 0:e6ccf0b3d718 9 * Copyright (c) 1999-2009 KEIL, 2009-2012 ARM Germany GmbH
donatien 0:e6ccf0b3d718 10 * All rights reserved.
donatien 0:e6ccf0b3d718 11 * Redistribution and use in source and binary forms, with or without
donatien 0:e6ccf0b3d718 12 * modification, are permitted provided that the following conditions are met:
donatien 0:e6ccf0b3d718 13 * - Redistributions of source code must retain the above copyright
donatien 0:e6ccf0b3d718 14 * notice, this list of conditions and the following disclaimer.
donatien 0:e6ccf0b3d718 15 * - Redistributions in binary form must reproduce the above copyright
donatien 0:e6ccf0b3d718 16 * notice, this list of conditions and the following disclaimer in the
donatien 0:e6ccf0b3d718 17 * documentation and/or other materials provided with the distribution.
donatien 0:e6ccf0b3d718 18 * - Neither the name of ARM nor the names of its contributors may be used
donatien 0:e6ccf0b3d718 19 * to endorse or promote products derived from this software without
donatien 0:e6ccf0b3d718 20 * specific prior written permission.
donatien 0:e6ccf0b3d718 21 *
donatien 0:e6ccf0b3d718 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
donatien 0:e6ccf0b3d718 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
donatien 0:e6ccf0b3d718 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
donatien 0:e6ccf0b3d718 25 * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
donatien 0:e6ccf0b3d718 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
donatien 0:e6ccf0b3d718 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
donatien 0:e6ccf0b3d718 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
donatien 0:e6ccf0b3d718 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
donatien 0:e6ccf0b3d718 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
donatien 0:e6ccf0b3d718 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
donatien 0:e6ccf0b3d718 32 * POSSIBILITY OF SUCH DAMAGE.
donatien 0:e6ccf0b3d718 33 *---------------------------------------------------------------------------*/
donatien 0:e6ccf0b3d718 34
donatien 0:e6ccf0b3d718 35 #include "cmsis_os.h"
donatien 0:e6ccf0b3d718 36
donatien 0:e6ccf0b3d718 37 #ifdef __cplusplus
donatien 0:e6ccf0b3d718 38 extern "C" {
donatien 0:e6ccf0b3d718 39 #endif
donatien 0:e6ccf0b3d718 40
donatien 0:e6ccf0b3d718 41 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 42 * RTX User configuration part BEGIN
donatien 0:e6ccf0b3d718 43 *---------------------------------------------------------------------------*/
donatien 0:e6ccf0b3d718 44
donatien 0:e6ccf0b3d718 45 //-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
donatien 0:e6ccf0b3d718 46 //
donatien 0:e6ccf0b3d718 47 // <h>Thread Configuration
donatien 0:e6ccf0b3d718 48 // =======================
donatien 0:e6ccf0b3d718 49 // <o>Number of concurrent running threads <0-250>
donatien 0:e6ccf0b3d718 50 // <i> Defines max. number of threads that will run at the same time.
donatien 0:e6ccf0b3d718 51 // counting "main", but not counting "osTimerThread"
donatien 0:e6ccf0b3d718 52 // <i> Default: 6
donatien 0:e6ccf0b3d718 53 #ifndef OS_TASKCNT
donatien 0:e6ccf0b3d718 54 # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
donatien 0:e6ccf0b3d718 55 # define OS_TASKCNT 7
donatien 0:e6ccf0b3d718 56 # elif defined(TARGET_LPC11U24)
donatien 0:e6ccf0b3d718 57 # define OS_TASKCNT 3
donatien 0:e6ccf0b3d718 58 # endif
donatien 0:e6ccf0b3d718 59 #endif
donatien 0:e6ccf0b3d718 60
donatien 0:e6ccf0b3d718 61 // <o>Number of threads with user-provided stack size <0-250>
donatien 0:e6ccf0b3d718 62 // The stack of "main" and "osTimerThread" are calculated separately
donatien 0:e6ccf0b3d718 63 // <i> Defines the number of threads with user-provided stack size.
donatien 0:e6ccf0b3d718 64 // <i> Default: 0
donatien 0:e6ccf0b3d718 65 #ifndef OS_PRIVCNT
donatien 0:e6ccf0b3d718 66 #define OS_PRIVCNT (OS_TASKCNT - 1)
donatien 0:e6ccf0b3d718 67 #endif
donatien 0:e6ccf0b3d718 68
donatien 0:e6ccf0b3d718 69 // <o>Default Thread stack size [bytes] <64-4096:8><#/4>
donatien 0:e6ccf0b3d718 70 // <i> Defines default stack size for threads.
donatien 0:e6ccf0b3d718 71 // <i> Default: 200
donatien 0:e6ccf0b3d718 72 #ifndef OS_STKSIZE
donatien 0:e6ccf0b3d718 73 #define OS_STKSIZE WORDS_STACK_SIZE
donatien 0:e6ccf0b3d718 74 #endif
donatien 0:e6ccf0b3d718 75
donatien 0:e6ccf0b3d718 76 // <o>Main Thread stack size [bytes] <64-4096:8><#/4>
donatien 0:e6ccf0b3d718 77 // <i> Defines stack size for main thread.
donatien 0:e6ccf0b3d718 78 // <i> Default: 200
donatien 0:e6ccf0b3d718 79 #ifndef OS_MAINSTKSIZE
donatien 0:e6ccf0b3d718 80 //Donatien: default allocated stack size is a bit too low
donatien 0:e6ccf0b3d718 81 #define OS_MAINSTKSIZE 512
donatien 0:e6ccf0b3d718 82 #endif
donatien 0:e6ccf0b3d718 83
donatien 0:e6ccf0b3d718 84 // <o>Total stack size [bytes] for threads with user-provided stack size <0-4096:8><#/4>
donatien 0:e6ccf0b3d718 85 // <i> Defines the combined stack size for threads with user-provided stack size.
donatien 0:e6ccf0b3d718 86 // <i> Default: 0
donatien 0:e6ccf0b3d718 87 #ifndef OS_PRIVSTKSIZE
donatien 0:e6ccf0b3d718 88 //Donatien: default allocated stack size is a bit too low
donatien 0:e6ccf0b3d718 89 # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
donatien 0:e6ccf0b3d718 90 # define OS_PRIVSTKSIZE 3000
donatien 0:e6ccf0b3d718 91 # elif defined(TARGET_LPC11U24)
donatien 0:e6ccf0b3d718 92 # define OS_PRIVSTKSIZE 512
donatien 0:e6ccf0b3d718 93 # endif
donatien 0:e6ccf0b3d718 94 #endif
donatien 0:e6ccf0b3d718 95
donatien 0:e6ccf0b3d718 96 // <q>Check for stack overflow
donatien 0:e6ccf0b3d718 97 // ===========================
donatien 0:e6ccf0b3d718 98 // <i> Includes the stack checking code for stack overflow.
donatien 0:e6ccf0b3d718 99 // <i> Note that additional code reduces the Kernel performance.
donatien 0:e6ccf0b3d718 100 #ifndef OS_STKCHECK
donatien 0:e6ccf0b3d718 101 #define OS_STKCHECK 1
donatien 0:e6ccf0b3d718 102 #endif
donatien 0:e6ccf0b3d718 103
donatien 0:e6ccf0b3d718 104 // <q>Run in privileged mode
donatien 0:e6ccf0b3d718 105 // =========================
donatien 0:e6ccf0b3d718 106 // <i> Runs all Threads in privileged mode.
donatien 0:e6ccf0b3d718 107 // <i> Default: Unprivileged
donatien 0:e6ccf0b3d718 108 #ifndef OS_RUNPRIV
donatien 0:e6ccf0b3d718 109 #define OS_RUNPRIV 1
donatien 0:e6ccf0b3d718 110 #endif
donatien 0:e6ccf0b3d718 111
donatien 0:e6ccf0b3d718 112 // </h>
donatien 0:e6ccf0b3d718 113 // <h>SysTick Timer Configuration
donatien 0:e6ccf0b3d718 114 // ==============================
donatien 0:e6ccf0b3d718 115 //
donatien 0:e6ccf0b3d718 116 // <o>Timer clock value [Hz] <1-1000000000>
donatien 0:e6ccf0b3d718 117 // <i> Defines the timer clock value.
donatien 0:e6ccf0b3d718 118 // <i> Default: 6000000 (6MHz)
donatien 0:e6ccf0b3d718 119 #ifndef OS_CLOCK
donatien 0:e6ccf0b3d718 120 # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
donatien 0:e6ccf0b3d718 121 # define OS_CLOCK 96000000
donatien 0:e6ccf0b3d718 122 # elif defined(TARGET_LPC11U24)
donatien 0:e6ccf0b3d718 123 # define OS_CLOCK 48000000
donatien 0:e6ccf0b3d718 124 # endif
donatien 0:e6ccf0b3d718 125 #endif
donatien 0:e6ccf0b3d718 126
donatien 0:e6ccf0b3d718 127 // <o>Timer tick value [us] <1-1000000>
donatien 0:e6ccf0b3d718 128 // <i> Defines the timer tick value.
donatien 0:e6ccf0b3d718 129 // <i> Default: 1000 (1ms)
donatien 0:e6ccf0b3d718 130 #ifndef OS_TICK
donatien 0:e6ccf0b3d718 131 #define OS_TICK 1000
donatien 0:e6ccf0b3d718 132 #endif
donatien 0:e6ccf0b3d718 133
donatien 0:e6ccf0b3d718 134 // </h>
donatien 0:e6ccf0b3d718 135
donatien 0:e6ccf0b3d718 136 // <h>System Configuration
donatien 0:e6ccf0b3d718 137 // =======================
donatien 0:e6ccf0b3d718 138 //
donatien 0:e6ccf0b3d718 139 // <e>Round-Robin Thread switching
donatien 0:e6ccf0b3d718 140 // ===============================
donatien 0:e6ccf0b3d718 141 //
donatien 0:e6ccf0b3d718 142 // <i> Enables Round-Robin Thread switching.
donatien 0:e6ccf0b3d718 143 #ifndef OS_ROBIN
donatien 0:e6ccf0b3d718 144 #define OS_ROBIN 1
donatien 0:e6ccf0b3d718 145 #endif
donatien 0:e6ccf0b3d718 146
donatien 0:e6ccf0b3d718 147 // <o>Round-Robin Timeout [ticks] <1-1000>
donatien 0:e6ccf0b3d718 148 // <i> Defines how long a thread will execute before a thread switch.
donatien 0:e6ccf0b3d718 149 // <i> Default: 5
donatien 0:e6ccf0b3d718 150 #ifndef OS_ROBINTOUT
donatien 0:e6ccf0b3d718 151 #define OS_ROBINTOUT 5
donatien 0:e6ccf0b3d718 152 #endif
donatien 0:e6ccf0b3d718 153
donatien 0:e6ccf0b3d718 154 // </e>
donatien 0:e6ccf0b3d718 155
donatien 0:e6ccf0b3d718 156 // <e>User Timers
donatien 0:e6ccf0b3d718 157 // ==============
donatien 0:e6ccf0b3d718 158 // <i> Enables user Timers
donatien 0:e6ccf0b3d718 159 #ifndef OS_TIMERS
donatien 0:e6ccf0b3d718 160 #define OS_TIMERS 1
donatien 0:e6ccf0b3d718 161 #endif
donatien 0:e6ccf0b3d718 162
donatien 0:e6ccf0b3d718 163 // <o>Timer Thread Priority
donatien 0:e6ccf0b3d718 164 // <1=> Low
donatien 0:e6ccf0b3d718 165 // <2=> Below Normal <3=> Normal
donatien 0:e6ccf0b3d718 166 // <4=> Above Normal
donatien 0:e6ccf0b3d718 167 // <5=> High
donatien 0:e6ccf0b3d718 168 // <6=> Realtime
donatien 0:e6ccf0b3d718 169 // <i> Defines priority for Timer Thread
donatien 0:e6ccf0b3d718 170 // <i> Default: High
donatien 0:e6ccf0b3d718 171 #ifndef OS_TIMERPRIO
donatien 0:e6ccf0b3d718 172 #define OS_TIMERPRIO 5
donatien 0:e6ccf0b3d718 173 #endif
donatien 0:e6ccf0b3d718 174
donatien 0:e6ccf0b3d718 175 // <o>Timer Thread stack size [bytes] <64-4096:8><#/4>
donatien 0:e6ccf0b3d718 176 // <i> Defines stack size for Timer thread.
donatien 0:e6ccf0b3d718 177 // <i> Default: 200
donatien 0:e6ccf0b3d718 178 #ifndef OS_TIMERSTKSZ
donatien 0:e6ccf0b3d718 179 #define OS_TIMERSTKSZ WORDS_STACK_SIZE
donatien 0:e6ccf0b3d718 180 #endif
donatien 0:e6ccf0b3d718 181
donatien 0:e6ccf0b3d718 182 // <o>Timer Callback Queue size <1-32>
donatien 0:e6ccf0b3d718 183 // <i> Defines number of concurrent callbacks that will be queued.
donatien 0:e6ccf0b3d718 184 // <i> Default: 4
donatien 0:e6ccf0b3d718 185 #ifndef OS_TIMERCBQSZ
donatien 0:e6ccf0b3d718 186 #define OS_TIMERCBQS 4
donatien 0:e6ccf0b3d718 187 #endif
donatien 0:e6ccf0b3d718 188
donatien 0:e6ccf0b3d718 189 // </e>
donatien 0:e6ccf0b3d718 190
donatien 0:e6ccf0b3d718 191 // <o>ISR FIFO Queue size<4=> 4 entries <8=> 8 entries
donatien 0:e6ccf0b3d718 192 // <12=> 12 entries <16=> 16 entries
donatien 0:e6ccf0b3d718 193 // <24=> 24 entries <32=> 32 entries
donatien 0:e6ccf0b3d718 194 // <48=> 48 entries <64=> 64 entries
donatien 0:e6ccf0b3d718 195 // <96=> 96 entries
donatien 0:e6ccf0b3d718 196 // <i> ISR functions store requests to this buffer,
donatien 0:e6ccf0b3d718 197 // <i> when they are called from the iterrupt handler.
donatien 0:e6ccf0b3d718 198 // <i> Default: 16 entries
donatien 0:e6ccf0b3d718 199 #ifndef OS_FIFOSZ
donatien 0:e6ccf0b3d718 200 #define OS_FIFOSZ 16
donatien 0:e6ccf0b3d718 201 #endif
donatien 0:e6ccf0b3d718 202
donatien 0:e6ccf0b3d718 203 // </h>
donatien 0:e6ccf0b3d718 204
donatien 0:e6ccf0b3d718 205 //------------- <<< end of configuration section >>> -----------------------
donatien 0:e6ccf0b3d718 206
donatien 0:e6ccf0b3d718 207 // Standard library system mutexes
donatien 0:e6ccf0b3d718 208 // ===============================
donatien 0:e6ccf0b3d718 209 // Define max. number system mutexes that are used to protect
donatien 0:e6ccf0b3d718 210 // the arm standard runtime library. For microlib they are not used.
donatien 0:e6ccf0b3d718 211 #ifndef OS_MUTEXCNT
donatien 0:e6ccf0b3d718 212 #define OS_MUTEXCNT 8
donatien 0:e6ccf0b3d718 213 #endif
donatien 0:e6ccf0b3d718 214
donatien 0:e6ccf0b3d718 215 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 216 * RTX User configuration part END
donatien 0:e6ccf0b3d718 217 *---------------------------------------------------------------------------*/
donatien 0:e6ccf0b3d718 218 #define OS_TRV ((uint32_t)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
donatien 0:e6ccf0b3d718 219
donatien 0:e6ccf0b3d718 220
donatien 0:e6ccf0b3d718 221 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 222 * OS Idle daemon
donatien 0:e6ccf0b3d718 223 *---------------------------------------------------------------------------*/
donatien 0:e6ccf0b3d718 224 void os_idle_demon (void) {
donatien 0:e6ccf0b3d718 225 /* The idle demon is a system thread, running when no other thread is */
donatien 0:e6ccf0b3d718 226 /* ready to run. */
donatien 0:e6ccf0b3d718 227
donatien 0:e6ccf0b3d718 228 /* Sleep: ideally, we should put the chip to sleep.
donatien 0:e6ccf0b3d718 229 Unfortunately, this usually requires disconnecting the interface chip (debugger).
donatien 0:e6ccf0b3d718 230 This can be done, but it would break the local file system.
donatien 0:e6ccf0b3d718 231 */
donatien 0:e6ccf0b3d718 232 for (;;) {
donatien 0:e6ccf0b3d718 233 // sleep();
donatien 0:e6ccf0b3d718 234 }
donatien 0:e6ccf0b3d718 235 }
donatien 0:e6ccf0b3d718 236
donatien 0:e6ccf0b3d718 237 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 238 * RTX Errors
donatien 0:e6ccf0b3d718 239 *---------------------------------------------------------------------------*/
donatien 0:e6ccf0b3d718 240 extern void mbed_die(void);
donatien 0:e6ccf0b3d718 241
donatien 0:e6ccf0b3d718 242 void os_error (uint32_t err_code) {
donatien 0:e6ccf0b3d718 243 /* This function is called when a runtime error is detected. Parameter */
donatien 0:e6ccf0b3d718 244 /* 'err_code' holds the runtime error code (defined in RTX_Config.h). */
donatien 0:e6ccf0b3d718 245 mbed_die();
donatien 0:e6ccf0b3d718 246 }
donatien 0:e6ccf0b3d718 247
donatien 0:e6ccf0b3d718 248 void sysThreadError(osStatus status) {
donatien 0:e6ccf0b3d718 249 if (status != osOK) {
donatien 0:e6ccf0b3d718 250 mbed_die();
donatien 0:e6ccf0b3d718 251 }
donatien 0:e6ccf0b3d718 252 }
donatien 0:e6ccf0b3d718 253
donatien 0:e6ccf0b3d718 254 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 255 * RTX Configuration Functions
donatien 0:e6ccf0b3d718 256 *---------------------------------------------------------------------------*/
donatien 0:e6ccf0b3d718 257
donatien 0:e6ccf0b3d718 258 #include "RTX_CM_lib.h"
donatien 0:e6ccf0b3d718 259
donatien 0:e6ccf0b3d718 260 #ifdef __cplusplus
donatien 0:e6ccf0b3d718 261 }
donatien 0:e6ccf0b3d718 262 #endif
donatien 0:e6ccf0b3d718 263
donatien 0:e6ccf0b3d718 264 /*----------------------------------------------------------------------------
donatien 0:e6ccf0b3d718 265 * end of file
donatien 0:e6ccf0b3d718 266 *---------------------------------------------------------------------------*/