Alan Ffrench / Mbed 2 deprecated Experiment_2_5

Dependencies:   mbed

Committer:
alanffrench
Date:
Wed Jul 29 18:51:38 2020 +0000
Revision:
0:52468b19aa21
Threads

Who changed what in which revision?

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