移植步骤:
1 - 先移植FreeRTOS的Demo;
2 - 再移植Lwip的文件(源码&sys_arch&lwip_comm);
3 - 单个实现TCPIP协议栈任务:TCP客户端、TCP服务器和UDP;
模块:
- 内存管理:需要给"以太网驱动"、"FreeRTOS"、"Lwip"三个部分分配内存;
- 以太网DMA描述符&以太网DMA Buffer
- Lwip的RAM部分:ram_heap&内存池部分:memp;
- FreeRTOS占用RAM由配置文件定义大小,用于操作系统中动态操作的分配;
- 另外原子实现的内存管理方式中的内存管理表也会占用很大内存,与内存块大小密切相关;
- stm32F4的RAM分为普通内存128k和CCM内存64k,两个不能当作一块内存用!;
- 定时器:操作系统下不需要单独实现Lwip的周期任务函数的调用;
- LAN8720驱动:F407需要添加ST的官网以太网库,然后实现驱动;
- FreeRTOS:接口调用需要注意任务级和中断级接口的区分;
- sys_arch:解决操作系统和lwip的关系,主要是信号量和邮箱;
- liwp_comm:解决lwip和以太网之间的关系:以太网驱动;
注意事项:
- 以太网中断要调节到操作系统可屏蔽的范围内(进入临界区可屏蔽以太网中断);
- TCP服务器、TCP客户端、UDP服务任务堆栈需要大一点;
- 测试需要在DHCP完成之后开始;
- 测试的PC防火墙需要关闭;
- 测试的上位机要多个测试,某个上位机不一定能实现"全部"通信!;
优化:
- 网线热插拔(目前没有网线初始化不成功,插拔后应该可再次触发DHCP,怎么检测
网线插拔事件的发生);
- lwip任务的时基调到由操作系统提供(任务调度器挂起会不会影响获取到的TICK值?)
疑问:
- MII,RMII......
- 硬件帧校验(low_level_init()、)
- 网络相关的调试工具
- pbuf、netif结构
- ethernetif.c文件被完全替换,看看源文件;
- 滴答定时器中断在哪配置;
- sys_arch中的信号量相关函数实现是否正确还不能保证,需要再看,尤其是创建函数的传参感觉有问题。