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

Dependents:   LoRaWAN-lmic-app LoRaWAN-lmic-app LoRaWAN-test-10secs testes ... more

Committer:
mbed_official
Date:
Fri Apr 10 07:16:43 2015 +0100
Revision:
72:83895f30f8f2
Parent:
68:d3d0e710b443
Synchronized with git revision 8311bafba5b8684f95626e096aef2dc8cc6805bf

Full URL: https://github.com/mbedmicro/mbed/commit/8311bafba5b8684f95626e096aef2dc8cc6805bf/

MAXWSNENV - Fixing comments in startup file for ARM compiler.

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 48:e9a2c7cb57a4 6 * Rev.: V4.60
mbed_official 48:e9a2c7cb57a4 7 *----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 8 *
mbed_official 48:e9a2c7cb57a4 9 * Copyright (c) 1999-2009 KEIL, 2009-2012 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 48:e9a2c7cb57a4 57
mbed_official 48:e9a2c7cb57a4 58 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 59 * Local Variables
mbed_official 48:e9a2c7cb57a4 60 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 61
mbed_official 48:e9a2c7cb57a4 62 static volatile BIT os_lock;
mbed_official 48:e9a2c7cb57a4 63 static volatile BIT os_psh_flag;
mbed_official 48:e9a2c7cb57a4 64 #ifndef __CORTEX_A9
mbed_official 48:e9a2c7cb57a4 65 static U8 pend_flags;
mbed_official 48:e9a2c7cb57a4 66 #endif
mbed_official 48:e9a2c7cb57a4 67 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 68 * Global Functions
mbed_official 48:e9a2c7cb57a4 69 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 70
mbed_official 48:e9a2c7cb57a4 71 #if defined (__CC_ARM)
mbed_official 48:e9a2c7cb57a4 72 __asm void $$RTX$$version (void) {
mbed_official 48:e9a2c7cb57a4 73 /* Export a version number symbol for a version control. */
mbed_official 48:e9a2c7cb57a4 74
mbed_official 48:e9a2c7cb57a4 75 EXPORT __RL_RTX_VER
mbed_official 48:e9a2c7cb57a4 76
mbed_official 48:e9a2c7cb57a4 77 __RL_RTX_VER EQU 0x450
mbed_official 48:e9a2c7cb57a4 78 }
mbed_official 48:e9a2c7cb57a4 79 #endif
mbed_official 48:e9a2c7cb57a4 80
mbed_official 48:e9a2c7cb57a4 81
mbed_official 48:e9a2c7cb57a4 82 /*--------------------------- rt_suspend ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 83
mbed_official 48:e9a2c7cb57a4 84 U32 rt_suspend (void) {
mbed_official 48:e9a2c7cb57a4 85 /* Suspend OS scheduler */
mbed_official 48:e9a2c7cb57a4 86 U32 delta = 0xFFFF;
mbed_official 68:d3d0e710b443 87
mbed_official 48:e9a2c7cb57a4 88 rt_tsk_lock();
mbed_official 68:d3d0e710b443 89
mbed_official 48:e9a2c7cb57a4 90 if (os_dly.p_dlnk) {
mbed_official 48:e9a2c7cb57a4 91 delta = os_dly.delta_time;
mbed_official 48:e9a2c7cb57a4 92 }
mbed_official 48:e9a2c7cb57a4 93 #ifndef __CMSIS_RTOS
mbed_official 48:e9a2c7cb57a4 94 if (os_tmr.next) {
mbed_official 48:e9a2c7cb57a4 95 if (os_tmr.tcnt < delta) delta = os_tmr.tcnt;
mbed_official 48:e9a2c7cb57a4 96 }
mbed_official 48:e9a2c7cb57a4 97 #endif
mbed_official 48:e9a2c7cb57a4 98
mbed_official 48:e9a2c7cb57a4 99 return (delta);
mbed_official 48:e9a2c7cb57a4 100 }
mbed_official 48:e9a2c7cb57a4 101
mbed_official 48:e9a2c7cb57a4 102
mbed_official 48:e9a2c7cb57a4 103 /*--------------------------- rt_resume -------------------------------------*/
mbed_official 48:e9a2c7cb57a4 104
mbed_official 48:e9a2c7cb57a4 105 void rt_resume (U32 sleep_time) {
mbed_official 48:e9a2c7cb57a4 106 /* Resume OS scheduler after suspend */
mbed_official 48:e9a2c7cb57a4 107 P_TCB next;
mbed_official 48:e9a2c7cb57a4 108 U32 delta;
mbed_official 48:e9a2c7cb57a4 109
mbed_official 48:e9a2c7cb57a4 110 os_tsk.run->state = READY;
mbed_official 48:e9a2c7cb57a4 111 rt_put_rdy_first (os_tsk.run);
mbed_official 48:e9a2c7cb57a4 112
mbed_official 48:e9a2c7cb57a4 113 os_robin.task = NULL;
mbed_official 48:e9a2c7cb57a4 114
mbed_official 48:e9a2c7cb57a4 115 /* Update delays. */
mbed_official 48:e9a2c7cb57a4 116 if (os_dly.p_dlnk) {
mbed_official 48:e9a2c7cb57a4 117 delta = sleep_time;
mbed_official 48:e9a2c7cb57a4 118 if (delta >= os_dly.delta_time) {
mbed_official 48:e9a2c7cb57a4 119 delta -= os_dly.delta_time;
mbed_official 48:e9a2c7cb57a4 120 os_time += os_dly.delta_time;
mbed_official 48:e9a2c7cb57a4 121 os_dly.delta_time = 1;
mbed_official 48:e9a2c7cb57a4 122 while (os_dly.p_dlnk) {
mbed_official 48:e9a2c7cb57a4 123 rt_dec_dly();
mbed_official 48:e9a2c7cb57a4 124 if (delta == 0) break;
mbed_official 48:e9a2c7cb57a4 125 delta--;
mbed_official 48:e9a2c7cb57a4 126 os_time++;
mbed_official 48:e9a2c7cb57a4 127 }
mbed_official 48:e9a2c7cb57a4 128 } else {
mbed_official 48:e9a2c7cb57a4 129 os_time += delta;
mbed_official 48:e9a2c7cb57a4 130 os_dly.delta_time -= delta;
mbed_official 48:e9a2c7cb57a4 131 }
mbed_official 48:e9a2c7cb57a4 132 } else {
mbed_official 48:e9a2c7cb57a4 133 os_time += sleep_time;
mbed_official 48:e9a2c7cb57a4 134 }
mbed_official 48:e9a2c7cb57a4 135
mbed_official 48:e9a2c7cb57a4 136 #ifndef __CMSIS_RTOS
mbed_official 48:e9a2c7cb57a4 137 /* Check the user timers. */
mbed_official 48:e9a2c7cb57a4 138 if (os_tmr.next) {
mbed_official 48:e9a2c7cb57a4 139 delta = sleep_time;
mbed_official 48:e9a2c7cb57a4 140 if (delta >= os_tmr.tcnt) {
mbed_official 48:e9a2c7cb57a4 141 delta -= os_tmr.tcnt;
mbed_official 48:e9a2c7cb57a4 142 os_tmr.tcnt = 1;
mbed_official 48:e9a2c7cb57a4 143 while (os_tmr.next) {
mbed_official 48:e9a2c7cb57a4 144 rt_tmr_tick();
mbed_official 48:e9a2c7cb57a4 145 if (delta == 0) break;
mbed_official 48:e9a2c7cb57a4 146 delta--;
mbed_official 48:e9a2c7cb57a4 147 }
mbed_official 48:e9a2c7cb57a4 148 } else {
mbed_official 48:e9a2c7cb57a4 149 os_tmr.tcnt -= delta;
mbed_official 48:e9a2c7cb57a4 150 }
mbed_official 48:e9a2c7cb57a4 151 }
mbed_official 48:e9a2c7cb57a4 152 #endif
mbed_official 48:e9a2c7cb57a4 153
mbed_official 48:e9a2c7cb57a4 154 /* Switch back to highest ready task */
mbed_official 48:e9a2c7cb57a4 155 next = rt_get_first (&os_rdy);
mbed_official 48:e9a2c7cb57a4 156 rt_switch_req (next);
mbed_official 48:e9a2c7cb57a4 157
mbed_official 48:e9a2c7cb57a4 158 rt_tsk_unlock();
mbed_official 48:e9a2c7cb57a4 159 }
mbed_official 48:e9a2c7cb57a4 160
mbed_official 48:e9a2c7cb57a4 161
mbed_official 48:e9a2c7cb57a4 162 /*--------------------------- rt_tsk_lock -----------------------------------*/
mbed_official 48:e9a2c7cb57a4 163
mbed_official 48:e9a2c7cb57a4 164 void rt_tsk_lock (void) {
mbed_official 48:e9a2c7cb57a4 165 /* Prevent task switching by locking out scheduler */
mbed_official 48:e9a2c7cb57a4 166 if (os_tick_irqn < 0) {
mbed_official 48:e9a2c7cb57a4 167 OS_LOCK();
mbed_official 48:e9a2c7cb57a4 168 os_lock = __TRUE;
mbed_official 48:e9a2c7cb57a4 169 OS_UNPEND (&pend_flags);
mbed_official 48:e9a2c7cb57a4 170 } else {
mbed_official 48:e9a2c7cb57a4 171 OS_X_LOCK(os_tick_irqn);
mbed_official 48:e9a2c7cb57a4 172 os_lock = __TRUE;
mbed_official 48:e9a2c7cb57a4 173 OS_X_UNPEND (&pend_flags);
mbed_official 48:e9a2c7cb57a4 174 }
mbed_official 48:e9a2c7cb57a4 175 }
mbed_official 48:e9a2c7cb57a4 176
mbed_official 48:e9a2c7cb57a4 177
mbed_official 48:e9a2c7cb57a4 178 /*--------------------------- rt_tsk_unlock ---------------------------------*/
mbed_official 48:e9a2c7cb57a4 179
mbed_official 48:e9a2c7cb57a4 180 void rt_tsk_unlock (void) {
mbed_official 48:e9a2c7cb57a4 181 /* Unlock scheduler and re-enable task switching */
mbed_official 48:e9a2c7cb57a4 182 if (os_tick_irqn < 0) {
mbed_official 48:e9a2c7cb57a4 183 OS_UNLOCK();
mbed_official 48:e9a2c7cb57a4 184 os_lock = __FALSE;
mbed_official 48:e9a2c7cb57a4 185 OS_PEND (pend_flags, os_psh_flag);
mbed_official 48:e9a2c7cb57a4 186 os_psh_flag = __FALSE;
mbed_official 48:e9a2c7cb57a4 187 } else {
mbed_official 48:e9a2c7cb57a4 188 OS_X_UNLOCK(os_tick_irqn);
mbed_official 48:e9a2c7cb57a4 189 os_lock = __FALSE;
mbed_official 48:e9a2c7cb57a4 190 OS_X_PEND (pend_flags, os_psh_flag);
mbed_official 48:e9a2c7cb57a4 191 os_psh_flag = __FALSE;
mbed_official 48:e9a2c7cb57a4 192 }
mbed_official 48:e9a2c7cb57a4 193 }
mbed_official 48:e9a2c7cb57a4 194
mbed_official 48:e9a2c7cb57a4 195
mbed_official 48:e9a2c7cb57a4 196 /*--------------------------- rt_psh_req ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 197
mbed_official 48:e9a2c7cb57a4 198 void rt_psh_req (void) {
mbed_official 48:e9a2c7cb57a4 199 /* Initiate a post service handling request if required. */
mbed_official 48:e9a2c7cb57a4 200 if (os_lock == __FALSE) {
mbed_official 48:e9a2c7cb57a4 201 OS_PEND_IRQ ();
mbed_official 48:e9a2c7cb57a4 202 }
mbed_official 48:e9a2c7cb57a4 203 else {
mbed_official 48:e9a2c7cb57a4 204 os_psh_flag = __TRUE;
mbed_official 48:e9a2c7cb57a4 205 }
mbed_official 48:e9a2c7cb57a4 206 }
mbed_official 48:e9a2c7cb57a4 207
mbed_official 48:e9a2c7cb57a4 208
mbed_official 48:e9a2c7cb57a4 209 /*--------------------------- rt_pop_req ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 210
mbed_official 48:e9a2c7cb57a4 211 void rt_pop_req (void) {
mbed_official 48:e9a2c7cb57a4 212 /* Process an ISR post service requests. */
mbed_official 48:e9a2c7cb57a4 213 struct OS_XCB *p_CB;
mbed_official 48:e9a2c7cb57a4 214 P_TCB next;
mbed_official 48:e9a2c7cb57a4 215 U32 idx;
mbed_official 48:e9a2c7cb57a4 216
mbed_official 48:e9a2c7cb57a4 217 os_tsk.run->state = READY;
mbed_official 48:e9a2c7cb57a4 218 rt_put_rdy_first (os_tsk.run);
mbed_official 48:e9a2c7cb57a4 219
mbed_official 48:e9a2c7cb57a4 220 idx = os_psq->last;
mbed_official 48:e9a2c7cb57a4 221 while (os_psq->count) {
mbed_official 48:e9a2c7cb57a4 222 p_CB = os_psq->q[idx].id;
mbed_official 48:e9a2c7cb57a4 223 if (p_CB->cb_type == TCB) {
mbed_official 48:e9a2c7cb57a4 224 /* Is of TCB type */
mbed_official 48:e9a2c7cb57a4 225 rt_evt_psh ((P_TCB)p_CB, (U16)os_psq->q[idx].arg);
mbed_official 48:e9a2c7cb57a4 226 }
mbed_official 48:e9a2c7cb57a4 227 else if (p_CB->cb_type == MCB) {
mbed_official 48:e9a2c7cb57a4 228 /* Is of MCB type */
mbed_official 48:e9a2c7cb57a4 229 rt_mbx_psh ((P_MCB)p_CB, (void *)os_psq->q[idx].arg);
mbed_official 48:e9a2c7cb57a4 230 }
mbed_official 48:e9a2c7cb57a4 231 else {
mbed_official 48:e9a2c7cb57a4 232 /* Must be of SCB type */
mbed_official 48:e9a2c7cb57a4 233 rt_sem_psh ((P_SCB)p_CB);
mbed_official 48:e9a2c7cb57a4 234 }
mbed_official 48:e9a2c7cb57a4 235 if (++idx == os_psq->size) idx = 0;
mbed_official 48:e9a2c7cb57a4 236 rt_dec (&os_psq->count);
mbed_official 48:e9a2c7cb57a4 237 }
mbed_official 48:e9a2c7cb57a4 238 os_psq->last = idx;
mbed_official 48:e9a2c7cb57a4 239
mbed_official 48:e9a2c7cb57a4 240 next = rt_get_first (&os_rdy);
mbed_official 48:e9a2c7cb57a4 241 rt_switch_req (next);
mbed_official 48:e9a2c7cb57a4 242 }
mbed_official 48:e9a2c7cb57a4 243
mbed_official 48:e9a2c7cb57a4 244
mbed_official 48:e9a2c7cb57a4 245 /*--------------------------- os_tick_init ----------------------------------*/
mbed_official 48:e9a2c7cb57a4 246
mbed_official 48:e9a2c7cb57a4 247 __weak int os_tick_init (void) {
mbed_official 48:e9a2c7cb57a4 248 /* Initialize SysTick timer as system tick timer. */
mbed_official 48:e9a2c7cb57a4 249 rt_systick_init ();
mbed_official 48:e9a2c7cb57a4 250 return (-1); /* Return IRQ number of SysTick timer */
mbed_official 48:e9a2c7cb57a4 251 }
mbed_official 48:e9a2c7cb57a4 252
mbed_official 48:e9a2c7cb57a4 253
mbed_official 48:e9a2c7cb57a4 254 /*--------------------------- os_tick_irqack --------------------------------*/
mbed_official 48:e9a2c7cb57a4 255
mbed_official 48:e9a2c7cb57a4 256 __weak void os_tick_irqack (void) {
mbed_official 48:e9a2c7cb57a4 257 /* Acknowledge timer interrupt. */
mbed_official 48:e9a2c7cb57a4 258 }
mbed_official 48:e9a2c7cb57a4 259
mbed_official 48:e9a2c7cb57a4 260
mbed_official 48:e9a2c7cb57a4 261 /*--------------------------- rt_systick ------------------------------------*/
mbed_official 48:e9a2c7cb57a4 262
mbed_official 48:e9a2c7cb57a4 263 extern void sysTimerTick(void);
mbed_official 48:e9a2c7cb57a4 264
mbed_official 48:e9a2c7cb57a4 265 void rt_systick (void) {
mbed_official 48:e9a2c7cb57a4 266 /* Check for system clock update, suspend running task. */
mbed_official 48:e9a2c7cb57a4 267 P_TCB next;
mbed_official 48:e9a2c7cb57a4 268
mbed_official 48:e9a2c7cb57a4 269 os_tsk.run->state = READY;
mbed_official 48:e9a2c7cb57a4 270 rt_put_rdy_first (os_tsk.run);
mbed_official 48:e9a2c7cb57a4 271
mbed_official 48:e9a2c7cb57a4 272 /* Check Round Robin timeout. */
mbed_official 48:e9a2c7cb57a4 273 rt_chk_robin ();
mbed_official 48:e9a2c7cb57a4 274
mbed_official 48:e9a2c7cb57a4 275 /* Update delays. */
mbed_official 48:e9a2c7cb57a4 276 os_time++;
mbed_official 48:e9a2c7cb57a4 277 rt_dec_dly ();
mbed_official 48:e9a2c7cb57a4 278
mbed_official 48:e9a2c7cb57a4 279 /* Check the user timers. */
mbed_official 48:e9a2c7cb57a4 280 #ifdef __CMSIS_RTOS
mbed_official 48:e9a2c7cb57a4 281 sysTimerTick();
mbed_official 48:e9a2c7cb57a4 282 #else
mbed_official 48:e9a2c7cb57a4 283 rt_tmr_tick ();
mbed_official 48:e9a2c7cb57a4 284 #endif
mbed_official 48:e9a2c7cb57a4 285
mbed_official 48:e9a2c7cb57a4 286 /* Switch back to highest ready task */
mbed_official 48:e9a2c7cb57a4 287 next = rt_get_first (&os_rdy);
mbed_official 48:e9a2c7cb57a4 288 rt_switch_req (next);
mbed_official 48:e9a2c7cb57a4 289 }
mbed_official 48:e9a2c7cb57a4 290
mbed_official 48:e9a2c7cb57a4 291 /*--------------------------- rt_stk_check ----------------------------------*/
mbed_official 48:e9a2c7cb57a4 292
mbed_official 48:e9a2c7cb57a4 293 __weak void rt_stk_check (void) {
mbed_official 48:e9a2c7cb57a4 294 /* Check for stack overflow. */
mbed_official 68:d3d0e710b443 295 if ((os_tsk.run->tsk_stack < (U32)os_tsk.run->stack) ||
mbed_official 48:e9a2c7cb57a4 296 (os_tsk.run->stack[0] != MAGIC_WORD)) {
mbed_official 48:e9a2c7cb57a4 297 os_error (OS_ERR_STK_OVF);
mbed_official 48:e9a2c7cb57a4 298 }
mbed_official 48:e9a2c7cb57a4 299 }
mbed_official 48:e9a2c7cb57a4 300
mbed_official 48:e9a2c7cb57a4 301 /*----------------------------------------------------------------------------
mbed_official 48:e9a2c7cb57a4 302 * end of file
mbed_official 48:e9a2c7cb57a4 303 *---------------------------------------------------------------------------*/
mbed_official 48:e9a2c7cb57a4 304