LWIP从FreeRTOS到uC/OS-III的适配性改动
LWIP 适配 uC/OS-III 的改动主要集中在系统接口适配层和配置文件中,具体涉及以下文件:
1. arch/sys_arch.c
这是改动最集中的文件,所有操作系统接口的实现都在这里:
- 数据类型定义:重新定义
sys_sem_t、sys_mutex_t等与 uC/OS-III 句柄对应的类型。 - 邮箱接口:实现
sys_mbox_new()、sys_mbox_post()等函数,内部调用 uC/OS-III 的OSQCreate()、OSQPost()等消息队列 API。 - 信号量接口:实现
sys_sem_new()、sys_arch_sem_wait()等函数,对应 uC/OS-III 的OSSemCreate()、OSSemPend()等信号量 API。 - 互斥锁接口:实现
sys_mutex_new()、sys_mutex_lock()等函数,对应 uC/OS-III 的OSMutexCreate()、OSMutexPend()等互斥锁 API。 - 线程接口:实现
sys_thread_new(),内部调用 uC/OS-III 的OSTaskCreate()创建任务。 - 临界区保护:实现
sys_arch_protect()、sys_arch_unprotect(),对应 uC/OS-III 的OS_CRITICAL_ENTER()/OS_CRITICAL_EXIT()。 - 系统时间:实现
sys_now(),调用 uC/OS-III 的OSTimeGet()获取系统时间。
2. arch/sys_arch.h(接口声明文件)
需配合sys_arch.c修改接口类型声明,确保与 uC/OS-III 的类型匹配:
- 重新声明
sys_sem_t、sys_mutex_t、sys_mbox_t等类型,对应 uC/OS-III 的OS_SEM、OS_MUTEX、OS_MSG_Q。 - 调整与操作系统相关的宏定义(如临界区保护的返回值类型
sys_prot_t)。
3. lwipopts.h(LWIP 配置文件)
需根据 uC/OS-III 的特性调整 LWIP 的核心配置:
- 启用操作系统支持:设置
NO_SYS = 0(表示使用操作系统)。 - 线程优先级配置:根据 uC/OS-III 的优先级范围(如
OS_CFG_PRIO_MAX)调整TCPIP_THREAD_PRIO等线程优先级参数。 - 栈大小配置:根据 uC/OS-III 的栈管理方式(栈大小以
CPU_STK为单位)调整TCPIP_THREAD_STACKSIZE等栈大小参数。 - 超时配置:确保 LWIP 的超时参数(如
DEFAULT_TCP_RECEIVE_WINDOW)与 uC/OS-III 的节拍频率(OS_CFG_TICK_RATE_HZ)兼容。
4. include/os.h(uC/OS-III 头文件,间接涉及)
无需修改,但需确保该文件被正确包含,以使用 uC/OS-III 的内核 API(如OSQCreate()、OSTaskCreate()等)。
5. 应用层初始化文件(如tcpip_init.c,视项目而定)
若项目中有初始化 LWIP 的代码(如创建 TCP/IP 线程),需确保线程优先级、栈大小等参数符合 uC/OS-III 的要求:
