mbed-rtos

Dependencies:  

Dependents:   Ethernetwebsocket

Fork of mbed-rtos by CK Sin

Committer:
emilmont
Date:
Mon Jul 23 15:39:12 2012 +0000
Revision:
3:4238c328365e
Parent:
2:4629f61a197e
Child:
4:70bd33086f56
Update stack sizes configuration

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
emilmont 0:3cf1dd27c89c 38 /*----------------------------------------------------------------------------
emilmont 0:3cf1dd27c89c 39 * RTX User configuration part BEGIN
emilmont 0:3cf1dd27c89c 40 *---------------------------------------------------------------------------*/
emilmont 0:3cf1dd27c89c 41
emilmont 0:3cf1dd27c89c 42 //-------- <<< Use Configuration Wizard in Context Menu >>> -----------------
emilmont 0:3cf1dd27c89c 43 //
emilmont 0:3cf1dd27c89c 44 // <h>Thread Configuration
emilmont 0:3cf1dd27c89c 45 // =======================
emilmont 1:01158bb7600c 46 //
emilmont 0:3cf1dd27c89c 47 // <o>Number of concurrent running threads <0-250>
emilmont 0:3cf1dd27c89c 48 // <i> Defines max. number of threads that will run at the same time.
emilmont 0:3cf1dd27c89c 49 // counting "main", but not counting "osTimerThread"
emilmont 0:3cf1dd27c89c 50 // <i> Default: 6
emilmont 0:3cf1dd27c89c 51 #ifndef OS_TASKCNT
emilmont 0:3cf1dd27c89c 52 # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
emilmont 2:4629f61a197e 53 # define OS_TASKCNT 14
emilmont 0:3cf1dd27c89c 54 # elif defined(TARGET_LPC11U24)
emilmont 2:4629f61a197e 55 # define OS_TASKCNT 6
emilmont 0:3cf1dd27c89c 56 # endif
emilmont 0:3cf1dd27c89c 57 #endif
emilmont 0:3cf1dd27c89c 58
emilmont 2:4629f61a197e 59 // <o>Scheduler (+ interrupts) stack size [bytes] <64-4096:8><#/4>
emilmont 2:4629f61a197e 60 #ifndef OS_SCHEDULERSTKSIZE
emilmont 2:4629f61a197e 61 #define OS_SCHEDULERSTKSIZE 256
emilmont 0:3cf1dd27c89c 62 #endif
emilmont 0:3cf1dd27c89c 63
emilmont 2:4629f61a197e 64 // <o>Idle stack size [bytes] <64-4096:8><#/4>
emilmont 3:4238c328365e 65 // <i> Defines default stack size for the Idle thread.
emilmont 2:4629f61a197e 66 #ifndef OS_IDLESTKSIZE
emilmont 2:4629f61a197e 67 #define OS_IDLESTKSIZE 128
emilmont 0:3cf1dd27c89c 68 #endif
emilmont 0:3cf1dd27c89c 69
emilmont 3:4238c328365e 70 // <o>Timer Thread stack size [bytes] <64-4096:8><#/4>
emilmont 3:4238c328365e 71 // <i> Defines stack size for Timer thread.
emilmont 0:3cf1dd27c89c 72 // <i> Default: 200
emilmont 3:4238c328365e 73 #ifndef OS_TIMERSTKSZ
emilmont 3:4238c328365e 74 #define OS_TIMERSTKSZ WORDS_STACK_SIZE
emilmont 0:3cf1dd27c89c 75 #endif
emilmont 0:3cf1dd27c89c 76
emilmont 0:3cf1dd27c89c 77 // <q>Check for stack overflow
emilmont 0:3cf1dd27c89c 78 // ===========================
emilmont 0:3cf1dd27c89c 79 // <i> Includes the stack checking code for stack overflow.
emilmont 0:3cf1dd27c89c 80 // <i> Note that additional code reduces the Kernel performance.
emilmont 0:3cf1dd27c89c 81 #ifndef OS_STKCHECK
emilmont 0:3cf1dd27c89c 82 #define OS_STKCHECK 1
emilmont 0:3cf1dd27c89c 83 #endif
emilmont 0:3cf1dd27c89c 84
emilmont 0:3cf1dd27c89c 85 // <q>Run in privileged mode
emilmont 0:3cf1dd27c89c 86 // =========================
emilmont 0:3cf1dd27c89c 87 // <i> Runs all Threads in privileged mode.
emilmont 0:3cf1dd27c89c 88 // <i> Default: Unprivileged
emilmont 0:3cf1dd27c89c 89 #ifndef OS_RUNPRIV
emilmont 0:3cf1dd27c89c 90 #define OS_RUNPRIV 1
emilmont 0:3cf1dd27c89c 91 #endif
emilmont 0:3cf1dd27c89c 92
emilmont 0:3cf1dd27c89c 93 // </h>
emilmont 0:3cf1dd27c89c 94 // <h>SysTick Timer Configuration
emilmont 0:3cf1dd27c89c 95 // ==============================
emilmont 0:3cf1dd27c89c 96 //
emilmont 0:3cf1dd27c89c 97 // <o>Timer clock value [Hz] <1-1000000000>
emilmont 0:3cf1dd27c89c 98 // <i> Defines the timer clock value.
emilmont 0:3cf1dd27c89c 99 // <i> Default: 6000000 (6MHz)
emilmont 0:3cf1dd27c89c 100 #ifndef OS_CLOCK
emilmont 0:3cf1dd27c89c 101 # if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
emilmont 0:3cf1dd27c89c 102 # define OS_CLOCK 96000000
emilmont 0:3cf1dd27c89c 103 # elif defined(TARGET_LPC11U24)
emilmont 0:3cf1dd27c89c 104 # define OS_CLOCK 48000000
emilmont 0:3cf1dd27c89c 105 # endif
emilmont 0:3cf1dd27c89c 106 #endif
emilmont 0:3cf1dd27c89c 107
emilmont 0:3cf1dd27c89c 108 // <o>Timer tick value [us] <1-1000000>
emilmont 0:3cf1dd27c89c 109 // <i> Defines the timer tick value.
emilmont 0:3cf1dd27c89c 110 // <i> Default: 1000 (1ms)
emilmont 0:3cf1dd27c89c 111 #ifndef OS_TICK
emilmont 0:3cf1dd27c89c 112 #define OS_TICK 1000
emilmont 0:3cf1dd27c89c 113 #endif
emilmont 0:3cf1dd27c89c 114
emilmont 0:3cf1dd27c89c 115 // </h>
emilmont 0:3cf1dd27c89c 116
emilmont 0:3cf1dd27c89c 117 // <h>System Configuration
emilmont 0:3cf1dd27c89c 118 // =======================
emilmont 0:3cf1dd27c89c 119 //
emilmont 0:3cf1dd27c89c 120 // <e>Round-Robin Thread switching
emilmont 0:3cf1dd27c89c 121 // ===============================
emilmont 0:3cf1dd27c89c 122 //
emilmont 0:3cf1dd27c89c 123 // <i> Enables Round-Robin Thread switching.
emilmont 0:3cf1dd27c89c 124 #ifndef OS_ROBIN
emilmont 0:3cf1dd27c89c 125 #define OS_ROBIN 1
emilmont 0:3cf1dd27c89c 126 #endif
emilmont 0:3cf1dd27c89c 127
emilmont 0:3cf1dd27c89c 128 // <o>Round-Robin Timeout [ticks] <1-1000>
emilmont 0:3cf1dd27c89c 129 // <i> Defines how long a thread will execute before a thread switch.
emilmont 0:3cf1dd27c89c 130 // <i> Default: 5
emilmont 0:3cf1dd27c89c 131 #ifndef OS_ROBINTOUT
emilmont 0:3cf1dd27c89c 132 #define OS_ROBINTOUT 5
emilmont 0:3cf1dd27c89c 133 #endif
emilmont 0:3cf1dd27c89c 134
emilmont 0:3cf1dd27c89c 135 // </e>
emilmont 0:3cf1dd27c89c 136
emilmont 0:3cf1dd27c89c 137 // <e>User Timers
emilmont 0:3cf1dd27c89c 138 // ==============
emilmont 0:3cf1dd27c89c 139 // <i> Enables user Timers
emilmont 0:3cf1dd27c89c 140 #ifndef OS_TIMERS
emilmont 0:3cf1dd27c89c 141 #define OS_TIMERS 1
emilmont 0:3cf1dd27c89c 142 #endif
emilmont 0:3cf1dd27c89c 143
emilmont 0:3cf1dd27c89c 144 // <o>Timer Thread Priority
emilmont 0:3cf1dd27c89c 145 // <1=> Low
emilmont 1:01158bb7600c 146 // <2=> Below Normal
emilmont 1:01158bb7600c 147 // <3=> Normal
emilmont 0:3cf1dd27c89c 148 // <4=> Above Normal
emilmont 0:3cf1dd27c89c 149 // <5=> High
emilmont 0:3cf1dd27c89c 150 // <6=> Realtime
emilmont 0:3cf1dd27c89c 151 // <i> Defines priority for Timer Thread
emilmont 0:3cf1dd27c89c 152 // <i> Default: High
emilmont 0:3cf1dd27c89c 153 #ifndef OS_TIMERPRIO
emilmont 0:3cf1dd27c89c 154 #define OS_TIMERPRIO 5
emilmont 0:3cf1dd27c89c 155 #endif
emilmont 0:3cf1dd27c89c 156
emilmont 0:3cf1dd27c89c 157 // <o>Timer Callback Queue size <1-32>
emilmont 0:3cf1dd27c89c 158 // <i> Defines number of concurrent callbacks that will be queued.
emilmont 0:3cf1dd27c89c 159 // <i> Default: 4
emilmont 0:3cf1dd27c89c 160 #ifndef OS_TIMERCBQSZ
emilmont 0:3cf1dd27c89c 161 #define OS_TIMERCBQS 4
emilmont 0:3cf1dd27c89c 162 #endif
emilmont 0:3cf1dd27c89c 163
emilmont 0:3cf1dd27c89c 164 // </e>
emilmont 0:3cf1dd27c89c 165
emilmont 0:3cf1dd27c89c 166 // <o>ISR FIFO Queue size<4=> 4 entries <8=> 8 entries
emilmont 0:3cf1dd27c89c 167 // <12=> 12 entries <16=> 16 entries
emilmont 0:3cf1dd27c89c 168 // <24=> 24 entries <32=> 32 entries
emilmont 0:3cf1dd27c89c 169 // <48=> 48 entries <64=> 64 entries
emilmont 0:3cf1dd27c89c 170 // <96=> 96 entries
emilmont 0:3cf1dd27c89c 171 // <i> ISR functions store requests to this buffer,
emilmont 0:3cf1dd27c89c 172 // <i> when they are called from the iterrupt handler.
emilmont 0:3cf1dd27c89c 173 // <i> Default: 16 entries
emilmont 0:3cf1dd27c89c 174 #ifndef OS_FIFOSZ
emilmont 0:3cf1dd27c89c 175 #define OS_FIFOSZ 16
emilmont 0:3cf1dd27c89c 176 #endif
emilmont 0:3cf1dd27c89c 177
emilmont 0:3cf1dd27c89c 178 // </h>
emilmont 0:3cf1dd27c89c 179
emilmont 0:3cf1dd27c89c 180 //------------- <<< end of configuration section >>> -----------------------
emilmont 0:3cf1dd27c89c 181
emilmont 0:3cf1dd27c89c 182 // Standard library system mutexes
emilmont 0:3cf1dd27c89c 183 // ===============================
emilmont 0:3cf1dd27c89c 184 // Define max. number system mutexes that are used to protect
emilmont 0:3cf1dd27c89c 185 // the arm standard runtime library. For microlib they are not used.
emilmont 0:3cf1dd27c89c 186 #ifndef OS_MUTEXCNT
emilmont 0:3cf1dd27c89c 187 #define OS_MUTEXCNT 8
emilmont 0:3cf1dd27c89c 188 #endif
emilmont 0:3cf1dd27c89c 189
emilmont 0:3cf1dd27c89c 190 /*----------------------------------------------------------------------------
emilmont 0:3cf1dd27c89c 191 * RTX User configuration part END
emilmont 0:3cf1dd27c89c 192 *---------------------------------------------------------------------------*/
emilmont 1:01158bb7600c 193
emilmont 0:3cf1dd27c89c 194 #define OS_TRV ((uint32_t)(((double)OS_CLOCK*(double)OS_TICK)/1E6)-1)
emilmont 0:3cf1dd27c89c 195
emilmont 0:3cf1dd27c89c 196
emilmont 0:3cf1dd27c89c 197 /*----------------------------------------------------------------------------
emilmont 0:3cf1dd27c89c 198 * OS Idle daemon
emilmont 0:3cf1dd27c89c 199 *---------------------------------------------------------------------------*/
emilmont 0:3cf1dd27c89c 200 void os_idle_demon (void) {
emilmont 0:3cf1dd27c89c 201 /* The idle demon is a system thread, running when no other thread is */
emilmont 0:3cf1dd27c89c 202 /* ready to run. */
emilmont 0:3cf1dd27c89c 203
emilmont 0:3cf1dd27c89c 204 /* Sleep: ideally, we should put the chip to sleep.
emilmont 0:3cf1dd27c89c 205 Unfortunately, this usually requires disconnecting the interface chip (debugger).
emilmont 0:3cf1dd27c89c 206 This can be done, but it would break the local file system.
emilmont 0:3cf1dd27c89c 207 */
emilmont 0:3cf1dd27c89c 208 for (;;) {
emilmont 0:3cf1dd27c89c 209 // sleep();
emilmont 0:3cf1dd27c89c 210 }
emilmont 0:3cf1dd27c89c 211 }
emilmont 0:3cf1dd27c89c 212
emilmont 0:3cf1dd27c89c 213 /*----------------------------------------------------------------------------
emilmont 0:3cf1dd27c89c 214 * RTX Errors
emilmont 0:3cf1dd27c89c 215 *---------------------------------------------------------------------------*/
emilmont 0:3cf1dd27c89c 216 extern void mbed_die(void);
emilmont 0:3cf1dd27c89c 217
emilmont 0:3cf1dd27c89c 218 void os_error (uint32_t err_code) {
emilmont 0:3cf1dd27c89c 219 /* This function is called when a runtime error is detected. Parameter */
emilmont 0:3cf1dd27c89c 220 /* 'err_code' holds the runtime error code (defined in RTX_Config.h). */
emilmont 0:3cf1dd27c89c 221 mbed_die();
emilmont 0:3cf1dd27c89c 222 }
emilmont 0:3cf1dd27c89c 223
emilmont 0:3cf1dd27c89c 224 void sysThreadError(osStatus status) {
emilmont 0:3cf1dd27c89c 225 if (status != osOK) {
emilmont 0:3cf1dd27c89c 226 mbed_die();
emilmont 0:3cf1dd27c89c 227 }
emilmont 0:3cf1dd27c89c 228 }
emilmont 0:3cf1dd27c89c 229
emilmont 0:3cf1dd27c89c 230 /*----------------------------------------------------------------------------
emilmont 0:3cf1dd27c89c 231 * RTX Configuration Functions
emilmont 0:3cf1dd27c89c 232 *---------------------------------------------------------------------------*/
emilmont 0:3cf1dd27c89c 233
emilmont 0:3cf1dd27c89c 234 #include "RTX_CM_lib.h"
emilmont 0:3cf1dd27c89c 235
emilmont 0:3cf1dd27c89c 236 /*----------------------------------------------------------------------------
emilmont 0:3cf1dd27c89c 237 * end of file
emilmont 0:3cf1dd27c89c 238 *---------------------------------------------------------------------------*/