×
单片机 > 单片机程序设计 > 详情

FreeRTOS+Lwip+STM32F407移植笔记

发布时间:2020-06-02 发布时间:
|

移植步骤:

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中的信号量相关函数实现是否正确还不能保证,需要再看,尤其是创建函数的传参感觉有问题。

关键字:FreeRTOS  Lwip  STM32F407

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C8051F020的UART