sys_mbox_free( ) /释放一个消息队列
sys_mbox_post( )/向消息队列发送消息
sys_arch_mbox_fetch( )/从消息队列中获取消息
μCOS-Ⅱ同样实现了消息队列结构及其操作,但是μCOS-Ⅱ没有对消息队列中的消息进行管理,因此不能直接使用,必须在μCOS-Ⅱ的基础上重新实现。
(3)sys_arch_timeout函数
LwIP中每个与外界网络连接的线程都有自己的timeout属性,即等待超时时间。这个属性表现为每个线程都对应一个sys_timeout结构体队列,包括这个线程的timeout时间长度
,以及超时后应调用的timeout函数,该函数会做一些释放连接,回收资源的工作.timeout结构体已经由LwIP自己在sys.h中定义好了,而且对结构体队列的数据操作也由LwIP负责,我们所要实现的是如下函数:
struct sys_timeouts*sys_arch_timeouts(void)
这个函数的功能是返回目前正处于运行态的线程所对应的timeout队列指针。timeout队列属于线程的属性,它是OS相关的函数,只能由用户实现。
(4)sys_thread_new创建新线程
LwIP可以是单线程运行,也可以多线程运行。为提高效率并降低编程复杂度,就需要用户实现创建新线程的函数:
void sys_thread_new(void(*thread)(void*arg), void*arg);
在μCOS-Ⅱ中,没有线程(thread)的概念,只有任务(Task)。它已经提供了创建新任务的系统API调用OSTaskCreate,因此只要把OSTaskCreate封装一下,就可以实现sys_hread_new.
·lib_ arch中库函数的实现
LwIP协议栈中用到了8个外部函数,这些函数通常与用户使用的系统或编译器有关,因此留给用户自己实现,有关程序如下:
u16_t htons(u16_t n); /16位数据高低字节交换
u16_t ntohs(u16_t n);
int strlen(const char * str);/返回字符串长度
int strncmp(const char * strl,const char * str2,int len);/字符串比较
void bcopy(const void * src, void * dest, int len);/内存数据块之间的互相拷贝
void bzero(void *data, int n); /内存中指定长度的数据块清零
类似于操作系统在硬件上的移植,LwIP的移植也是根据实现的硬件以及操作系统对象,对相应的文件进行修改。整个通讯协议的引入可以很快实现。