Rizky Ardi Maulana / mbed-os
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cc.h Source File

cc.h

00001 /* 
00002  * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
00003  * All rights reserved.  
00004  *  
00005  * Redistribution and use in source and binary forms, with or without modification,  
00006  * are permitted provided that the following conditions are met: 
00007  * 
00008  * 1. Redistributions of source code must retain the above copyright notice, 
00009  *    this list of conditions and the following disclaimer. 
00010  * 2. Redistributions in binary form must reproduce the above copyright notice, 
00011  *    this list of conditions and the following disclaimer in the documentation 
00012  *    and/or other materials provided with the distribution. 
00013  * 3. The name of the author may not be used to endorse or promote products 
00014  *    derived from this software without specific prior written permission.  
00015  * 
00016  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  
00017  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
00018  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
00019  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
00020  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
00021  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
00022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
00023  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
00024  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
00025  * OF SUCH DAMAGE. 
00026  * 
00027  * This file is part of the lwIP TCP/IP stack. 
00028  *  
00029  * Author: Adam Dunkels <adam@sics.se> 
00030  * 
00031  */ 
00032 #ifndef __CC_H__ 
00033 #define __CC_H__ 
00034 
00035 #include <stdint.h>
00036 #include <stddef.h> /* for size_t */
00037 
00038 /* Types based on stdint.h */
00039 typedef uint8_t            u8_t; 
00040 typedef int8_t             s8_t; 
00041 typedef uint16_t           u16_t; 
00042 typedef int16_t            s16_t; 
00043 typedef uint32_t           u32_t; 
00044 typedef int32_t            s32_t; 
00045 typedef uintptr_t          mem_ptr_t; 
00046 
00047 /* Define (sn)printf formatters for these lwIP types */
00048 #define U16_F "hu"
00049 #define S16_F "hd"
00050 #define X16_F "hx"
00051 #define U32_F "lu"
00052 #define S32_F "ld"
00053 #define X32_F "lx"
00054 #define SZT_F "uz"
00055 
00056 /* ARM/LPC17xx is little endian only */
00057 #define BYTE_ORDER LITTLE_ENDIAN
00058 
00059 /* Use LWIP error codes */
00060 #define LWIP_PROVIDE_ERRNO
00061 
00062 #if defined(__arm__) && defined(__ARMCC_VERSION) 
00063     /* Keil uVision4 tools */
00064     #define PACK_STRUCT_BEGIN __packed
00065     #define PACK_STRUCT_STRUCT
00066     #define PACK_STRUCT_END
00067     #define PACK_STRUCT_FIELD(fld) fld
00068     #define ALIGNED(n)  __align(n)
00069 #elif defined (__IAR_SYSTEMS_ICC__) 
00070     /* IAR Embedded Workbench tools */
00071     #define PACK_STRUCT_BEGIN __packed
00072     #define PACK_STRUCT_STRUCT
00073     #define PACK_STRUCT_END
00074     #define PACK_STRUCT_FIELD(fld) fld
00075     #define IAR_STR(a) #a
00076     #define ALIGNED(n) _Pragma(IAR_STR(data_alignment= ## n ##))
00077 #else 
00078     /* GCC tools (CodeSourcery) */
00079     #define PACK_STRUCT_BEGIN
00080     #define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
00081     #define PACK_STRUCT_END
00082     #define PACK_STRUCT_FIELD(fld) fld
00083     #define ALIGNED(n)  __attribute__((aligned (n)))
00084 #endif 
00085 
00086 /* Provide Thumb-2 routines for GCC to improve performance */
00087 #if defined(TOOLCHAIN_GCC) && defined(__thumb2__)
00088     #define MEMCPY(dst,src,len)     thumb2_memcpy(dst,src,len)
00089     #define LWIP_CHKSUM             thumb2_checksum
00090     /* Set algorithm to 0 so that unused lwip_standard_chksum function
00091        doesn't generate compiler warning */
00092     #define LWIP_CHKSUM_ALGORITHM   0
00093 
00094     void* thumb2_memcpy(void* pDest, const void* pSource, size_t length);
00095     u16_t thumb2_checksum(void* pData, int length);
00096 #else
00097     /* Used with IP headers only */
00098     #define LWIP_CHKSUM_ALGORITHM   1
00099 #endif
00100 
00101 
00102 #ifdef LWIP_DEBUG
00103 
00104 #include "stdio.h"
00105 
00106 void assert_printf(char *msg, int line, char *file);
00107 
00108 /* Plaform specific diagnostic output */
00109 #define LWIP_PLATFORM_DIAG(vars) printf vars
00110 #define LWIP_PLATFORM_ASSERT(flag) { assert_printf((flag), __LINE__, __FILE__); }
00111 #else
00112 #define LWIP_PLATFORM_DIAG(msg) { ; }
00113 #define LWIP_PLATFORM_ASSERT(flag) { ; }
00114 #endif 
00115 
00116 #include "cmsis.h"
00117 #define LWIP_PLATFORM_HTONS(x)      __REV16(x)
00118 #define LWIP_PLATFORM_HTONL(x)      __REV(x)
00119 
00120 #endif /* __CC_H__ */