lwip operating system abstraction layer implementation based on CMSIS-RTOS

Dependents:   LwIPNetworking NetServicesMin EthernetInterface EthernetInterface_RSF ... more

Files at this revision

API Documentation at this revision

Comitter:
emilmont
Date:
Fri Mar 01 15:31:22 2013 +0000
Parent:
7:b409691fb352
Child:
9:d7ad3f3ee934
Commit message:
editor whitespaces

Changed in this revision

arch/cc.h Show annotated file Show diff for this revision Revisions of this file
arch/perf.h Show annotated file Show diff for this revision Revisions of this file
arch/sys_arch.h Show annotated file Show diff for this revision Revisions of this file
--- a/arch/cc.h	Fri Jul 27 10:17:19 2012 +0000
+++ b/arch/cc.h	Fri Mar 01 15:31:22 2013 +0000
@@ -1,107 +1,107 @@
-/* 
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
- * All rights reserved.  
- *  
- * Redistribution and use in source and binary forms, with or without modification,  
- * are permitted provided that the following conditions are met: 
- * 
- * 1. Redistributions of source code must retain the above copyright notice, 
- *    this list of conditions and the following disclaimer. 
- * 2. Redistributions in binary form must reproduce the above copyright notice, 
- *    this list of conditions and the following disclaimer in the documentation 
- *    and/or other materials provided with the distribution. 
- * 3. The name of the author may not be used to endorse or promote products 
- *    derived from this software without specific prior written permission.  
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
- * OF SUCH DAMAGE. 
- * 
- * This file is part of the lwIP TCP/IP stack. 
- *  
- * Author: Adam Dunkels <adam@sics.se> 
- * 
- */ 
-#ifndef __CC_H__ 
-#define __CC_H__ 
-
-#include <stdint.h>
-
-/* Types based on stdint.h */
-typedef uint8_t            u8_t; 
-typedef int8_t             s8_t; 
-typedef uint16_t           u16_t; 
-typedef int16_t            s16_t; 
-typedef uint32_t           u32_t; 
-typedef int32_t            s32_t; 
-typedef uintptr_t          mem_ptr_t; 
-
-/* Define (sn)printf formatters for these lwIP types */
-#define U16_F "hu"
-#define S16_F "hd"
-#define X16_F "hx"
-#define U32_F "lu"
-#define S32_F "ld"
-#define X32_F "lx"
-#define SZT_F "uz"
-
-/* ARM/LPC17xx is little endian only */
-#define BYTE_ORDER LITTLE_ENDIAN
-
-/* Use LWIP error codes */
-#define LWIP_PROVIDE_ERRNO
-
-#if defined(__arm__) && defined(__ARMCC_VERSION) 
-    /* Keil uVision4 tools */
-    #define PACK_STRUCT_BEGIN __packed
-    #define PACK_STRUCT_STRUCT
-    #define PACK_STRUCT_END
-    #define PACK_STRUCT_FIELD(fld) fld
-    #define ALIGNED(n)  __align(n)
-#elif defined (__IAR_SYSTEMS_ICC__) 
-    /* IAR Embedded Workbench tools */
-    #define PACK_STRUCT_BEGIN __packed
-    #define PACK_STRUCT_STRUCT
-    #define PACK_STRUCT_END
-    #define PACK_STRUCT_FIELD(fld) fld
-//    #define PACK_STRUCT_USE_INCLUDES
-    #error NEEDS ALIGNED // FIXME TBD
-#else 
-    /* GCC tools (CodeSourcery) */
-    #define PACK_STRUCT_BEGIN
-    #define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
-    #define PACK_STRUCT_END
-    #define PACK_STRUCT_FIELD(fld) fld
-    #define ALIGNED(n)  __attribute__((aligned (n)))
-    #define ALIGNED(n)  __align(n)
-#endif 
-
-/* Used with IP headers only */
-#define LWIP_CHKSUM_ALGORITHM 1
-
-#ifdef LWIP_DEBUG
-
-#include "stdio.h"
-
-void assert_printf(char *msg, int line, char *file);
-
-/* Plaform specific diagnostic output */
-#define LWIP_PLATFORM_DIAG(vars) printf vars
-#define LWIP_PLATFORM_ASSERT(flag) { assert_printf((flag), __LINE__, __FILE__); }
-#else
-#define LWIP_PLATFORM_DIAG(msg) { ; }
-#define LWIP_PLATFORM_ASSERT(flag) { ; }
-#endif 
-
-#include "cmsis.h"
-#define LWIP_PLATFORM_HTONS(x)      __REV16(x)
-#define LWIP_PLATFORM_HTONL(x)      __REV(x)
-
-#endif /* __CC_H__ */ 
+/* 
+ * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
+ * All rights reserved.  
+ *  
+ * Redistribution and use in source and binary forms, with or without modification,  
+ * are permitted provided that the following conditions are met: 
+ * 
+ * 1. Redistributions of source code must retain the above copyright notice, 
+ *    this list of conditions and the following disclaimer. 
+ * 2. Redistributions in binary form must reproduce the above copyright notice, 
+ *    this list of conditions and the following disclaimer in the documentation 
+ *    and/or other materials provided with the distribution. 
+ * 3. The name of the author may not be used to endorse or promote products 
+ *    derived from this software without specific prior written permission.  
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
+ * OF SUCH DAMAGE. 
+ * 
+ * This file is part of the lwIP TCP/IP stack. 
+ *  
+ * Author: Adam Dunkels <adam@sics.se> 
+ * 
+ */ 
+#ifndef __CC_H__ 
+#define __CC_H__ 
+
+#include <stdint.h>
+
+/* Types based on stdint.h */
+typedef uint8_t            u8_t; 
+typedef int8_t             s8_t; 
+typedef uint16_t           u16_t; 
+typedef int16_t            s16_t; 
+typedef uint32_t           u32_t; 
+typedef int32_t            s32_t; 
+typedef uintptr_t          mem_ptr_t; 
+
+/* Define (sn)printf formatters for these lwIP types */
+#define U16_F "hu"
+#define S16_F "hd"
+#define X16_F "hx"
+#define U32_F "lu"
+#define S32_F "ld"
+#define X32_F "lx"
+#define SZT_F "uz"
+
+/* ARM/LPC17xx is little endian only */
+#define BYTE_ORDER LITTLE_ENDIAN
+
+/* Use LWIP error codes */
+#define LWIP_PROVIDE_ERRNO
+
+#if defined(__arm__) && defined(__ARMCC_VERSION) 
+    /* Keil uVision4 tools */
+    #define PACK_STRUCT_BEGIN __packed
+    #define PACK_STRUCT_STRUCT
+    #define PACK_STRUCT_END
+    #define PACK_STRUCT_FIELD(fld) fld
+    #define ALIGNED(n)  __align(n)
+#elif defined (__IAR_SYSTEMS_ICC__) 
+    /* IAR Embedded Workbench tools */
+    #define PACK_STRUCT_BEGIN __packed
+    #define PACK_STRUCT_STRUCT
+    #define PACK_STRUCT_END
+    #define PACK_STRUCT_FIELD(fld) fld
+//    #define PACK_STRUCT_USE_INCLUDES
+    #error NEEDS ALIGNED // FIXME TBD
+#else 
+    /* GCC tools (CodeSourcery) */
+    #define PACK_STRUCT_BEGIN
+    #define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
+    #define PACK_STRUCT_END
+    #define PACK_STRUCT_FIELD(fld) fld
+    #define ALIGNED(n)  __attribute__((aligned (n)))
+    #define ALIGNED(n)  __align(n)
+#endif 
+
+/* Used with IP headers only */
+#define LWIP_CHKSUM_ALGORITHM 1
+
+#ifdef LWIP_DEBUG
+
+#include "stdio.h"
+
+void assert_printf(char *msg, int line, char *file);
+
+/* Plaform specific diagnostic output */
+#define LWIP_PLATFORM_DIAG(vars) printf vars
+#define LWIP_PLATFORM_ASSERT(flag) { assert_printf((flag), __LINE__, __FILE__); }
+#else
+#define LWIP_PLATFORM_DIAG(msg) { ; }
+#define LWIP_PLATFORM_ASSERT(flag) { ; }
+#endif 
+
+#include "cmsis.h"
+#define LWIP_PLATFORM_HTONS(x)      __REV16(x)
+#define LWIP_PLATFORM_HTONL(x)      __REV(x)
+
+#endif /* __CC_H__ */ 
--- a/arch/perf.h	Fri Jul 27 10:17:19 2012 +0000
+++ b/arch/perf.h	Fri Mar 01 15:31:22 2013 +0000
@@ -1,38 +1,38 @@
-/*
- * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without modification, 
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission. 
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
- * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
- * OF SUCH DAMAGE.
- *
- * This file is part of the lwIP TCP/IP stack.
- * 
- * Author: Adam Dunkels <adam@sics.se>
- *
- */
-#ifndef __PERF_H__
-#define __PERF_H__
-
-#define PERF_START    /* null definition */
-#define PERF_STOP(x)  /* null definition */
-
-#endif /* __PERF_H__ */
+/*
+ * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
+ * All rights reserved. 
+ * 
+ * Redistribution and use in source and binary forms, with or without modification, 
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the lwIP TCP/IP stack.
+ * 
+ * Author: Adam Dunkels <adam@sics.se>
+ *
+ */
+#ifndef __PERF_H__
+#define __PERF_H__
+
+#define PERF_START    /* null definition */
+#define PERF_STOP(x)  /* null definition */
+
+#endif /* __PERF_H__ */
--- a/arch/sys_arch.h	Fri Jul 27 10:17:19 2012 +0000
+++ b/arch/sys_arch.h	Fri Mar 01 15:31:22 2013 +0000
@@ -1,120 +1,120 @@
-/* Copyright (C) 2012 mbed.org, MIT License
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
- * and associated documentation files (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge, publish, distribute,
- * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all copies or
- * substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
- * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#ifndef __ARCH_SYS_ARCH_H__
-#define __ARCH_SYS_ARCH_H__
-
-#include "lwip/opt.h"
-
-#if NO_SYS == 0
-#include "cmsis_os.h"
-
-// === SEMAPHORE ===
-typedef struct {
-    osSemaphoreId    id;
-    osSemaphoreDef_t def;
-#ifdef CMSIS_OS_RTX
-    uint32_t         data[2];
-#endif
-} sys_sem_t;
-
-#define sys_sem_valid(x)        (((*x).id == NULL) ? 0 : 1)
-#define sys_sem_set_invalid(x)  ( (*x).id = NULL)
-
-// === MUTEX ===
-typedef struct {
-    osMutexId    id;
-    osMutexDef_t def;
-#ifdef CMSIS_OS_RTX
-    int32_t      data[3];
-#endif
-} sys_mutex_t;
-
-// === MAIL BOX ===
-#define MB_SIZE      8
-
-typedef struct {
-    osMessageQId    id;
-    osMessageQDef_t def;
-#ifdef CMSIS_OS_RTX
-    uint32_t        queue[MB_SIZE];
-#endif
-} sys_mbox_t;
-
-#define SYS_MBOX_NULL               ((uint32_t) NULL)
-#define sys_mbox_valid(x)           (((*x).id == NULL) ? 0 : 1 )
-#define sys_mbox_set_invalid(x)     ( (*x).id = NULL )
-
-#if ((DEFAULT_RAW_RECVMBOX_SIZE) > (MB_SIZE)) || \
-    ((DEFAULT_UDP_RECVMBOX_SIZE) > (MB_SIZE)) || \
-    ((DEFAULT_TCP_RECVMBOX_SIZE) > (MB_SIZE)) || \
-    ((DEFAULT_ACCEPTMBOX_SIZE)   > (MB_SIZE)) || \
-    ((TCPIP_MBOX_SIZE)           > (MB_SIZE))
-#   error Mailbox size not supported
-#endif
-
-// === THREAD ===
-typedef struct {
-    osThreadId    id;
-    osThreadDef_t def;
-} sys_thread_data_t;
-typedef sys_thread_data_t* sys_thread_t;
-
-#define SYS_THREAD_POOL_N                   6
-#define SYS_DEFAULT_THREAD_STACK_DEPTH      DEFAULT_STACK_SIZE
-
-// === PROTECTION ===
-typedef int sys_prot_t;
-
-#else
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-/** \brief  Init systick to 1ms rate
- *
- *  This init the systick to 1ms rate. This function is only used in standalone
- *  systems.
- */
-void SysTick_Init(void);
-
-
-/** \brief  Get the current systick time in milliSeconds
- *
- *  Returns the current systick time in milliSeconds. This function is only
- *  used in standalone systems.
- *
- *  /returns current systick time in milliSeconds
- */
-uint32_t SysTick_GetMS(void);
-
-/** \brief  Delay for the specified number of milliSeconds
- *
- *  For standalone systems. This function will block for the specified
- *  number of milliSconds. For RTOS based systems, this function will delay
- *  the task by the specified number of milliSeconds.
- *
- *  \param[in]  ms Time in milliSeconds to delay
- */
-void osDelay(uint32_t ms);
-
-#ifdef  __cplusplus
-}
-#endif
-#endif
-
-#endif /* __ARCH_SYS_ARCH_H__ */
+/* Copyright (C) 2012 mbed.org, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef __ARCH_SYS_ARCH_H__
+#define __ARCH_SYS_ARCH_H__
+
+#include "lwip/opt.h"
+
+#if NO_SYS == 0
+#include "cmsis_os.h"
+
+// === SEMAPHORE ===
+typedef struct {
+    osSemaphoreId    id;
+    osSemaphoreDef_t def;
+#ifdef CMSIS_OS_RTX
+    uint32_t         data[2];
+#endif
+} sys_sem_t;
+
+#define sys_sem_valid(x)        (((*x).id == NULL) ? 0 : 1)
+#define sys_sem_set_invalid(x)  ( (*x).id = NULL)
+
+// === MUTEX ===
+typedef struct {
+    osMutexId    id;
+    osMutexDef_t def;
+#ifdef CMSIS_OS_RTX
+    int32_t      data[3];
+#endif
+} sys_mutex_t;
+
+// === MAIL BOX ===
+#define MB_SIZE      8
+
+typedef struct {
+    osMessageQId    id;
+    osMessageQDef_t def;
+#ifdef CMSIS_OS_RTX
+    uint32_t        queue[MB_SIZE];
+#endif
+} sys_mbox_t;
+
+#define SYS_MBOX_NULL               ((uint32_t) NULL)
+#define sys_mbox_valid(x)           (((*x).id == NULL) ? 0 : 1 )
+#define sys_mbox_set_invalid(x)     ( (*x).id = NULL )
+
+#if ((DEFAULT_RAW_RECVMBOX_SIZE) > (MB_SIZE)) || \
+    ((DEFAULT_UDP_RECVMBOX_SIZE) > (MB_SIZE)) || \
+    ((DEFAULT_TCP_RECVMBOX_SIZE) > (MB_SIZE)) || \
+    ((DEFAULT_ACCEPTMBOX_SIZE)   > (MB_SIZE)) || \
+    ((TCPIP_MBOX_SIZE)           > (MB_SIZE))
+#   error Mailbox size not supported
+#endif
+
+// === THREAD ===
+typedef struct {
+    osThreadId    id;
+    osThreadDef_t def;
+} sys_thread_data_t;
+typedef sys_thread_data_t* sys_thread_t;
+
+#define SYS_THREAD_POOL_N                   6
+#define SYS_DEFAULT_THREAD_STACK_DEPTH      DEFAULT_STACK_SIZE
+
+// === PROTECTION ===
+typedef int sys_prot_t;
+
+#else
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/** \brief  Init systick to 1ms rate
+ *
+ *  This init the systick to 1ms rate. This function is only used in standalone
+ *  systems.
+ */
+void SysTick_Init(void);
+
+
+/** \brief  Get the current systick time in milliSeconds
+ *
+ *  Returns the current systick time in milliSeconds. This function is only
+ *  used in standalone systems.
+ *
+ *  /returns current systick time in milliSeconds
+ */
+uint32_t SysTick_GetMS(void);
+
+/** \brief  Delay for the specified number of milliSeconds
+ *
+ *  For standalone systems. This function will block for the specified
+ *  number of milliSconds. For RTOS based systems, this function will delay
+ *  the task by the specified number of milliSeconds.
+ *
+ *  \param[in]  ms Time in milliSeconds to delay
+ */
+void osDelay(uint32_t ms);
+
+#ifdef  __cplusplus
+}
+#endif
+#endif
+
+#endif /* __ARCH_SYS_ARCH_H__ */