• 关于lwip移植到ucsos-ii平台的遇到的问题(一)


      移植的步骤参照《Day_Day_Up笔记之uCOS-II_LwIP_在_STM32F107_上移植》,《uCOS平台下的LwIP移植笔记》,《嵌入式网络那些事》。

      首先说说自己的准备的工程,在lpc1788开发板能够运行的ucos-ii工程,以及lwip协议工程(无操作系统)。ucos-II 版本是v2.8.6,lwip版本是v1.4.0。

      按照网上搜罗的材料,开始进行移植。

      总体思路:

          1、文件拷贝,将lwip工程下的相关协议栈代码拷贝到ucos-ii工程目录下。

          2、编写操作系统模拟层相关文件。

          3、编写供应用层调用的api函数。

    1、文件拷贝(略)

    2、模拟层需要编辑的文件有,cc.h(其实可以省略,将其内容放到sys_arch.h中),sys_arch.h,sys_arch.c 。

      将以上文件放在新建的arch文件夹下,此文件夹放在原工程common文件夹下。

      遇到以下问题,

      a、如果工程中指包含了common文件路径,则需要这样声明

    #ifndef __ARCH_CC_H__
    #define __ARCH_CC_H__

    //code

    #endif

    同理,对于sys_arch.h,声明如下:

    #ifndef __ARCH_SYS_ARCH_H__
    #define __ARCH_SYS_ARCH_H__

    //code

    #endif

      否则会报错。

      b、在编写sys_arch.c时,需要用到sys_timeout,资料上说在sys.h中已经定义了,找半天都没有找到哪里有定义,经过无数个分分秒秒终于找到了它的踪迹,sys_timeo结构体在timers.h中定义,copy如下:

    /** Function prototype for a timeout callback function. Register such a function
    * using sys_timeout().
    *
    * @param arg Additional argument to pass to the function - set up by sys_timeout()
    */
    typedef void (* sys_timeout_handler)(void *arg);

    struct sys_timeo {
    struct sys_timeo *next;
    u32_t time;
    sys_timeout_handler h;
    void *arg;
    #if LWIP_DEBUG_TIMERNAMES
    const char* handler_name;
    #endif /* LWIP_DEBUG_TIMERNAMES */
    };

    看前面的注释,吐血的心都有了,改来改去有意思吗,还改成 sys_timeo,让人不明白意思。不过在后面却犯了个严重的错误。最终原因是没有包含头文件timers.h。不过keil的报错信息却让我摸不着头脑:

    ..Commonarchsys_arch.c(47): error:  #393: pointer to incomplete class type is not allowed

    迷迷糊糊以为是内存申请的时候出错了,跟踪...什么内存池啊,动态内存管理啊,都扫了一遍,还是没找到原因。笨办法,在sys_arch.h中自定义了个类似sys_timeo的类,一样的操作都没有出什么问题,看来原因找到了。

      c、新版本的lwip协议有小改动,在编写模拟层的时候随即变动下就好了。今天就写到这里。

      

  • 相关阅读:
    ecstore中kvstore之mongodb
    ecstore中kvstore之memcached
    ecostore搜索注意事项
    ecos的dbschema
    ecos的model
    ecos的mvcl
    ecos的app处理类
    ecos的app生命周期
    Linux系统的时间设置
    数的机器码表示——彻底弄清什么是原码、反码、补码、移码
  • 原文地址:https://www.cnblogs.com/10cm/p/4260728.html
Copyright © 2020-2023  润新知