码迷,mamicode.com
首页 > 其他好文 > 详细

lwIP移植笔记 - OS篇

时间:2015-08-01 15:34:25      阅读:1962      评论:0      收藏:0      [点我收藏+]

标签:

 lwIP作为RTOS准标配的TCP/IP,在我们编写网络模块时,经常用到。

   本移植笔记使用lwIP的版本为V1.4.1

 

   MDK:            V4.0+

   RTOS:          μC/OS-II V2.91

   Eval-Board: LPC1752

   Ethernet:     ENC28J60

 

   移植lwIP到OS其实就是实现sys.h的过程。

 

   移植文档(doc\sys_arch.txt)

 

[plain] view plaincopy技术分享技术分享
 
  1. Since lwIP 1.4.0, semaphore and mailbox functions are prototyped in a way that  
  2. allows both using pointers or actual OS structures to be used. This way, memory  
  3. required for such types can be either allocated in place (globally or on the  
  4. stack) or on the heap (allocated internally in the "*_new()" functions).  


    上面的意思:从V1.4.0起,我们可以使用指针和OS定义的结构。(原来只能使用指针)

 

 

   一、实现

          官方建议源文件的名称:sys_arch.c

 

          1. 所需头文件

             详细请参见附表。

              1) cc.h

                   主要定义数据类型的名称。

              2) perf.h

                   不需要移植(直接复制即可)

              3) sys_arch.h

                   主要定义3种新数据类型。

                  I. 信号量

 

[cpp] view plaincopy技术分享技术分享
 
  1. typedef OS_EVENT sys_sem_t; // type of semiphores  

 

 

                  II. 邮箱

 

[cpp] view plaincopy技术分享技术分享
 
  1. typedef TQ_DESCR sys_mbox_t; // type of mailboxes  

 

 

                  III. 线程

 

[cpp] view plaincopy技术分享技术分享
 
  1. typedef int sys_thread_t;  

 

 

       2. 函数列表

 

           1)信号量函数

 

[cpp] view plaincopy技术分享技术分享
 
  1. err_t sys_sem_new(sys_sem_t *sem, u8_t count);  
  2. void sys_sem_signal(sys_sem_t *sem);  
  3. u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout);  
  4. void sys_sem_free(sys_sem_t *sem);  

 

 

              可选函数

 

[cpp] view plaincopy技术分享技术分享
 
  1. int sys_sem_valid(sys_sem_t *sem);  
  2. void sys_sem_set_invalid(sys_sem_t *sem);  
  3. void sys_msleep(u32_t ms);  

 

 

 

          2)邮箱函数

 

[cpp] view plaincopy技术分享技术分享
 
  1. err_t sys_mbox_new(sys_mbox_t *mbox, int size);  
  2. void sys_mbox_post(sys_mbox_t *mbox, void *msg);  
  3. err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg);  
  4. u32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout);  
  5. u32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg);  
  6. void sys_mbox_free(sys_mbox_t *mbox);  


              可选函数

 

 

[cpp] view plaincopy技术分享技术分享
 
  1. int sys_mbox_valid(sys_mbox_t *mbox);  
  2. void sys_mbox_set_invalid(sys_mbox_t *mbox);  

 

 

       3)线程函数

 

 

[cpp] view plaincopy技术分享技术分享
 
  1. sys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio);  

 

 

      4)系统函数

 

 

[cpp] view plaincopy技术分享技术分享
 
  1. void sys_init(void);  


           可选函数

 

 

[cpp] view plaincopy技术分享技术分享
 
  1. u32_t sys_jiffies(void);  
  2. u32_t sys_now(void);  



 

附表:

        cc.h

 

[cpp] view plaincopy技术分享技术分享
 
  1. /* 
  2.  * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
  3.  * All rights reserved.  
  4.  *  
  5.  * Redistribution and use in source and binary forms, with or without modification,  
  6.  * are permitted provided that the following conditions are met: 
  7.  * 
  8.  * 1. Redistributions of source code must retain the above copyright notice, 
  9.  *    this list of conditions and the following disclaimer. 
  10.  * 2. Redistributions in binary form must reproduce the above copyright notice, 
  11.  *    this list of conditions and the following disclaimer in the documentation 
  12.  *    and/or other materials provided with the distribution. 
  13.  * 3. The name of the author may not be used to endorse or promote products 
  14.  *    derived from this software without specific prior written permission.  
  15.  * 
  16.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS‘‘ AND ANY EXPRESS OR IMPLIED  
  17.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
  19.  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
  20.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
  21.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
  22.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
  23.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
  24.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
  25.  * OF SUCH DAMAGE. 
  26.  * 
  27.  * This file is part of the lwIP TCP/IP stack. 
  28.  *  
  29.  * Author: Adam Dunkels <adam@sics.se> 
  30.  * 
  31.  */  
  32. #ifndef __CC_H__  
  33. #define __CC_H__  
  34.   
  35. #include <stdio.h>  
  36. #include <inttypes.h>  
  37. #include "cpu.h"     
  38.   
  39. typedef uint8_t     u8_t;  
  40. typedef int8_t      s8_t;  
  41. typedef uint16_t    u16_t;  
  42. typedef int16_t     s16_t;  
  43. typedef uint32_t    u32_t;  
  44. typedef int32_t     s32_t;  
  45. typedef u32_t       mem_ptr_t;  
  46. //typedef int sys_prot_t;  
  47.   
  48. #define mch_printf printf  
  49. #define mch_abort abort  
  50.   
  51. /*-------------critical region protection (depends on uC/OS-II setting)-------*/  
  52.   
  53. #if OS_CRITICAL_METHOD == 1  
  54. #define SYS_ARCH_DECL_PROTECT(lev)  
  55. #define SYS_ARCH_PROTECT(lev)       CPU_INT_DIS()  
  56. #define SYS_ARCH_UNPROTECT(lev)     CPU_INT_EN()  
  57. #endif  
  58.   
  59. #if OS_CRITICAL_METHOD == 3  //method 3 is used in this port.  
  60. #define SYS_ARCH_DECL_PROTECT(lev)  u32_t lev  
  61. #define SYS_ARCH_PROTECT(lev)       lev = OS_CPU_SR_Save()  
  62. #define SYS_ARCH_UNPROTECT(lev)     OS_CPU_SR_Restore(lev)  
  63. #endif  
  64. /*----------------------------------------------------------------------------*/  
  65.   
  66. /* define compiler specific symbols */  
  67. #if defined (__ICCARM__)  
  68.   
  69. #define PACK_STRUCT_BEGIN __packed  
  70. #define PACK_STRUCT_STRUCT   
  71. #define PACK_STRUCT_END  
  72. #define PACK_STRUCT_FIELD(x) x  
  73. #define PACK_STRUCT_USE_INCLUDES  
  74.   #define __ALIGNto32 _Pragma("data_alignment = 4")  
  75.   #define __ALIGNto16 _Pragma("data_alignment = 2")  
  76.   
  77. #elif defined (__CC_ARM)  
  78.   
  79. #define PACK_STRUCT_BEGIN __packed  
  80. #define PACK_STRUCT_STRUCT   
  81. #define PACK_STRUCT_END  
  82. #define PACK_STRUCT_FIELD(x) x  
  83.   #define __ALIGNto32 __align(4)  
  84.   #define __ALIGNto16 __align(2)  
  85.   
  86. #elif defined (__GNUC__)  
  87.   
  88. #define PACK_STRUCT_BEGIN  
  89. #define PACK_STRUCT_STRUCT __attribute__ ((__packed__))  
  90. #define PACK_STRUCT_END  
  91. #define PACK_STRUCT_FIELD(x) x  
  92.   #define __ALIGNto32  __attribute__((aligned(4)))  
  93.   #define __ALIGNto16  __attribute__((aligned(2)))  
  94.   
  95. #endif  
  96.   
  97. /*---define (sn)printf formatters for these lwip types, for lwip DEBUG/STATS--*/  
  98.   
  99. #define U16_F "hu"  
  100. #define S16_F "hd"  
  101. #define X16_F "hx"  
  102. #define U32_F "u"  
  103. #define S32_F "d"  
  104. #define X32_F "x"  
  105.   
  106.   
  107. #ifndef LWIP_PLATFORM_ASSERT  
  108. #define LWIP_PLATFORM_ASSERT(x) \  
  109.     do \  
  110.     {   mch_printf("Assertion \"%s\" failed at line %d in %s\n", x, __LINE__, __FILE__); \  
  111.     } while(0)  
  112. #endif  
  113.   
  114. #ifndef LWIP_PLATFORM_DIAG  
  115. #define LWIP_PLATFORM_DIAG(x) do {mch_printf x;} while(0)  
  116. #endif  
  117.   
  118. #endif /* __CC_H__ */  



 

 

        perf.h

 

[cpp] view plaincopy技术分享技术分享
 
  1. /* 
  2.  * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
  3.  * All rights reserved.  
  4.  *  
  5.  * Redistribution and use in source and binary forms, with or without modification,  
  6.  * are permitted provided that the following conditions are met: 
  7.  * 
  8.  * 1. Redistributions of source code must retain the above copyright notice, 
  9.  *    this list of conditions and the following disclaimer. 
  10.  * 2. Redistributions in binary form must reproduce the above copyright notice, 
  11.  *    this list of conditions and the following disclaimer in the documentation 
  12.  *    and/or other materials provided with the distribution. 
  13.  * 3. The name of the author may not be used to endorse or promote products 
  14.  *    derived from this software without specific prior written permission.  
  15.  * 
  16.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS‘‘ AND ANY EXPRESS OR IMPLIED  
  17.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
  19.  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
  20.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
  21.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
  22.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
  23.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
  24.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
  25.  * OF SUCH DAMAGE. 
  26.  * 
  27.  * This file is part of the lwIP TCP/IP stack. 
  28.  *  
  29.  * Author: Adam Dunkels <adam@sics.se> 
  30.  * 
  31.  */  
  32. #ifndef __PERF_H__  
  33. #define __PERF_H__  
  34.   
  35. #define PERF_START    /* null definition */  
  36. #define PERF_STOP(x)  /* null definition */  
  37.   
  38. #endif /* __PERF_H__ */  



 

 

 

       sys_arch.h

 

[cpp] view plaincopy技术分享技术分享
 
  1. /* 
  2.  * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
  3.  * All rights reserved.  
  4.  *  
  5.  * Redistribution and use in source and binary forms, with or without modification,  
  6.  * are permitted provided that the following conditions are met: 
  7.  * 
  8.  * 1. Redistributions of source code must retain the above copyright notice, 
  9.  *    this list of conditions and the following disclaimer. 
  10.  * 2. Redistributions in binary form must reproduce the above copyright notice, 
  11.  *    this list of conditions and the following disclaimer in the documentation 
  12.  *    and/or other materials provided with the distribution. 
  13.  * 3. The name of the author may not be used to endorse or promote products 
  14.  *    derived from this software without specific prior written permission.  
  15.  * 
  16.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS‘‘ AND ANY EXPRESS OR IMPLIED  
  17.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
  18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
  19.  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
  20.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
  21.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
  22.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
  23.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
  24.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
  25.  * OF SUCH DAMAGE. 
  26.  * 
  27.  * This file is part of the lwIP TCP/IP stack. 
  28.  *  
  29.  * Author: Adam Dunkels <adam@sics.se> 
  30.  * 
  31.  */  
  32. #ifndef __SYS_RTXC_H__  
  33. #define __SYS_RTXC_H__  
  34.   
  35. #include <includes.h>  
  36. #include "arch/cc.h"  
  37.   
  38.   
  39. /*-----------------macros-----------------------------------------------------*/  
  40. #define LWIP_STK_SIZE   300  
  41. /* The user can change this priority level.  
  42.  * It is important that there was no crossing with other levels. 
  43.  */  
  44. #define LWIP_TASK_MAX     8       
  45. #define LWIP_TASK_START_PRIO      APP_CFG_TASK_LWIP_PRIO        //first prio of lwip tasks in uC/OS-II  
  46. #define LWIP_TASK_END_PRIO    LWIP_START_PRIO + LWIP_TASK_MAX  
  47.   
  48. #define MAX_QUEUES        10    // the number of mailboxes  
  49. #define MAX_QUEUE_ENTRIES 20    // the max size of each mailbox    
  50.   
  51. #define SYS_MBOX_NULL (void *)0  
  52. #define SYS_SEM_NULL  (void *)0  
  53.   
  54. #define sys_arch_mbox_tryfetch(mbox,msg) \  
  55.       sys_arch_mbox_fetch(mbox,msg,1)  
  56.   
  57. /*-----------------type define------------------------------------------------*/  
  58.   
  59. /** struct of LwIP mailbox */  
  60. typedef struct {  
  61.     OS_EVENT*   pQ;  
  62.     void*       pvQEntries[MAX_QUEUE_ENTRIES];  
  63. } TQ_DESCR, *PQ_DESCR;  
  64.   
  65. #if NO_SYS  
  66. typedef int sys_sem_t;  
  67. typedef int sys_mbox_t;  
  68. #else  
  69. typedef OS_EVENT sys_sem_t; // type of semiphores  
  70. typedef TQ_DESCR sys_mbox_t; // type of mailboxes  
  71. #endif  
  72. typedef int sys_thread_t;  
  73.   
  74.   
  75. //typedef INT8U sys_thread_t; // type of id of the new thread  
  76.   
  77. typedef INT8U sys_prot_t;  
  78.   
  79. extern OS_STK LWIP_TASK_STK[LWIP_TASK_MAX][LWIP_STK_SIZE];  
  80. #endif /* __SYS_RTXC_H__ */  



 

 

       cpu.h

 

[cpp] view plaincopy技术分享技术分享
 
    1. /* 
    2.  * Copyright (c) 2001-2003 Swedish Institute of Computer Science. 
    3.  * All rights reserved.  
    4.  *  
    5.  * Redistribution and use in source and binary forms, with or without modification,  
    6.  * are permitted provided that the following conditions are met: 
    7.  * 
    8.  * 1. Redistributions of source code must retain the above copyright notice, 
    9.  *    this list of conditions and the following disclaimer. 
    10.  * 2. Redistributions in binary form must reproduce the above copyright notice, 
    11.  *    this list of conditions and the following disclaimer in the documentation 
    12.  *    and/or other materials provided with the distribution. 
    13.  * 3. The name of the author may not be used to endorse or promote products 
    14.  *    derived from this software without specific prior written permission.  
    15.  * 
    16.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS‘‘ AND ANY EXPRESS OR IMPLIED  
    17.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  
    18.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  
    19.  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  
    20.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
    21.  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  
    22.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  
    23.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  
    24.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  
    25.  * OF SUCH DAMAGE. 
    26.  * 
    27.  * This file is part of the lwIP TCP/IP stack. 
    28.  *  
    29.  * Author: Adam Dunkels <adam@sics.se> 
    30.  * 
    31.  */  
    32. #ifndef __CPU_H__  
    33. #define __CPU_H__  
    34.   
    35. #define BYTE_ORDER LITTLE_ENDIAN  
    36.   
    37. #endif /* __CPU_H__ */  

lwIP移植笔记 - OS篇

标签:

原文地址:http://www.cnblogs.com/xiaobin-hlj80/p/4694058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!