mbed-rtos

Dependencies:  

Dependents:   Ethernetwebsocket

Fork of mbed-rtos by CK Sin

Committer:
GordonSin
Date:
Mon May 13 18:45:59 2013 +0000
Revision:
12:39baafdadeba
Parent:
4:70bd33086f56
?

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