mbed-rtos

Dependencies:  

Dependents:   Ethernetwebsocket

Fork of mbed-rtos by CK Sin

Committer:
emilmont
Date:
Fri Jun 22 15:35:30 2012 +0000
Revision:
0:3cf1dd27c89c
Child:
1:01158bb7600c
Initial commit

Who changed what in which revision?

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