Official mbed Real Time Operating System based on the RTX implementation of the CMSIS-RTOS API open standard.

Dependents:   denki-yohou_b TestY201 Network-RTOS NTPClient_HelloWorld ... more

Deprecated

This is the mbed 2 rtos library. mbed OS 5 integrates the mbed library with mbed-rtos. With this, we have provided thread safety for all mbed APIs. If you'd like to learn about using mbed OS 5, please see the docs.

Committer:
<>
Date:
Thu Sep 01 15:13:42 2016 +0100
Revision:
121:3da5f554d8bf
Parent:
92:bc9729798a19
RTOS rev121

Compatible with the mbed library v125

Changes:
- K64F: Revert to hardcoded stack pointer in RTX.
- Adding NCS36510 support.
- Add MAX32620 target support.
- Fix implicit declaration of function 'atexit'.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 48:e9a2c7cb57a4 1 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 2 * RL-ARM - RTX
mbed_official 48:e9a2c7cb57a4 3 *----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 4 * Name: RT_SYSTEM.C
mbed_official 48:e9a2c7cb57a4 5 * Purpose: System Task Manager
mbed_official 92:bc9729798a19 6 * Rev.: 8 April 2015
mbed_official 48:e9a2c7cb57a4 7 *----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 8 *
mbed_official 92:bc9729798a19 9 * Copyright (c) 1999-2009 KEIL, 2009-2015 ARM Germany GmbH
mbed_official 48:e9a2c7cb57a4 10 * All rights reserved.
mbed_official 48:e9a2c7cb57a4 11 * Redistribution and use in source and binary forms, with or without
mbed_official 48:e9a2c7cb57a4 12 * modification, are permitted provided that the following conditions are met:
mbed_official 48:e9a2c7cb57a4 13 * - Redistributions of source code must retain the above copyright
mbed_official 48:e9a2c7cb57a4 14 * notice, this list of conditions and the following disclaimer.
mbed_official 48:e9a2c7cb57a4 15 * - Redistributions in binary form must reproduce the above copyright
mbed_official 48:e9a2c7cb57a4 16 * notice, this list of conditions and the following disclaimer in the
mbed_official 48:e9a2c7cb57a4 17 * documentation and/or other materials provided with the distribution.
mbed_official 68:d3d0e710b443 18 * - Neither the name of ARM nor the names of its contributors may be used
mbed_official 68:d3d0e710b443 19 * to endorse or promote products derived from this software without
mbed_official 48:e9a2c7cb57a4 20 * specific prior written permission.
mbed_official 48:e9a2c7cb57a4 21 *
mbed_official 68:d3d0e710b443 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 68:d3d0e710b443 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 48:e9a2c7cb57a4 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
mbed_official 48:e9a2c7cb57a4 25 * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
mbed_official 48:e9a2c7cb57a4 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
mbed_official 68:d3d0e710b443 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
mbed_official 68:d3d0e710b443 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
mbed_official 68:d3d0e710b443 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
mbed_official 68:d3d0e710b443 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
mbed_official 48:e9a2c7cb57a4 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 48:e9a2c7cb57a4 32 * POSSIBILITY OF SUCH DAMAGE.
mbed_official 48:e9a2c7cb57a4 33 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 34
mbed_official 48:e9a2c7cb57a4 35 #include "rt_TypeDef.h"
mbed_official 48:e9a2c7cb57a4 36 #include "RTX_Config.h"
mbed_official 48:e9a2c7cb57a4 37 #include "rt_Task.h"
mbed_official 48:e9a2c7cb57a4 38 #include "rt_System.h"
mbed_official 48:e9a2c7cb57a4 39 #include "rt_Event.h"
mbed_official 48:e9a2c7cb57a4 40 #include "rt_List.h"
mbed_official 48:e9a2c7cb57a4 41 #include "rt_Mailbox.h"
mbed_official 48:e9a2c7cb57a4 42 #include "rt_Semaphore.h"
mbed_official 48:e9a2c7cb57a4 43 #include "rt_Time.h"
mbed_official 48:e9a2c7cb57a4 44 #include "rt_Timer.h"
mbed_official 48:e9a2c7cb57a4 45 #include "rt_Robin.h"
mbed_official 48:e9a2c7cb57a4 46 #ifdef __CORTEX_A9
mbed_official 48:e9a2c7cb57a4 47 #include "rt_HAL_CA.h"
mbed_official 48:e9a2c7cb57a4 48 #else
mbed_official 48:e9a2c7cb57a4 49 #include "rt_HAL_CM.h"
mbed_official 48:e9a2c7cb57a4 50 #endif
mbed_official 48:e9a2c7cb57a4 51
mbed_official 48:e9a2c7cb57a4 52 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 53 * Global Variables
mbed_official 48:e9a2c7cb57a4 54 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 55
mbed_official 48:e9a2c7cb57a4 56 int os_tick_irqn;
mbed_official 92:bc9729798a19 57 U8 scheduler_suspended = 0; // flag set by rt_suspend, cleared by rt_resume, read by SVC_Handler
mbed_official 48:e9a2c7cb57a4 58
mbed_official 48:e9a2c7cb57a4 59 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 60 * Local Variables
mbed_official 48:e9a2c7cb57a4 61 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 62
mbed_official 48:e9a2c7cb57a4 63 static volatile BIT os_lock;
mbed_official 48:e9a2c7cb57a4 64 static volatile BIT os_psh_flag;
mbed_official 48:e9a2c7cb57a4 65 #ifndef __CORTEX_A9
mbed_official 48:e9a2c7cb57a4 66 static U8 pend_flags;
mbed_official 48:e9a2c7cb57a4 67 #endif
mbed_official 48:e9a2c7cb57a4 68 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 69 * Global Functions
mbed_official 48:e9a2c7cb57a4 70 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 71
mbed_official 92:bc9729798a19 72 #define RL_RTX_VER 0x473
mbed_official 92:bc9729798a19 73
mbed_official 48:e9a2c7cb57a4 74 #if defined (__CC_ARM)
mbed_official 48:e9a2c7cb57a4 75 __asm void $$RTX$$version (void) {
mbed_official 48:e9a2c7cb57a4 76 /* Export a version number symbol for a version control. */
mbed_official 48:e9a2c7cb57a4 77
mbed_official 48:e9a2c7cb57a4 78 EXPORT __RL_RTX_VER
mbed_official 48:e9a2c7cb57a4 79
mbed_official 92:bc9729798a19 80 __RL_RTX_VER EQU RL_RTX_VER
mbed_official 48:e9a2c7cb57a4 81 }
mbed_official 48:e9a2c7cb57a4 82 #endif
mbed_official 48:e9a2c7cb57a4 83
mbed_official 48:e9a2c7cb57a4 84
mbed_official 48:e9a2c7cb57a4 85 /*--------------------------- rt_suspend ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 86
mbed_official 92:bc9729798a19 87 extern U32 sysUserTimerWakeupTime(void);
mbed_official 92:bc9729798a19 88
mbed_official 48:e9a2c7cb57a4 89 U32 rt_suspend (void) {
mbed_official 48:e9a2c7cb57a4 90 /* Suspend OS scheduler */
mbed_official 48:e9a2c7cb57a4 91 U32 delta = 0xFFFF;
mbed_official 92:bc9729798a19 92 #ifdef __CMSIS_RTOS
mbed_official 92:bc9729798a19 93 U32 sleep;
mbed_official 92:bc9729798a19 94 #endif
mbed_official 68:d3d0e710b443 95
mbed_official 48:e9a2c7cb57a4 96 rt_tsk_lock();
mbed_official 92:bc9729798a19 97 scheduler_suspended = 1;
mbed_official 68:d3d0e710b443 98
mbed_official 48:e9a2c7cb57a4 99 if (os_dly.p_dlnk) {
mbed_official 48:e9a2c7cb57a4 100 delta = os_dly.delta_time;
mbed_official 48:e9a2c7cb57a4 101 }
mbed_official 92:bc9729798a19 102 #ifdef __CMSIS_RTOS
mbed_official 92:bc9729798a19 103 sleep = sysUserTimerWakeupTime();
mbed_official 92:bc9729798a19 104 if (sleep < delta) delta = sleep;
mbed_official 92:bc9729798a19 105 #else
mbed_official 48:e9a2c7cb57a4 106 if (os_tmr.next) {
mbed_official 48:e9a2c7cb57a4 107 if (os_tmr.tcnt < delta) delta = os_tmr.tcnt;
mbed_official 48:e9a2c7cb57a4 108 }
mbed_official 48:e9a2c7cb57a4 109 #endif
mbed_official 48:e9a2c7cb57a4 110
mbed_official 48:e9a2c7cb57a4 111 return (delta);
mbed_official 48:e9a2c7cb57a4 112 }
mbed_official 48:e9a2c7cb57a4 113
mbed_official 48:e9a2c7cb57a4 114
mbed_official 48:e9a2c7cb57a4 115 /*--------------------------- rt_resume -------------------------------------*/
mbed_official 48:e9a2c7cb57a4 116
mbed_official 92:bc9729798a19 117 extern void sysUserTimerUpdate (U32 sleep_time);
mbed_official 92:bc9729798a19 118
mbed_official 48:e9a2c7cb57a4 119 void rt_resume (U32 sleep_time) {
mbed_official 48:e9a2c7cb57a4 120 /* Resume OS scheduler after suspend */
mbed_official 48:e9a2c7cb57a4 121 P_TCB next;
mbed_official 48:e9a2c7cb57a4 122 U32 delta;
mbed_official 48:e9a2c7cb57a4 123
mbed_official 48:e9a2c7cb57a4 124 os_tsk.run->state = READY;
mbed_official 48:e9a2c7cb57a4 125 rt_put_rdy_first (os_tsk.run);
mbed_official 48:e9a2c7cb57a4 126
mbed_official 48:e9a2c7cb57a4 127 os_robin.task = NULL;
mbed_official 48:e9a2c7cb57a4 128
mbed_official 48:e9a2c7cb57a4 129 /* Update delays. */
mbed_official 48:e9a2c7cb57a4 130 if (os_dly.p_dlnk) {
mbed_official 48:e9a2c7cb57a4 131 delta = sleep_time;
mbed_official 48:e9a2c7cb57a4 132 if (delta >= os_dly.delta_time) {
mbed_official 48:e9a2c7cb57a4 133 delta -= os_dly.delta_time;
mbed_official 48:e9a2c7cb57a4 134 os_time += os_dly.delta_time;
mbed_official 48:e9a2c7cb57a4 135 os_dly.delta_time = 1;
mbed_official 48:e9a2c7cb57a4 136 while (os_dly.p_dlnk) {
mbed_official 48:e9a2c7cb57a4 137 rt_dec_dly();
mbed_official 48:e9a2c7cb57a4 138 if (delta == 0) break;
mbed_official 48:e9a2c7cb57a4 139 delta--;
mbed_official 48:e9a2c7cb57a4 140 os_time++;
mbed_official 48:e9a2c7cb57a4 141 }
mbed_official 48:e9a2c7cb57a4 142 } else {
mbed_official 48:e9a2c7cb57a4 143 os_time += delta;
mbed_official 48:e9a2c7cb57a4 144 os_dly.delta_time -= delta;
mbed_official 48:e9a2c7cb57a4 145 }
mbed_official 48:e9a2c7cb57a4 146 } else {
mbed_official 48:e9a2c7cb57a4 147 os_time += sleep_time;
mbed_official 48:e9a2c7cb57a4 148 }
mbed_official 48:e9a2c7cb57a4 149
mbed_official 48:e9a2c7cb57a4 150 /* Check the user timers. */
mbed_official 92:bc9729798a19 151 #ifdef __CMSIS_RTOS
mbed_official 92:bc9729798a19 152 sysUserTimerUpdate(sleep_time);
mbed_official 92:bc9729798a19 153 #else
mbed_official 48:e9a2c7cb57a4 154 if (os_tmr.next) {
mbed_official 48:e9a2c7cb57a4 155 delta = sleep_time;
mbed_official 48:e9a2c7cb57a4 156 if (delta >= os_tmr.tcnt) {
mbed_official 48:e9a2c7cb57a4 157 delta -= os_tmr.tcnt;
mbed_official 48:e9a2c7cb57a4 158 os_tmr.tcnt = 1;
mbed_official 48:e9a2c7cb57a4 159 while (os_tmr.next) {
mbed_official 48:e9a2c7cb57a4 160 rt_tmr_tick();
mbed_official 48:e9a2c7cb57a4 161 if (delta == 0) break;
mbed_official 48:e9a2c7cb57a4 162 delta--;
mbed_official 48:e9a2c7cb57a4 163 }
mbed_official 48:e9a2c7cb57a4 164 } else {
mbed_official 48:e9a2c7cb57a4 165 os_tmr.tcnt -= delta;
mbed_official 48:e9a2c7cb57a4 166 }
mbed_official 48:e9a2c7cb57a4 167 }
mbed_official 48:e9a2c7cb57a4 168 #endif
mbed_official 48:e9a2c7cb57a4 169
mbed_official 48:e9a2c7cb57a4 170 /* Switch back to highest ready task */
mbed_official 48:e9a2c7cb57a4 171 next = rt_get_first (&os_rdy);
mbed_official 48:e9a2c7cb57a4 172 rt_switch_req (next);
mbed_official 48:e9a2c7cb57a4 173
mbed_official 92:bc9729798a19 174 scheduler_suspended = 0;
mbed_official 48:e9a2c7cb57a4 175 rt_tsk_unlock();
mbed_official 48:e9a2c7cb57a4 176 }
mbed_official 48:e9a2c7cb57a4 177
mbed_official 48:e9a2c7cb57a4 178
mbed_official 48:e9a2c7cb57a4 179 /*--------------------------- rt_tsk_lock -----------------------------------*/
mbed_official 48:e9a2c7cb57a4 180
mbed_official 48:e9a2c7cb57a4 181 void rt_tsk_lock (void) {
mbed_official 48:e9a2c7cb57a4 182 /* Prevent task switching by locking out scheduler */
mbed_official 92:bc9729798a19 183 if (os_lock == __TRUE) // don't lock again if already locked
mbed_official 92:bc9729798a19 184 return;
mbed_official 92:bc9729798a19 185
mbed_official 48:e9a2c7cb57a4 186 if (os_tick_irqn < 0) {
mbed_official 48:e9a2c7cb57a4 187 OS_LOCK();
mbed_official 48:e9a2c7cb57a4 188 os_lock = __TRUE;
mbed_official 48:e9a2c7cb57a4 189 OS_UNPEND (&pend_flags);
mbed_official 48:e9a2c7cb57a4 190 } else {
mbed_official 48:e9a2c7cb57a4 191 OS_X_LOCK(os_tick_irqn);
mbed_official 48:e9a2c7cb57a4 192 os_lock = __TRUE;
mbed_official 48:e9a2c7cb57a4 193 OS_X_UNPEND (&pend_flags);
mbed_official 48:e9a2c7cb57a4 194 }
mbed_official 48:e9a2c7cb57a4 195 }
mbed_official 48:e9a2c7cb57a4 196
mbed_official 48:e9a2c7cb57a4 197
mbed_official 48:e9a2c7cb57a4 198 /*--------------------------- rt_tsk_unlock ---------------------------------*/
mbed_official 48:e9a2c7cb57a4 199
mbed_official 48:e9a2c7cb57a4 200 void rt_tsk_unlock (void) {
mbed_official 48:e9a2c7cb57a4 201 /* Unlock scheduler and re-enable task switching */
mbed_official 48:e9a2c7cb57a4 202 if (os_tick_irqn < 0) {
mbed_official 48:e9a2c7cb57a4 203 OS_UNLOCK();
mbed_official 48:e9a2c7cb57a4 204 os_lock = __FALSE;
mbed_official 48:e9a2c7cb57a4 205 OS_PEND (pend_flags, os_psh_flag);
mbed_official 48:e9a2c7cb57a4 206 os_psh_flag = __FALSE;
mbed_official 48:e9a2c7cb57a4 207 } else {
mbed_official 48:e9a2c7cb57a4 208 OS_X_UNLOCK(os_tick_irqn);
mbed_official 48:e9a2c7cb57a4 209 os_lock = __FALSE;
mbed_official 48:e9a2c7cb57a4 210 OS_X_PEND (pend_flags, os_psh_flag);
mbed_official 48:e9a2c7cb57a4 211 os_psh_flag = __FALSE;
mbed_official 48:e9a2c7cb57a4 212 }
mbed_official 48:e9a2c7cb57a4 213 }
mbed_official 48:e9a2c7cb57a4 214
mbed_official 48:e9a2c7cb57a4 215
mbed_official 48:e9a2c7cb57a4 216 /*--------------------------- rt_psh_req ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 217
mbed_official 48:e9a2c7cb57a4 218 void rt_psh_req (void) {
mbed_official 48:e9a2c7cb57a4 219 /* Initiate a post service handling request if required. */
mbed_official 48:e9a2c7cb57a4 220 if (os_lock == __FALSE) {
mbed_official 48:e9a2c7cb57a4 221 OS_PEND_IRQ ();
mbed_official 48:e9a2c7cb57a4 222 }
mbed_official 48:e9a2c7cb57a4 223 else {
mbed_official 48:e9a2c7cb57a4 224 os_psh_flag = __TRUE;
mbed_official 48:e9a2c7cb57a4 225 }
mbed_official 48:e9a2c7cb57a4 226 }
mbed_official 48:e9a2c7cb57a4 227
mbed_official 48:e9a2c7cb57a4 228
mbed_official 48:e9a2c7cb57a4 229 /*--------------------------- rt_pop_req ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 230
mbed_official 48:e9a2c7cb57a4 231 void rt_pop_req (void) {
mbed_official 48:e9a2c7cb57a4 232 /* Process an ISR post service requests. */
mbed_official 48:e9a2c7cb57a4 233 struct OS_XCB *p_CB;
mbed_official 48:e9a2c7cb57a4 234 P_TCB next;
mbed_official 48:e9a2c7cb57a4 235 U32 idx;
mbed_official 48:e9a2c7cb57a4 236
mbed_official 48:e9a2c7cb57a4 237 os_tsk.run->state = READY;
mbed_official 48:e9a2c7cb57a4 238 rt_put_rdy_first (os_tsk.run);
mbed_official 48:e9a2c7cb57a4 239
mbed_official 48:e9a2c7cb57a4 240 idx = os_psq->last;
mbed_official 48:e9a2c7cb57a4 241 while (os_psq->count) {
mbed_official 48:e9a2c7cb57a4 242 p_CB = os_psq->q[idx].id;
mbed_official 48:e9a2c7cb57a4 243 if (p_CB->cb_type == TCB) {
mbed_official 48:e9a2c7cb57a4 244 /* Is of TCB type */
mbed_official 48:e9a2c7cb57a4 245 rt_evt_psh ((P_TCB)p_CB, (U16)os_psq->q[idx].arg);
mbed_official 48:e9a2c7cb57a4 246 }
mbed_official 48:e9a2c7cb57a4 247 else if (p_CB->cb_type == MCB) {
mbed_official 48:e9a2c7cb57a4 248 /* Is of MCB type */
mbed_official 48:e9a2c7cb57a4 249 rt_mbx_psh ((P_MCB)p_CB, (void *)os_psq->q[idx].arg);
mbed_official 48:e9a2c7cb57a4 250 }
mbed_official 48:e9a2c7cb57a4 251 else {
mbed_official 48:e9a2c7cb57a4 252 /* Must be of SCB type */
mbed_official 48:e9a2c7cb57a4 253 rt_sem_psh ((P_SCB)p_CB);
mbed_official 48:e9a2c7cb57a4 254 }
mbed_official 48:e9a2c7cb57a4 255 if (++idx == os_psq->size) idx = 0;
mbed_official 48:e9a2c7cb57a4 256 rt_dec (&os_psq->count);
mbed_official 48:e9a2c7cb57a4 257 }
mbed_official 48:e9a2c7cb57a4 258 os_psq->last = idx;
mbed_official 48:e9a2c7cb57a4 259
mbed_official 48:e9a2c7cb57a4 260 next = rt_get_first (&os_rdy);
mbed_official 48:e9a2c7cb57a4 261 rt_switch_req (next);
mbed_official 48:e9a2c7cb57a4 262 }
mbed_official 48:e9a2c7cb57a4 263
mbed_official 48:e9a2c7cb57a4 264
mbed_official 48:e9a2c7cb57a4 265 /*--------------------------- os_tick_init ----------------------------------*/
mbed_official 48:e9a2c7cb57a4 266
mbed_official 48:e9a2c7cb57a4 267 __weak int os_tick_init (void) {
mbed_official 48:e9a2c7cb57a4 268 /* Initialize SysTick timer as system tick timer. */
mbed_official 48:e9a2c7cb57a4 269 rt_systick_init ();
mbed_official 48:e9a2c7cb57a4 270 return (-1); /* Return IRQ number of SysTick timer */
mbed_official 48:e9a2c7cb57a4 271 }
mbed_official 48:e9a2c7cb57a4 272
mbed_official 92:bc9729798a19 273 /*--------------------------- os_tick_val -----------------------------------*/
mbed_official 92:bc9729798a19 274
mbed_official 92:bc9729798a19 275 __weak U32 os_tick_val (void) {
mbed_official 92:bc9729798a19 276 /* Get SysTick timer current value (0 .. OS_TRV). */
mbed_official 92:bc9729798a19 277 return rt_systick_val();
mbed_official 92:bc9729798a19 278 }
mbed_official 92:bc9729798a19 279
mbed_official 92:bc9729798a19 280 /*--------------------------- os_tick_ovf -----------------------------------*/
mbed_official 92:bc9729798a19 281
mbed_official 92:bc9729798a19 282 __weak U32 os_tick_ovf (void) {
mbed_official 92:bc9729798a19 283 /* Get SysTick timer overflow flag */
mbed_official 92:bc9729798a19 284 return rt_systick_ovf();
mbed_official 92:bc9729798a19 285 }
mbed_official 48:e9a2c7cb57a4 286
mbed_official 48:e9a2c7cb57a4 287 /*--------------------------- os_tick_irqack --------------------------------*/
mbed_official 48:e9a2c7cb57a4 288
mbed_official 48:e9a2c7cb57a4 289 __weak void os_tick_irqack (void) {
mbed_official 48:e9a2c7cb57a4 290 /* Acknowledge timer interrupt. */
mbed_official 48:e9a2c7cb57a4 291 }
mbed_official 48:e9a2c7cb57a4 292
mbed_official 48:e9a2c7cb57a4 293
mbed_official 48:e9a2c7cb57a4 294 /*--------------------------- rt_systick ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 295
mbed_official 48:e9a2c7cb57a4 296 extern void sysTimerTick(void);
mbed_official 48:e9a2c7cb57a4 297
mbed_official 48:e9a2c7cb57a4 298 void rt_systick (void) {
mbed_official 48:e9a2c7cb57a4 299 /* Check for system clock update, suspend running task. */
mbed_official 48:e9a2c7cb57a4 300 P_TCB next;
mbed_official 48:e9a2c7cb57a4 301
mbed_official 48:e9a2c7cb57a4 302 os_tsk.run->state = READY;
mbed_official 48:e9a2c7cb57a4 303 rt_put_rdy_first (os_tsk.run);
mbed_official 48:e9a2c7cb57a4 304
mbed_official 48:e9a2c7cb57a4 305 /* Check Round Robin timeout. */
mbed_official 48:e9a2c7cb57a4 306 rt_chk_robin ();
mbed_official 48:e9a2c7cb57a4 307
mbed_official 48:e9a2c7cb57a4 308 /* Update delays. */
mbed_official 48:e9a2c7cb57a4 309 os_time++;
mbed_official 48:e9a2c7cb57a4 310 rt_dec_dly ();
mbed_official 48:e9a2c7cb57a4 311
mbed_official 48:e9a2c7cb57a4 312 /* Check the user timers. */
mbed_official 48:e9a2c7cb57a4 313 #ifdef __CMSIS_RTOS
mbed_official 48:e9a2c7cb57a4 314 sysTimerTick();
mbed_official 48:e9a2c7cb57a4 315 #else
mbed_official 48:e9a2c7cb57a4 316 rt_tmr_tick ();
mbed_official 48:e9a2c7cb57a4 317 #endif
mbed_official 48:e9a2c7cb57a4 318
mbed_official 48:e9a2c7cb57a4 319 /* Switch back to highest ready task */
mbed_official 48:e9a2c7cb57a4 320 next = rt_get_first (&os_rdy);
mbed_official 48:e9a2c7cb57a4 321 rt_switch_req (next);
mbed_official 48:e9a2c7cb57a4 322 }
mbed_official 48:e9a2c7cb57a4 323
mbed_official 48:e9a2c7cb57a4 324 /*--------------------------- rt_stk_check ----------------------------------*/
mbed_official 48:e9a2c7cb57a4 325
mbed_official 48:e9a2c7cb57a4 326 __weak void rt_stk_check (void) {
mbed_official 48:e9a2c7cb57a4 327 /* Check for stack overflow. */
mbed_official 68:d3d0e710b443 328 if ((os_tsk.run->tsk_stack < (U32)os_tsk.run->stack) ||
mbed_official 48:e9a2c7cb57a4 329 (os_tsk.run->stack[0] != MAGIC_WORD)) {
mbed_official 48:e9a2c7cb57a4 330 os_error (OS_ERR_STK_OVF);
mbed_official 48:e9a2c7cb57a4 331 }
mbed_official 48:e9a2c7cb57a4 332 }
mbed_official 48:e9a2c7cb57a4 333
mbed_official 48:e9a2c7cb57a4 334 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 335 * end of file
mbed_official 48:e9a2c7cb57a4 336 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 337