移植的步骤参照《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的报错信息却让我摸不着头脑:

..\Common\arch\sys_arch.c(47): error:  #393: pointer to incomplete class type is not allowed

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

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

  

关于lwip移植到ucsos-ii平台的遇到的问题(一)的更多相关文章

  1. LwIP移植和使用

    LwIP移植和使用 本手册基于lwip-1.4.x编写,本人没有移植过1.4.0之前的版本,更早的版本或许有差别.如果看官发现问题欢迎联系<QQ: 937431539  email: 93743 ...

  2. 移植samba到ios平台,最新支持ios8.3

    移植samba到ios平台,最新支持ios8.3 下载https://github.com/kolyvan/kxsmb 开源项目 1  cd samba-4.1.14 2  vi Rakefile 修 ...

  3. SWMM代码移植到64位平台

    在32位平台上运行SWMM模型,当节点数量到达60万以上的时候,模型运行占用内存接近1.85G的时候就会因为内存不够而无法计算.这种情况还是单独运行SWMM.exe的时候出现,如果采用SWMM.DLL ...

  4. 假防病毒软件从电脑移植到了 Android 平台

    以前有位女研究生点击网络钓鱼的链接.随即出现实时扫毒画面的方式,接着呈现了扫毒结果,跑出十余笔病毒数据,记录了被感染的计算机的具体位置,并提示她必须更新防病毒软件,而她在付费两千元后收到"防 ...

  5. 手把手教您将 libreoffice 移植到函数计算平台

    LibreOffice 是由文档基金会开发的自由及开放源代码的办公室套件.LibreOffice 套件包含文字处理器.电子表格.演示文稿程序.矢量图形编辑器和图表工具.数据库管理程序及创建和编辑数学公 ...

  6. lwip移植到stm32上-enc28j60,103mcu(2)

    前面小玩了一下ucos和lwip,但是都还不是真正的网络多任务,真正的网络多任务应该是什么样子的呢?应该是有一个专门的任务负责网络的通讯,他负责将数据发送出去,将数据接收回来,而其他的需要用到网络的任 ...

  7. MySql移植到嵌入式Linux平台

    最近在做考勤机系统,硬件采用的cortex-A8,哈哈,其实是有点浪费的,2410就可以的.所以就要考虑到考勤数据的存储问题,本来是打算用sqlite数据库存储的,可是后来发现,这个数据库只是一个本地 ...

  8. ubuntu移植jsoncpp到Android平台(转)

    NDK开发模块的时候,如果涉及到网络请求,类似json数据传递的时候,有现成的第三方json库可以移植,后台C++开发中使用的比较多的是jsoncpp,今天记录一下jsoncpp移植到Android平 ...

  9. 移植memtester到android平台

    硬件搭建起来能进入系统,首要就是测试内存的稳定性,需要一款内存测试工具. 一般都是选择memtester这款linux软件,下载地址如下:http://pyropus.ca/software/memt ...

随机推荐

  1. jQuery.last() 函数

    last() 函数详解 函数 获取当前对象的最后一个元素 语法 $selector.last() 返回值 返回值为一个对象 实例说明 代码 <!DOCTYPE html><html ...

  2. mac 工具集

    1.brew brew 全名叫homebrew,引用官网的一句话就是 "The missing package manager for macOS",意思brew是mac os上不 ...

  3. openssl lhash 数据结构哈希表

    哈希表是一种数据结构,通过在记录的存储位置和它的关键字之间建立确定的对应关系,来快速查询表中的数据: openssl lhash.h 为我们提供了哈希表OPENSSL_LHASH 的相关接口,我们可以 ...

  4. SAP 设置屏幕字段的隐藏、显示、必填和可选,以设置物料组为例

    1.事务码MM01,把物料组设为选填字段. 2.找到物料组的屏幕字段. 3.在后台根据屏幕字段找到对应字段组.后台路径:后勤-常规—物料主数据—字段选择—给字段组分配字段.点击后面的箭头进入下一屏幕. ...

  5. 在Spring里进行单元测试Junit

    搭建Spring环境(自行搭建): @RunWith注解指定使用springJunit的测试运行器 @ContextConfiguration注解指定测试用的spring配置文件的位置 import ...

  6. neo4j中文社区

    关于Neo4j中文社区 官网:http://neo4j.com.cn/ Neo4j 社区为国内具影响力的 Neo4j技术社区,致力于 Neo4j 的技术研究. Neo4j 社区由一批热爱 Neo4j ...

  7. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  8. Git代码管理常用命令

    1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remote -v添加远程仓库:$ git re ...

  9. Css Js Loader For Zencart

    Css Js Loader 描述:这个插件很早就出来了,可能知道人非常少 这个插件的功能是整合所有的网站的CSS和JS内容到一个文件里边. 因为CSS和JS文件到了一个文件,加快了程序的运行 在配合其 ...

  10. smartform

    SMARTFORMS中一般对于固定样式,格式的某一块会选择使用TEMPLATE或者TABLE. 表:上下高度不限,以窗口高度为限.循环输出表数据,每次循环都会按照表行输出,表头和表尾可控制输出.表行中 ...