没有合适的资源?快使用搜索试试~ 我知道了~
首页[原创][图文并茂]Day Day Up笔记之uCOS-II+LwIP在STM32F107详细移植过程
资源详情
资源评论
资源推荐

Day Day Up 笔记之 uCOS-II+LwIP 在 STM32F107 上移植 笔者:adamwin
Day Day Up
出品
Day Day Up 笔记之 uCOS-II+LwIP 在
STM32F107 上移植
声明
XX 如是说——尊重他人劳动成果,也是一种美德……
转载请注明出处
闲话稍说
这篇笔记旨在讲解 LwIP 在 uCOS-II 的上的过程,着重讲述移植的整个流程,
不拘泥于细节。从头至尾一步一步的完成移植工作。本篇目标是能够 ping 通目
标板,PC 机与目标机建立一个初步的连接,至于说其他的应用服务,暂时不予
讲述。
友情提示:要想顺利完成 LwIP 移植,你需具备:
1、有一定的 C 语言基础和数据结构的知识;
2、熟悉 uCOS-II,了解信号量,消息邮箱等通信方式;
3、知道 LwIP 是何物,能用来干什么
硬件平台
STM32 硬件平台 某开发板或你自己设计的硬件
我使用是自己的 STM32F107VC+DP83848 板子
IDE 环境
EWARM-IAR V5.4
uCos-II V2.86
LwIP V1.3.2
目录
Day Day Up 笔记之 uCOS-II+LwIP 在 STM32F107 上移植............................................................... 1
声明 ......................................................................................................................................... 1
闲话稍说 ................................................................................................................................. 1
目录 ......................................................................................................................................... 1
直奔主题 ................................................................................................................................. 3
1、巧妇备米 .................................................................................................................. 3
1.1、下载 STM32F107_ETH_LwIP 例程 ............................................................... 3
1.2、基础工程的建立 .......................................................................................... 3
2、文件结构 .................................................................................................................. 3

Day Day Up 笔记之 uCOS-II+LwIP 在 STM32F107 上移植 笔者:adamwin
Day Day Up
出品
3、添加编译文件路径 .................................................................................................. 7
4、添加网口底层驱动代码 .......................................................................................... 8
4.1、在 BSP.c 中添加: ........................................................................................ 8
4.2、对应的函数原型声明: ............................................................................ 12
4.3、在 BSP_Init()中调用 BSP_EthernetInit() .................................................... 12
4.3、相关宏定义: ............................................................................................ 13
4.4、包含 stm32_eth.h 头文件: ...................................................................... 13
5、编写操作系统模拟层代码 .................................................................................... 13
5.1、sys_arch.txt 的中文翻译 ............................................................................ 13
5.2、编写模拟层代码 ........................................................................................ 17
A、在\LwIP\port 下新建 sys_arch.c 文件,添加到工程的 LwIP\port 下17
B、在\LwIP\port 下新建 arch 文件夹,新建一个 sys_arch 的.h 头文件,
还有 cc.h .................................................................................................... 17
C、在 cc.h 下定义常用数据类型,服务于模拟层接口函数和底层协议。
添加如下代码: ........................................................................................ 17
D、留意到#include "cpu.h"没?这可不是 uC/OS-II 源码中的那个 cpu.h,
.................................................................................................................... 19
D、编写 sys_arch.h .................................................................................... 19
E、编写信号量操作函数 .......................................................................... 20
F、编写邮箱操作函数 .............................................................................. 23
G、初始化 sys_arch 层 .............................................................................. 26
H、编写 sys_arch_timeouts 函数 ............................................................. 27
I、编写 thread_t sys_thread_new 函数 .................................................... 28
K、添加 sys_arch.c 所需的头文件及变量定义等 .................................... 29
5.3、组织编写 LwIP 接口函数 ........................................................................... 30
A、新建两个文件,分别命名为:LwIP.c、LwIP.h。 ................................. 30
B、初始化流程: ...................................................................................... 30
C、函数的实现[参考 netconf.c] ................................................................ 31
D、其他相关代码 ...................................................................................... 32
5.4、LwIP 硬件抽象层函数的编写 .................................................................... 36
6、LwIP 配置文件 lwipopts.h ...................................................................................... 37
7、细枝末叶 ................................................................................................................ 37
7.1、在 main.c 中调用 Init_LwIP........................................................................ 37
7.2、编译、链接工程 ........................................................................................ 37
A、 .............................................................................................................. 38
B、 .............................................................................................................. 38
C、 .............................................................................................................. 39
D、 ............................................................................................................. 39
E、 .............................................................................................................. 39
8、牛刀小试 ................................................................................................................ 40
ping——有图有真相 .......................................................................................... 40
谢幕 ....................................................................................................................................... 41

Day Day Up 笔记之 uCOS-II+LwIP 在 STM32F107 上移植 笔者:adamwin
Day Day Up
出品
直奔主题
1、巧妇备米
1.1、下载 STM32F107_ETH_LwIP 例程
下载地址:
http://www.st.com/stonline/stappl/resourceSelector/app?page=resourceSelector&d
octype=FIRMWARE&SubClassID=1169
这是一个“裸奔”的例子,解压后打开:
这里有一些文件和源码是我们需要的,比如说,STM32 网卡驱动,LwIP 源文件。
后面会具体提到
1.2、基础工程的建立
这里直接使用之前已经建好且可用的一个 uCOS-II 工程,当然你可以自己从
新建立一个或者用之前建立好了的。如果不知道怎么建立 uCOS-II,请详见《Day
Day Up 之一步一步移植 uCOS-II 到 STM32 上——EWARM 篇》,此处不再赘述。
2、文件结构
先看我们文件结构的组织方式,注意:绿色标注部分
Project
|
|——App //应用软件任务
| app.h
| app.c
| app_cfg.h
| os_cfg.h
|——BSP //板级支持 硬件驱动程序

Day Day Up 笔记之 uCOS-II+LwIP 在 STM32F107 上移植 笔者:adamwin
Day Day Up
出品
| BSP.h
| BSP.c
|——CMSIS //Cotex-M3 内核文件
| core-m3.c
| system_stm32f10x.c
|——DOC//说明等文档
|——ETHLib//stm32 网卡驱动库
| stm32_eth.c
|——FWLib //STM32 官方库文件
|——LwIP
| |——port
| |
| |——src
| | |——api
| | |——core
| | |——netif
|——Startup//启动文件
|——u/COS-II
| |——Source //与硬件无关代码
| | os_core.c
| | os_flag.c
| | os_mbox.c
| | os_mem.c
| | os_mutex.c
| | os_q.c
| | os_sem.c
| | os_task.c
| | os_time.c
| | os_tmr.c
| | ucos-ii.h
| |——Ports //与硬件相关
| | os_cpu.h
| | os_cpu_a.asm
| | os_cpu_c.c
| | os_dbg.c
|——User//工程建立在这个目录下
| main.c
| includes.h //主头文件
| stm32f10x_it.c
A、按文件结构组织新增 ETHLib、LwIP 两文件夹

Day Day Up 笔记之 uCOS-II+LwIP 在 STM32F107 上移植 笔者:adamwin
Day Day Up
出品
B、将 STM32F107_ETH_LwIP_V1.0.0\Libraries\STM32_ETH_Driver 的 inc 和 src 一并
拷贝到 A 步骤的 ETHLib 文件夹下
C、拷贝 LwIP\src 源文件。将\STM32F107_ETH_LwIP_V1.0.0\Utilities\lwip-1.3.1\src
拷贝到 A 步骤的 LwIP 下面,为了移植的方便,将虽然不必要的\doc 和那几个说
明文档一并拷贝[除\prot 外],另外再 LwIP 目录下建立一个名为 port 的文件夹,
后面的模拟层相关的代码文件会放到这里的
D、在 uCOS-II 基础工程下添加 ETHLib 组,添加相应的 c 文件, LwIP 组,src 组,
再分别添加 api、core 和 netif 组到 src 组下,最后在 core 下面添加一个 ipv4 组。
特别说明:因为大多数网络是 ipv4,而 ppp、snmp 暂时不在考虑范围之内,所
以 LwIP 下的 ipv6、ppp 和 snmp 就不添加进工程。另外,在 netif 下只加入 etharp.c
剩余40页未读,继续阅读
安全验证
文档复制为VIP权益,开通VIP直接复制

评论27