ProjetoBB

Dependencies:   F7_Ethernet WebSocketClient mbed mcp3008

Fork of Nucleo_F746ZG_Ethernet by Dieter Graef

Committer:
DieterGraef
Date:
Sat Jun 18 10:49:12 2016 +0000
Revision:
0:f9b6112278fe
Ethernet for the NUCLEO STM32F746 Board Testprogram uses DHCP and NTP to set the clock

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DieterGraef 0:f9b6112278fe 1 /*----------------------------------------------------------------------------
DieterGraef 0:f9b6112278fe 2 * CMSIS-RTOS - RTX
DieterGraef 0:f9b6112278fe 3 *----------------------------------------------------------------------------
DieterGraef 0:f9b6112278fe 4 * Name: RT_HAL_CM.H
DieterGraef 0:f9b6112278fe 5 * Purpose: Hardware Abstraction Layer for Cortex-M definitions
DieterGraef 0:f9b6112278fe 6 * Rev.: V4.79
DieterGraef 0:f9b6112278fe 7 *----------------------------------------------------------------------------
DieterGraef 0:f9b6112278fe 8 *
DieterGraef 0:f9b6112278fe 9 * Copyright (c) 1999-2009 KEIL, 2009-2015 ARM Germany GmbH
DieterGraef 0:f9b6112278fe 10 * All rights reserved.
DieterGraef 0:f9b6112278fe 11 * Redistribution and use in source and binary forms, with or without
DieterGraef 0:f9b6112278fe 12 * modification, are permitted provided that the following conditions are met:
DieterGraef 0:f9b6112278fe 13 * - Redistributions of source code must retain the above copyright
DieterGraef 0:f9b6112278fe 14 * notice, this list of conditions and the following disclaimer.
DieterGraef 0:f9b6112278fe 15 * - Redistributions in binary form must reproduce the above copyright
DieterGraef 0:f9b6112278fe 16 * notice, this list of conditions and the following disclaimer in the
DieterGraef 0:f9b6112278fe 17 * documentation and/or other materials provided with the distribution.
DieterGraef 0:f9b6112278fe 18 * - Neither the name of ARM nor the names of its contributors may be used
DieterGraef 0:f9b6112278fe 19 * to endorse or promote products derived from this software without
DieterGraef 0:f9b6112278fe 20 * specific prior written permission.
DieterGraef 0:f9b6112278fe 21 *
DieterGraef 0:f9b6112278fe 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
DieterGraef 0:f9b6112278fe 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
DieterGraef 0:f9b6112278fe 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
DieterGraef 0:f9b6112278fe 25 * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
DieterGraef 0:f9b6112278fe 26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
DieterGraef 0:f9b6112278fe 27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
DieterGraef 0:f9b6112278fe 28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
DieterGraef 0:f9b6112278fe 29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
DieterGraef 0:f9b6112278fe 30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
DieterGraef 0:f9b6112278fe 31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
DieterGraef 0:f9b6112278fe 32 * POSSIBILITY OF SUCH DAMAGE.
DieterGraef 0:f9b6112278fe 33 *---------------------------------------------------------------------------*/
DieterGraef 0:f9b6112278fe 34
DieterGraef 0:f9b6112278fe 35 /* Definitions */
DieterGraef 0:f9b6112278fe 36 #define INITIAL_xPSR 0x01000000U
DieterGraef 0:f9b6112278fe 37 #define DEMCR_TRCENA 0x01000000U
DieterGraef 0:f9b6112278fe 38 #define ITM_ITMENA 0x00000001U
DieterGraef 0:f9b6112278fe 39 #define MAGIC_WORD 0xE25A2EA5U
DieterGraef 0:f9b6112278fe 40 #define MAGIC_PATTERN 0xCCCCCCCCU
DieterGraef 0:f9b6112278fe 41
DieterGraef 0:f9b6112278fe 42 #if defined (__CC_ARM) /* ARM Compiler */
DieterGraef 0:f9b6112278fe 43
DieterGraef 0:f9b6112278fe 44 #if ((defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M)) && !defined(NO_EXCLUSIVE_ACCESS))
DieterGraef 0:f9b6112278fe 45 #define __USE_EXCLUSIVE_ACCESS
DieterGraef 0:f9b6112278fe 46 #else
DieterGraef 0:f9b6112278fe 47 #undef __USE_EXCLUSIVE_ACCESS
DieterGraef 0:f9b6112278fe 48 #endif
DieterGraef 0:f9b6112278fe 49
DieterGraef 0:f9b6112278fe 50 #ifndef __CMSIS_GENERIC
DieterGraef 0:f9b6112278fe 51 #define __DMB() do {\
DieterGraef 0:f9b6112278fe 52 __schedule_barrier();\
DieterGraef 0:f9b6112278fe 53 __dmb(0xF);\
DieterGraef 0:f9b6112278fe 54 __schedule_barrier();\
DieterGraef 0:f9b6112278fe 55 } while (0)
DieterGraef 0:f9b6112278fe 56 #endif
DieterGraef 0:f9b6112278fe 57
DieterGraef 0:f9b6112278fe 58 #elif defined (__GNUC__) /* GNU Compiler */
DieterGraef 0:f9b6112278fe 59
DieterGraef 0:f9b6112278fe 60 #undef __USE_EXCLUSIVE_ACCESS
DieterGraef 0:f9b6112278fe 61
DieterGraef 0:f9b6112278fe 62 #if defined (__CORTEX_M0) || defined (__CORTEX_M0PLUS)
DieterGraef 0:f9b6112278fe 63 #define __TARGET_ARCH_6S_M
DieterGraef 0:f9b6112278fe 64 #endif
DieterGraef 0:f9b6112278fe 65
DieterGraef 0:f9b6112278fe 66 #if defined (__VFP_FP__) && !defined(__SOFTFP__)
DieterGraef 0:f9b6112278fe 67 #define __TARGET_FPU_VFP
DieterGraef 0:f9b6112278fe 68 #endif
DieterGraef 0:f9b6112278fe 69
DieterGraef 0:f9b6112278fe 70 #define __inline inline
DieterGraef 0:f9b6112278fe 71 #define __weak __attribute__((weak))
DieterGraef 0:f9b6112278fe 72
DieterGraef 0:f9b6112278fe 73 #ifndef __CMSIS_GENERIC
DieterGraef 0:f9b6112278fe 74
DieterGraef 0:f9b6112278fe 75 __attribute__((always_inline)) static inline void __enable_irq(void)
DieterGraef 0:f9b6112278fe 76 {
DieterGraef 0:f9b6112278fe 77 __asm volatile ("cpsie i");
DieterGraef 0:f9b6112278fe 78 }
DieterGraef 0:f9b6112278fe 79
DieterGraef 0:f9b6112278fe 80 __attribute__((always_inline)) static inline U32 __disable_irq(void)
DieterGraef 0:f9b6112278fe 81 {
DieterGraef 0:f9b6112278fe 82 U32 result;
DieterGraef 0:f9b6112278fe 83
DieterGraef 0:f9b6112278fe 84 __asm volatile ("mrs %0, primask" : "=r" (result));
DieterGraef 0:f9b6112278fe 85 __asm volatile ("cpsid i");
DieterGraef 0:f9b6112278fe 86 return(result & 1);
DieterGraef 0:f9b6112278fe 87 }
DieterGraef 0:f9b6112278fe 88
DieterGraef 0:f9b6112278fe 89 __attribute__((always_inline)) static inline void __DMB(void)
DieterGraef 0:f9b6112278fe 90 {
DieterGraef 0:f9b6112278fe 91 __asm volatile ("dmb 0xF":::"memory");
DieterGraef 0:f9b6112278fe 92 }
DieterGraef 0:f9b6112278fe 93
DieterGraef 0:f9b6112278fe 94 #endif
DieterGraef 0:f9b6112278fe 95
DieterGraef 0:f9b6112278fe 96 __attribute__(( always_inline)) static inline U8 __clz(U32 value)
DieterGraef 0:f9b6112278fe 97 {
DieterGraef 0:f9b6112278fe 98 U8 result;
DieterGraef 0:f9b6112278fe 99
DieterGraef 0:f9b6112278fe 100 __asm volatile ("clz %0, %1" : "=r" (result) : "r" (value));
DieterGraef 0:f9b6112278fe 101 return(result);
DieterGraef 0:f9b6112278fe 102 }
DieterGraef 0:f9b6112278fe 103
DieterGraef 0:f9b6112278fe 104 #elif defined (__ICCARM__) /* IAR Compiler */
DieterGraef 0:f9b6112278fe 105
DieterGraef 0:f9b6112278fe 106 #undef __USE_EXCLUSIVE_ACCESS
DieterGraef 0:f9b6112278fe 107
DieterGraef 0:f9b6112278fe 108 #if (__CORE__ == __ARM6M__)
DieterGraef 0:f9b6112278fe 109 #define __TARGET_ARCH_6S_M 1
DieterGraef 0:f9b6112278fe 110 #endif
DieterGraef 0:f9b6112278fe 111
DieterGraef 0:f9b6112278fe 112 #if defined __ARMVFP__
DieterGraef 0:f9b6112278fe 113 #define __TARGET_FPU_VFP 1
DieterGraef 0:f9b6112278fe 114 #endif
DieterGraef 0:f9b6112278fe 115
DieterGraef 0:f9b6112278fe 116 #define __inline inline
DieterGraef 0:f9b6112278fe 117
DieterGraef 0:f9b6112278fe 118 #ifndef __CMSIS_GENERIC
DieterGraef 0:f9b6112278fe 119
DieterGraef 0:f9b6112278fe 120 static inline void __enable_irq(void)
DieterGraef 0:f9b6112278fe 121 {
DieterGraef 0:f9b6112278fe 122 __asm volatile ("cpsie i");
DieterGraef 0:f9b6112278fe 123 }
DieterGraef 0:f9b6112278fe 124
DieterGraef 0:f9b6112278fe 125 static inline U32 __disable_irq(void)
DieterGraef 0:f9b6112278fe 126 {
DieterGraef 0:f9b6112278fe 127 U32 result;
DieterGraef 0:f9b6112278fe 128
DieterGraef 0:f9b6112278fe 129 __asm volatile ("mrs %0, primask" : "=r" (result));
DieterGraef 0:f9b6112278fe 130 __asm volatile ("cpsid i");
DieterGraef 0:f9b6112278fe 131 return(result & 1);
DieterGraef 0:f9b6112278fe 132 }
DieterGraef 0:f9b6112278fe 133
DieterGraef 0:f9b6112278fe 134 #endif
DieterGraef 0:f9b6112278fe 135
DieterGraef 0:f9b6112278fe 136 static inline U8 __clz(U32 value)
DieterGraef 0:f9b6112278fe 137 {
DieterGraef 0:f9b6112278fe 138 U8 result;
DieterGraef 0:f9b6112278fe 139
DieterGraef 0:f9b6112278fe 140 __asm volatile ("clz %0, %1" : "=r" (result) : "r" (value));
DieterGraef 0:f9b6112278fe 141 return(result);
DieterGraef 0:f9b6112278fe 142 }
DieterGraef 0:f9b6112278fe 143
DieterGraef 0:f9b6112278fe 144 #endif
DieterGraef 0:f9b6112278fe 145
DieterGraef 0:f9b6112278fe 146 /* NVIC registers */
DieterGraef 0:f9b6112278fe 147 #define NVIC_ST_CTRL (*((volatile U32 *)0xE000E010U))
DieterGraef 0:f9b6112278fe 148 #define NVIC_ST_RELOAD (*((volatile U32 *)0xE000E014U))
DieterGraef 0:f9b6112278fe 149 #define NVIC_ST_CURRENT (*((volatile U32 *)0xE000E018U))
DieterGraef 0:f9b6112278fe 150 #define NVIC_ISER ((volatile U32 *)0xE000E100U)
DieterGraef 0:f9b6112278fe 151 #define NVIC_ICER ((volatile U32 *)0xE000E180U)
DieterGraef 0:f9b6112278fe 152 #if defined(__TARGET_ARCH_6S_M)
DieterGraef 0:f9b6112278fe 153 #define NVIC_IP ((volatile U32 *)0xE000E400U)
DieterGraef 0:f9b6112278fe 154 #else
DieterGraef 0:f9b6112278fe 155 #define NVIC_IP ((volatile U8 *)0xE000E400U)
DieterGraef 0:f9b6112278fe 156 #endif
DieterGraef 0:f9b6112278fe 157 #define NVIC_INT_CTRL (*((volatile U32 *)0xE000ED04U))
DieterGraef 0:f9b6112278fe 158 #define NVIC_AIR_CTRL (*((volatile U32 *)0xE000ED0CU))
DieterGraef 0:f9b6112278fe 159 #define NVIC_SYS_PRI2 (*((volatile U32 *)0xE000ED1CU))
DieterGraef 0:f9b6112278fe 160 #define NVIC_SYS_PRI3 (*((volatile U32 *)0xE000ED20U))
DieterGraef 0:f9b6112278fe 161
DieterGraef 0:f9b6112278fe 162 #define OS_PEND_IRQ() NVIC_INT_CTRL = (1UL<<28)
DieterGraef 0:f9b6112278fe 163 #define OS_PENDING ((NVIC_INT_CTRL >> 26) & 5U)
DieterGraef 0:f9b6112278fe 164 #define OS_UNPEND(fl) NVIC_INT_CTRL = (U32)(fl = (U8)OS_PENDING) << 25
DieterGraef 0:f9b6112278fe 165 #define OS_PEND(fl,p) NVIC_INT_CTRL = (U32)(fl | (U8)(p<<2)) << 26
DieterGraef 0:f9b6112278fe 166 #define OS_LOCK() NVIC_ST_CTRL = 0x0005U
DieterGraef 0:f9b6112278fe 167 #define OS_UNLOCK() NVIC_ST_CTRL = 0x0007U
DieterGraef 0:f9b6112278fe 168
DieterGraef 0:f9b6112278fe 169 #define OS_X_PENDING ((NVIC_INT_CTRL >> 28) & 1U)
DieterGraef 0:f9b6112278fe 170 #define OS_X_UNPEND(fl) NVIC_INT_CTRL = (U32)(fl = (U8)OS_X_PENDING) << 27
DieterGraef 0:f9b6112278fe 171 #define OS_X_PEND(fl,p) NVIC_INT_CTRL = (U32)(fl | p) << 28
DieterGraef 0:f9b6112278fe 172 #if defined(__TARGET_ARCH_6S_M)
DieterGraef 0:f9b6112278fe 173 #define OS_X_INIT(n) NVIC_IP[n>>2] |= (U32)0xFFU << ((n & 0x03U) << 3); \
DieterGraef 0:f9b6112278fe 174 NVIC_ISER[n>>5] = (U32)1U << (n & 0x1FU)
DieterGraef 0:f9b6112278fe 175 #else
DieterGraef 0:f9b6112278fe 176 #define OS_X_INIT(n) NVIC_IP[n] = 0xFFU; \
DieterGraef 0:f9b6112278fe 177 NVIC_ISER[n>>5] = (U32)1U << (n & 0x1FU)
DieterGraef 0:f9b6112278fe 178 #endif
DieterGraef 0:f9b6112278fe 179 #define OS_X_LOCK(n) NVIC_ICER[n>>5] = (U32)1U << (n & 0x1FU)
DieterGraef 0:f9b6112278fe 180 #define OS_X_UNLOCK(n) NVIC_ISER[n>>5] = (U32)1U << (n & 0x1FU)
DieterGraef 0:f9b6112278fe 181
DieterGraef 0:f9b6112278fe 182 /* Core Debug registers */
DieterGraef 0:f9b6112278fe 183 #define DEMCR (*((volatile U32 *)0xE000EDFCU))
DieterGraef 0:f9b6112278fe 184
DieterGraef 0:f9b6112278fe 185 /* ITM registers */
DieterGraef 0:f9b6112278fe 186 #define ITM_CONTROL (*((volatile U32 *)0xE0000E80U))
DieterGraef 0:f9b6112278fe 187 #define ITM_ENABLE (*((volatile U32 *)0xE0000E00U))
DieterGraef 0:f9b6112278fe 188 #define ITM_PORT30_U32 (*((volatile U32 *)0xE0000078U))
DieterGraef 0:f9b6112278fe 189 #define ITM_PORT31_U32 (*((volatile U32 *)0xE000007CU))
DieterGraef 0:f9b6112278fe 190 #define ITM_PORT31_U16 (*((volatile U16 *)0xE000007CU))
DieterGraef 0:f9b6112278fe 191 #define ITM_PORT31_U8 (*((volatile U8 *)0xE000007CU))
DieterGraef 0:f9b6112278fe 192
DieterGraef 0:f9b6112278fe 193 /* Variables */
DieterGraef 0:f9b6112278fe 194 extern BIT dbg_msg;
DieterGraef 0:f9b6112278fe 195
DieterGraef 0:f9b6112278fe 196 /* Functions */
DieterGraef 0:f9b6112278fe 197 #ifdef __USE_EXCLUSIVE_ACCESS
DieterGraef 0:f9b6112278fe 198 #define rt_inc(p) while(__strex((__ldrex(p)+1U),p))
DieterGraef 0:f9b6112278fe 199 #define rt_dec(p) while(__strex((__ldrex(p)-1U),p))
DieterGraef 0:f9b6112278fe 200 #else
DieterGraef 0:f9b6112278fe 201 #define rt_inc(p) __disable_irq();(*p)++;__enable_irq();
DieterGraef 0:f9b6112278fe 202 #define rt_dec(p) __disable_irq();(*p)--;__enable_irq();
DieterGraef 0:f9b6112278fe 203 #endif
DieterGraef 0:f9b6112278fe 204
DieterGraef 0:f9b6112278fe 205 __inline static U32 rt_inc_qi (U32 size, U8 *count, U8 *first) {
DieterGraef 0:f9b6112278fe 206 U32 cnt,c2;
DieterGraef 0:f9b6112278fe 207 #ifdef __USE_EXCLUSIVE_ACCESS
DieterGraef 0:f9b6112278fe 208 do {
DieterGraef 0:f9b6112278fe 209 if ((cnt = __ldrex(count)) == size) {
DieterGraef 0:f9b6112278fe 210 __clrex();
DieterGraef 0:f9b6112278fe 211 return (cnt); }
DieterGraef 0:f9b6112278fe 212 } while (__strex(cnt+1U, count));
DieterGraef 0:f9b6112278fe 213 do {
DieterGraef 0:f9b6112278fe 214 c2 = (cnt = __ldrex(first)) + 1U;
DieterGraef 0:f9b6112278fe 215 if (c2 == size) { c2 = 0U; }
DieterGraef 0:f9b6112278fe 216 } while (__strex(c2, first));
DieterGraef 0:f9b6112278fe 217 #else
DieterGraef 0:f9b6112278fe 218 __disable_irq();
DieterGraef 0:f9b6112278fe 219 if ((cnt = *count) < size) {
DieterGraef 0:f9b6112278fe 220 *count = (U8)(cnt+1U);
DieterGraef 0:f9b6112278fe 221 c2 = (cnt = *first) + 1U;
DieterGraef 0:f9b6112278fe 222 if (c2 == size) { c2 = 0U; }
DieterGraef 0:f9b6112278fe 223 *first = (U8)c2;
DieterGraef 0:f9b6112278fe 224 }
DieterGraef 0:f9b6112278fe 225 __enable_irq ();
DieterGraef 0:f9b6112278fe 226 #endif
DieterGraef 0:f9b6112278fe 227 return (cnt);
DieterGraef 0:f9b6112278fe 228 }
DieterGraef 0:f9b6112278fe 229
DieterGraef 0:f9b6112278fe 230 __inline static void rt_systick_init (void) {
DieterGraef 0:f9b6112278fe 231 NVIC_ST_RELOAD = os_trv;
DieterGraef 0:f9b6112278fe 232 NVIC_ST_CURRENT = 0U;
DieterGraef 0:f9b6112278fe 233 NVIC_ST_CTRL = 0x0007U;
DieterGraef 0:f9b6112278fe 234 NVIC_SYS_PRI3 |= 0xFF000000U;
DieterGraef 0:f9b6112278fe 235 }
DieterGraef 0:f9b6112278fe 236
DieterGraef 0:f9b6112278fe 237 __inline static U32 rt_systick_val (void) {
DieterGraef 0:f9b6112278fe 238 return (os_trv - NVIC_ST_CURRENT);
DieterGraef 0:f9b6112278fe 239 }
DieterGraef 0:f9b6112278fe 240
DieterGraef 0:f9b6112278fe 241 __inline static U32 rt_systick_ovf (void) {
DieterGraef 0:f9b6112278fe 242 return ((NVIC_INT_CTRL >> 26) & 1U);
DieterGraef 0:f9b6112278fe 243 }
DieterGraef 0:f9b6112278fe 244
DieterGraef 0:f9b6112278fe 245 __inline static void rt_svc_init (void) {
DieterGraef 0:f9b6112278fe 246 #if !defined(__TARGET_ARCH_6S_M)
DieterGraef 0:f9b6112278fe 247 U32 sh,prigroup;
DieterGraef 0:f9b6112278fe 248 #endif
DieterGraef 0:f9b6112278fe 249 NVIC_SYS_PRI3 |= 0x00FF0000U;
DieterGraef 0:f9b6112278fe 250 #if defined(__TARGET_ARCH_6S_M)
DieterGraef 0:f9b6112278fe 251 NVIC_SYS_PRI2 |= (NVIC_SYS_PRI3<<(8+1)) & 0xFC000000U;
DieterGraef 0:f9b6112278fe 252 #else
DieterGraef 0:f9b6112278fe 253 sh = 8U - __clz(~((NVIC_SYS_PRI3 << 8) & 0xFF000000U));
DieterGraef 0:f9b6112278fe 254 prigroup = ((NVIC_AIR_CTRL >> 8) & 0x07U);
DieterGraef 0:f9b6112278fe 255 if (prigroup >= sh) {
DieterGraef 0:f9b6112278fe 256 sh = prigroup + 1U;
DieterGraef 0:f9b6112278fe 257 }
DieterGraef 0:f9b6112278fe 258 NVIC_SYS_PRI2 = ((0xFEFFFFFFU << sh) & 0xFF000000U) | (NVIC_SYS_PRI2 & 0x00FFFFFFU);
DieterGraef 0:f9b6112278fe 259 #endif
DieterGraef 0:f9b6112278fe 260 }
DieterGraef 0:f9b6112278fe 261
DieterGraef 0:f9b6112278fe 262 extern void rt_set_PSP (U32 stack);
DieterGraef 0:f9b6112278fe 263 extern U32 rt_get_PSP (void);
DieterGraef 0:f9b6112278fe 264 extern void os_set_env (void);
DieterGraef 0:f9b6112278fe 265 extern void *_alloc_box (void *box_mem);
DieterGraef 0:f9b6112278fe 266 extern U32 _free_box (void *box_mem, void *box);
DieterGraef 0:f9b6112278fe 267
DieterGraef 0:f9b6112278fe 268 extern void rt_init_stack (P_TCB p_TCB, FUNCP task_body);
DieterGraef 0:f9b6112278fe 269 extern void rt_ret_val (P_TCB p_TCB, U32 v0);
DieterGraef 0:f9b6112278fe 270 extern void rt_ret_val2 (P_TCB p_TCB, U32 v0, U32 v1);
DieterGraef 0:f9b6112278fe 271
DieterGraef 0:f9b6112278fe 272 extern void dbg_init (void);
DieterGraef 0:f9b6112278fe 273 extern void dbg_task_notify (P_TCB p_tcb, BOOL create);
DieterGraef 0:f9b6112278fe 274 extern void dbg_task_switch (U32 task_id);
DieterGraef 0:f9b6112278fe 275
DieterGraef 0:f9b6112278fe 276 #ifdef DBG_MSG
DieterGraef 0:f9b6112278fe 277 #define DBG_INIT() dbg_init()
DieterGraef 0:f9b6112278fe 278 #define DBG_TASK_NOTIFY(p_tcb,create) if (dbg_msg) dbg_task_notify(p_tcb,create)
DieterGraef 0:f9b6112278fe 279 #define DBG_TASK_SWITCH(task_id) if (dbg_msg && (os_tsk.new_tsk!=os_tsk.run)) \
DieterGraef 0:f9b6112278fe 280 dbg_task_switch(task_id)
DieterGraef 0:f9b6112278fe 281 #else
DieterGraef 0:f9b6112278fe 282 #define DBG_INIT()
DieterGraef 0:f9b6112278fe 283 #define DBG_TASK_NOTIFY(p_tcb,create)
DieterGraef 0:f9b6112278fe 284 #define DBG_TASK_SWITCH(task_id)
DieterGraef 0:f9b6112278fe 285 #endif
DieterGraef 0:f9b6112278fe 286
DieterGraef 0:f9b6112278fe 287 /*----------------------------------------------------------------------------
DieterGraef 0:f9b6112278fe 288 * end of file
DieterGraef 0:f9b6112278fe 289 *---------------------------------------------------------------------------*/