打印
[STM32F4]

关于在ucos-ii上移植lwip-1.4.1的一些问题

[复制链接]
2218|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chinaqiaobo|  楼主 | 2015-4-13 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chinaqiaobo 于 2015-4-13 15:49 编辑

刚刚在STM32F4上移植好了ucos-ii,接下来要做的就是lwip的移植了,在官网下载最新版本1.4.1,同时参考了ST官方的移植方案,只不过ST是在freertos上做的移植,freertos和ucos-ii还是在某些机制上存在一些区别的。

问题如下:
sys_arch.c中,需要向lwip内核提供一些os服务,如mbox,sem等操作。
例如需要实现这个函数:
err_t sys_mbox_new(sys_mbox_t *mbox, int size);


在freertos中,sys_mbox_t通过追踪define,可以得知是 void *类型,即freertos的mbox handle。直接调用 *mbox = xQueueCreate(size , sizeof( void * )); 即可,注意,这时的(*mbox)所指向的内存空间,由xQueueCreate负责动态分配,即交由os管理;
但是,在ucos中,OSQCreate函数并不涉及内存分配的内容,需要用户事先(静态或动态)分配好Queue结构所占用的内存。

看了一些前辈的移植方案,都是采用动态分配内存的,但我猜想原因可能是在lwip以前的版本中,申请mbox的函数是这样的:sys_mbox_t sys_mbox_new(void)
只有返回值,没有输入参数,如果返回结构体的话,可能会导致效率下降,因此采用返回指针的方式,

但lwip1.4.1的申请mbox函数是err_t sys_mbox_new(sys_mbox_t *mbox, int size);
如果将sys_mbox_t定义成这样:
typedef struct _lwipQ {
    OS_EVENT    *pQ;
    void        *pQEntries[archMESG_QUEUE_LENGTH];
} lwipQ;

typedef lwipQ       sys_mbox_t;

不知道是不是可以避免动态分配内存的问题,而是将该结构直接分配在调用函数的栈中?

没有仔细看过lwip的源码,还望各位前辈多多指点,谢谢大家!

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝