3. 目标硬件与RTOS环境评估
emNet 是一个可裁剪的嵌入式 TCP/IP 协议栈,它的资源占用与运行行为高度依赖目标硬件和 RTOS 环境。在真正把 emNet 源码加入工程之前,必须先回答三个问题:MCU 的 RAM/ROM 是否够用、以太网 MAC 与 PHY 是否满足 emNet 的驱动模型、RTOS 能否提供 emNet 需要的任务与同步原语。本节围绕这三条主线展开,并给出一份可直接填写的前置检查清单。
一、RAM 与 ROM 的评估方法
emNet 的内存占用分为两部分:协议栈自身的数据结构与缓冲区,以及由应用配置决定的收发缓冲。协议栈代码与常量表占用 ROM,通常与启用的协议模块数量相关;RAM 则主要由 socket 数量、ARP 表、路由表、TCP 窗口和收发缓冲决定。评估时不要只看编译后的 map 文件,而应先按配置估算,再留出余量。
一个可操作的估算方式是:先确定应用需要同时打开的 socket 数量 N,再确定每个 socket 的最大报文长度 MSS 与接收窗口。emNet 的收发缓冲通常按“缓冲块数量 × 块大小”组织,块大小应不小于最大以太网帧(1518 字节)或应用层最大报文。若使用 4 个 TCP socket、每 socket 2 个 1536 字节缓冲块,仅收发缓冲就约 12 KB;再加上 ARP 表、IP 路由表、TCP 控制块和 RTOS 对象,RAM 需求通常在 20~40 KB 量级。ROM 方面,仅启用 IP、ICMP、UDP、TCP 时,典型 Cortex-M 目标上代码约 30~60 KB,若加入 DHCP、DNS、HTTP 等模块会继续增加。
判断依据不是“能不能编译通过”,而是“最坏情况下是否仍有余量”。建议 RAM 预留至少 20% 余量,ROM 预留至少 15% 余量,并把栈空间单独计算:emNet 内部任务栈、应用任务栈、中断栈三者不能混为一谈。
二、MAC 与 PHY 的适配要求
emNet 通过驱动层访问以太网控制器,因此 MCU 必须提供可用的 MAC 外设,或通过外部 MAC 芯片扩展。评估时要确认三点:MAC 是否支持 DMA 描述符收发、是否支持中断或轮询模式、是否有可用的 PHY 接口(MII 或 RMII)。PHY 侧则要确认自协商、链路状态寄存器和时钟来源。若使用 RMII,必须保证 50 MHz 参考时钟由 MCU 或外部晶振稳定提供,否则会出现链路时通时断。
下面这张图把“MCU 资源—MAC/PHY—RTOS—emNet”之间的适配关系集中呈现出来,便于在选型阶段逐项核对。
三、RTOS 选型:embOS 与其他 RTOS 的取舍
emNet 与 SEGGER embOS 同源,配合使用时任务、信号量、定时器等抽象层已经过验证,集成路径最短。若项目已使用 FreeRTOS、ThreadX 或裸机调度,也并非不能使用 emNet,但需要自行实现或适配 OS 抽象层。评估时重点看四项能力:任务创建与删除、二值/计数信号量、互斥量(带优先级继承)、以及毫秒级延时或系统节拍。若 RTOS 缺少优先级继承,emNet 内部对共享缓冲的互斥需要额外保护,否则在高优先级任务频繁发送时可能出现优先级反转。
另一个容易被忽略的点是中断与 RTOS 的交互。emNet 的 MAC 驱动通常在中断中接收帧,再把帧交给协议栈任务处理。如果 RTOS 的中断屏蔽策略与 MAC 中断优先级冲突,会出现丢帧或死锁。建议把 MAC 中断优先级设为低于 RTOS 系统节拍中断,或在 ISR 中只做最小处理,通过信号量唤醒协议栈任务。
四、集成前置检查清单的使用方式
下面给出一份可直接填写的检查表,字段包括检查项、目标值/要求、实测或确认结果、结论。建议在硬件打样后、协议栈移植前完成第一轮填写,移植后再复核一次。
| 检查项 | 目标值 / 要求 | 确认结果 | 结论 |
|---|---|---|---|
| 可用 RAM | ≥ 估算值 × 1.2 | 例如 48 KB | 通过 / 不通过 |
| 可用 ROM | ≥ 估算值 × 1.15 | 例如 256 KB | 通过 / 不通过 |
| MAC 收发方式 | DMA 描述符 + 中断 | 已确认 | 通过 / 不通过 |
| PHY 接口与时钟 | RMII,50 MHz 稳定 | 示波器确认 | 通过 / 不通过 |
| RTOS 同步原语 | 信号量、互斥量可用 | 已确认 | 通过 / 不通过 |
| 中断优先级 | MAC 中断低于系统节拍 | 已配置 | 通过 / 不通过 |
| emNet 配置 | IP、掩码、网关、MAC 地址 | 已填写 | 通过 / 不通过 |
| 最小验证用例 | ping 或回环测试 | 已准备 | 通过 / 不通过 |
完成以上评估后,你会得到一份明确的结论:当前 MCU 与 RTOS 是否满足 emNet 的运行条件,哪些项需要调整配置或更换选型。这份结论将直接决定后续移植工作的起点和风险等级。