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 的要求: