中级会员
- 积分
- 253
- 金钱
- 253
- 注册时间
- 2016-5-4
- 在线时间
- 58 小时
|
本帖最后由 飘逸心晴 于 2017-9-3 21:28 编辑
前言:最近离职后在家深造,把STM32有关的知识深造一遍之后综合起来做个实际项目,再去入职。首先是UCOSIII的学习,主要学习正点原子提供的视频教程,然后自己买了一本视频里面推荐的书,由UCOSIII创始人Jean J. Labrosse编写的《嵌入式实时操作系统 μC/OS-III》,这本书作为工具书不错,内容条理清晰、通俗易懂、全面,配合视频和实操一起学习UCOSIII是很不错的选择。
学习完UCOSIII之后就学习STemWim,发现有点枯燥,就先学LWIP。LWIP里面有两种,一种是不带操作系统的,称为RAM编程;另一种是带操作系统的,称为NETCONN编程和SOCKER编程。刚刚学完UCOS系统,自然是要朝着带操作系统的发展,结果一看,视频教程是UCOSII的,顿时有点傻眼,不是说UCOSII不好,而是刚刚学完UCOSIII,如果把LWIP搭载在UCOSIII上面,不仅是更优良的方案,而且对UCOSIII也是一种复习加实践,所以视频虽然是搭载了UCOSII,但我决心把LWIP搭载在UCOSIII上,想起来也不是很难,于是说干就干。
但是做的没有想的那么简单,失败了两次,每次耗费三四个小时,很是枯燥。于是在困难失败面前产生了分水岭,一条路是继续,另一条路是放弃。很显然,要走第一条路,于是先不移植,先把LWIP的知识浏览一遍回过头来再UCOSIII移植到LWIP上面,可能会有意想不到的结果。昨天把LWIP的RAW基本浏览了一遍,觉得机会来了,泡杯茶,开始移植。
移植参考的资料有:
1、正点原子出的《STM32F1 LWIP开发手册(DM9000版)》 这里面有移植操作系统需要修改的一些文件,并且介绍了为什么要修改,是为了达到什么目的
2、正点原子出的 “网络实验2 LWIP带UCOS操作系统移植”例程 这里面的代码具有一定的代表性,虽然UCOSIII和UCOSII有区别,但是总体思想是不变的,所以以它为蓝本
3、左忠凯前辈分享的一个例程,见帖子二楼:http://www.openedv.com/forum.php ... ight=UCOSIII%2BLWIP
这个例程使用的是STM32F407+ENC28J60网络芯片,而我用的是 STM32F103+DM9000网络芯片
以上三个资料都不能完全照搬,三个资料有两两交叉相同的部分,把交叉的部分提取出来,再根据自己的板子和芯片做一部分修改,所以这三个资料都要用到。
移植过程需要特别做的修改主要有以下几点:
1、LWIP有一个cpu.h 而UCOSIII也有一个 cpu.h(UCOSII则没有cpu.h),所以需要把LWIP的cpu.h文件改名为lwip_cpu.h,并把代码中的也修改。这一点也是上面链接中帖主出现的问题。
2、UCOSII和UCOSIII的部分API函数及内核对象类型命名有不同,这一点以左前辈的例程为蓝本,能移植的移植过来。
3、在将左前辈的例程部分复制过来之后,下载到板子上发现能够实现DHCP分配动态IP,但是PING不通,偶然的机会发现lwipopts.h中,可以配置是由硬件进行校验还是由软件进行校验,这个文件里面明确指出STM32F407可以实现硬件校验,而STM32F103是不能够实现硬件校验的,所以修改相关代码,使LWIP配置成软件校验。
经过五个小时的奋战,移植大体成功,能够实现DHCP分配动态IP,可以通过PC机长时间PING而不丢包,可以使用NETCONN编程进行UDP通信(发送与接收)。
另外由于个人能力有限,因此在系统的内存管理方面,可能还有比较大的优化余地,现把成果分享给大家,希望对在学习LWIP+UCOSIII的人具有一定的参考价值,也欢迎大家指出不足之处。
LWIP UCOSIII 实验.zip
(18.3 MB, 下载次数: 3554)
|
|