简介
正如书名所描述的那样,本书将引导读者从零开始,一步一步地设计完
成一个具备实际应用价值的嵌入式网络系统。章节安排如下:第1章详细阐
述硬件平台的设计;第2章指导读者搭建一个完整的开发、调试环境;第3章
引领读者构建一个最基本的嵌入式系统;第4章讲解μC/OS—II的移植和使
用;第5章从理论层面讲解嵌入式TCP/IP协议栈LwiP的实现细节;第6~8章
讲解如何把LwiP移植到本书在第1章完成的硬件平台上;最后两章讲解如何
根据客户需求重构软件系统。
本书注重个人实际开发经验的总结,尽力避免纯理论性描述带给读者的
枯燥乏味感。书中涉及的知识点凡是能够运用实例进行描述的,笔者均会提
供一个设计实例,讲述将围绕实例进行;而且随书光盘还提供了大量、完整
的设计实例和实现代码,具备较高的可操作性。
本书不会想当然地认为读者已经具备了某项知识,尽力做到对技术细节
的描述没有遗漏,即使确实因篇幅和选题所限无法展开讲述的,也要告诉读
者在哪里能够找到相关资料。
本书围绕一个实际的目标系统进行讲述,针对性很强,对工程技术人员
具备较高的参考价值。
本书可作为嵌人式系统开发初学者的入门书籍,也可作为AT91SAM系列
开发人员的工程参考书。
目录
目录
第1章 搭建自己的硬件平台
1.1 目标系统简介
1.2 芯片选型
1.3 主芯片功能特性介绍
1.3.1 Atmel AT91SAM7x256芯片
1.3.2 Realtek RTL8201BL物理层(PHY)芯片
1.4 电路设计
1.4.1 电源及时钟电路
1.4.2 接口电路
1.4.3 以太网电路
1.5 自己制作Wiggler仿真器
1.5.1 Wiggler仿真器简介
1.5.2 Wiggler仿真器电路
1.5.3 Wiggler仿真器驱动软件
第2章 建立开发环境
2.1 安装ADSl.2
2.2 安装设置仿真器
第3章 构建一个最基本的嵌入式系统
3.1 Hello, embedded world!
3.2 第一个驱动程序
3.2.1 点亮开发板
3.2.2 脱离仿真环境
3.2.3 代码剖析——驱动程序的基本构造
3.2.4 RO与程序执行时的地址空间
3.3 使用高速时钟PLLCK——让LED飞起来
3.3.1 Atmel的头文件及时钟选择代码
3.3.2 时钟发生器与电源管理控制器
3.3.3 时钟设置代码剖析
3.4 精确控制LED的闪烁频率——使用定时器
3.4.1 编写第五个程序
3.4.2 映像文件、入口点与Startup段
3.4.3 中断处理
3.4.4 处理器模式
3.4.5 异常
3.4.6 代码剖析
3.5 中断嵌套与快速中断
3.5.1 普通中断的嵌套
3.5.2 快速中断与嵌套
3.6 自己编写下载工具
第4章 系统的改进——使用RTOS
4.1 RTOS简介
4.2 μC/OS—Ⅱ——一个开源的RTOS简介
4.3 移植μC/OS—Ⅱ到AT91SAM7x256
4.3.1 下载μ/OS—Ⅱ及移植范例
4.3.2 移植方法
4.3.3 准备工作——建立基本的ADS工程
4.3.4 OS_CPU.H
4.3.5 OS_CPU_C.C的移植
4.3.6 OS_CPU_A.S
4.3.7 编写测试代码
4.3.8 编译器移植与μC/OS-Ⅱ配置文件
4.3.9 使用AXD验证μC/OS-Ⅱ
4.4 μC/OS-Ⅱ的通信及同步机制
4.4.1 实现第一个要求——使用信号量
4.4.2 实现第二个要求——使用互斥型信号量
4.4.3 实现第三个要求
4.5 总结
第5章 进阶——嵌入式TCP/IP协议栈LwlP
5.1 协议层
5.2 LwIP概览
5.3 进程模型
5.4 操作系统模拟层
5.5 缓冲与内存管理
5.5.1 包缓冲区(Packet buffers)——pbufs
5.5.2 内存管理
5.6 网络接口
5.7 IP处理
5.7.1 接收数据包
5.7.2 发送数据包
5.7.3 转发数据包
5.7.4 ICMP处理
5.8 UDP处理
5.9 TCP处理
5.9.1 概览
5.9.2 数据结构
5.9.3 序号计算
5.9.4 排队与发送数据
5.9.5 接收报文段
5.9.6 接受新的连接
5.9.7 快速重发
5.9.8 定时器
5.9.9 RTT估算
5.9.10 阻塞控制
5.10 协议栈接口
5.11 应用程序接口
5.11.1 基本概念
5.11.2 API实现
5.12 API参考手册
5.12.1 数据类型
5.12.2 缓冲区函数
5.12.3 网络连接函数
5.13 实现BSD Socket库
5.13.1 socket表示方法
5.13.2 分配socket
5.13.3 连接设置
5.13.4 发送和接收数据
5.14 LwIP应用实例
5.14.1 使用LwIP API
5.14.2 使用协议栈直接接口
第6章 移植LwlP——实现操作系统模拟层
6.1 获得LwIP源码
6.2 建立一个最基本的工程
6.3 把LwlP加入工程
6.4 官方文档——操作系统模拟层移植说明
6.5 准备工作——建立文件、定义数据类型及其他
6.6 信号量操作函数
6.6.1 sys_new_sem()函数
6.6.2 sys_sem_signal()函数
6.6.3 sys_sem_free()函数
6.6.4 sys_arch_sem_wait()函数
6.6.5 编译
6.7 邮箱操作函数
6.7.1 准备工作——设计思路及数据类型定义
6.7.2 sys_mbox_new()函数
6.7.3 sys_mbox_free()函数
6.7.4 sys_mbox_post()函数
6.7.5 sys_arch_mbox_fetch()函数
6.8 实现sys_thread_new()函数
6.9 实现sys_arch_timeouts()函数
6.10 实现临界保护函数
6.11 扫尾——结束操作系统模拟层的编写
第7章 以太网MAC(EMAC)编程手册
7.1 概览
7.2 结构框图
7.3 功能描述
7.3.1 接收缓冲区
7.3.2 发送缓冲区
7.3.3 EMAC发送模块
7.3.4 暂停帧(Pause Frame)支持
7.3.5 EMAC接收模块
7.3.6 EMAC地址检查模块
7.3.7 广播地址
7.3.8 哈希寻址
7.3.9 复制所有帧(或混杂模式)
7.3.10 类型ID检查
7.3.11 VLAN支持
7.3.12 PHY管理
7.3. 13 MII与RMII接口
7.4 操作说明
7.4.1 初始化配置
7.4.2 初始化接收缓冲区数组
7.4.3 初始化发送缓冲区数组
7.4.4 地址匹配
7.4.5 中断
7.4.6 发送帧
7.4.7 接收帧
7.5 用户接口——寄存器说明
7.5.1 网络控制寄存器
7.5.2 网络配置寄存器
7.5.3 网络状态寄存器
7.5.4 发送状态寄存器
7.5.5 接收缓冲区队列指针寄存器
7.5.6 发送缓冲区队列指针寄存器
7.5.7 接收状态寄存器
7.5.8 中断状态寄存器
7.5.9 中断使能寄存器
7.5.10 中断禁止寄存器
7.5.11 中断掩码寄存器
7.5.12 PHY管理寄存器
7.5.13 暂停时间寄存器
7.5.14 低位哈希寄存器
7.5.15 高位哈希寄存器
7.5.16 低位特殊地址寄存器1~4
7.5.17 高位特殊地址寄存器1~4
7.5.18 类型ID寄存器
7.5.19 用户输入/输出寄存器
7.5.20 统计寄存器
第8章 LwIP应用之旅——初始化、网络驱动及使用
8.1 rawapi.txt——LwIP初始化说明
8.2 准备工作——建立LwIP入口文件
8.3 _ilvInitLwIP()函数
8.4 _ilvSetLwIP()函数
8.5 ethernetif_init()——初始化底层网络接口函数
8.5.1 ethernetif_init()——底层网络接口的入口函数
8.5.2 low_level_output()——链路层发送函数
8.5.3 low_level_init()——网卡初始化函数
8.5.4 EMACInit()——网卡初始化工作的实际完成者
8.5.5 ethernetif_input()——实现接收线程
8.5.6 low_level_input()——读取完整的一帧数据
8.5.7 GetlnputPacketLen()函数——获得帧长
8.5.8 EMACReadPacket()——搬运,从接收缓冲区到pbuf
8.5.9 EMACSendPacket()函数——发送一帧数据
8.5.10 编译ethernetif.c及lib_emac.c文件
8.6 ping——结束LwIP的移植
8.6.1 编译、链接整个工程
8.6.2 遗漏的工作——把LwlP整合到系统中
8.6.3 测试LwlP——ping及简单的WEB服务器
第9章 重构——继续改进系统
9.1 改善软件系统的可维护性
9.1.1 提高源码的可读性
9.1.2 添加必要的注释语句
9.1.3 重新调整程序文件及代码的组织结构
9.2 改善软件系统的可扩展性、可重用性
9.2.1 重新架构网络系统
9.2.2 编码实现新的系统架构
9.2.3 小结
9.3 SWI系统调用
9.3.1 工作机制
9.3.2 编码实现SWI系统调用
第10章 实现动态网页服务
10.1 设计思路
10.2 源码剖析
10.3 实现DNS解析
附录A 开发板原理图
附录B ARM指令集编码
附录C 程序状态寄存器位域说明
附录D AT91SAM7x256内嵌外设用户接口列表
附录E PIO控制器复用引脚说明
参考文献
M6x
第1章 搭建自己的硬件平台
1.1 目标系统简介
1.2 芯片选型
1.3 主芯片功能特性介绍
1.3.1 Atmel AT91SAM7x256芯片
1.3.2 Realtek RTL8201BL物理层(PHY)芯片
1.4 电路设计
1.4.1 电源及时钟电路
1.4.2 接口电路
1.4.3 以太网电路
1.5 自己制作Wiggler仿真器
1.5.1 Wiggler仿真器简介
1.5.2 Wiggler仿真器电路
1.5.3 Wiggler仿真器驱动软件
第2章 建立开发环境
2.1 安装ADSl.2
2.2 安装设置仿真器
第3章 构建一个最基本的嵌入式系统
3.1 Hello, embedded world!
3.2 第一个驱动程序
3.2.1 点亮开发板
3.2.2 脱离仿真环境
3.2.3 代码剖析——驱动程序的基本构造
3.2.4 RO与程序执行时的地址空间
3.3 使用高速时钟PLLCK——让LED飞起来
3.3.1 Atmel的头文件及时钟选择代码
3.3.2 时钟发生器与电源管理控制器
3.3.3 时钟设置代码剖析
3.4 精确控制LED的闪烁频率——使用定时器
3.4.1 编写第五个程序
3.4.2 映像文件、入口点与Startup段
3.4.3 中断处理
3.4.4 处理器模式
3.4.5 异常
3.4.6 代码剖析
3.5 中断嵌套与快速中断
3.5.1 普通中断的嵌套
3.5.2 快速中断与嵌套
3.6 自己编写下载工具
第4章 系统的改进——使用RTOS
4.1 RTOS简介
4.2 μC/OS—Ⅱ——一个开源的RTOS简介
4.3 移植μC/OS—Ⅱ到AT91SAM7x256
4.3.1 下载μ/OS—Ⅱ及移植范例
4.3.2 移植方法
4.3.3 准备工作——建立基本的ADS工程
4.3.4 OS_CPU.H
4.3.5 OS_CPU_C.C的移植
4.3.6 OS_CPU_A.S
4.3.7 编写测试代码
4.3.8 编译器移植与μC/OS-Ⅱ配置文件
4.3.9 使用AXD验证μC/OS-Ⅱ
4.4 μC/OS-Ⅱ的通信及同步机制
4.4.1 实现第一个要求——使用信号量
4.4.2 实现第二个要求——使用互斥型信号量
4.4.3 实现第三个要求
4.5 总结
第5章 进阶——嵌入式TCP/IP协议栈LwlP
5.1 协议层
5.2 LwIP概览
5.3 进程模型
5.4 操作系统模拟层
5.5 缓冲与内存管理
5.5.1 包缓冲区(Packet buffers)——pbufs
5.5.2 内存管理
5.6 网络接口
5.7 IP处理
5.7.1 接收数据包
5.7.2 发送数据包
5.7.3 转发数据包
5.7.4 ICMP处理
5.8 UDP处理
5.9 TCP处理
5.9.1 概览
5.9.2 数据结构
5.9.3 序号计算
5.9.4 排队与发送数据
5.9.5 接收报文段
5.9.6 接受新的连接
5.9.7 快速重发
5.9.8 定时器
5.9.9 RTT估算
5.9.10 阻塞控制
5.10 协议栈接口
5.11 应用程序接口
5.11.1 基本概念
5.11.2 API实现
5.12 API参考手册
5.12.1 数据类型
5.12.2 缓冲区函数
5.12.3 网络连接函数
5.13 实现BSD Socket库
5.13.1 socket表示方法
5.13.2 分配socket
5.13.3 连接设置
5.13.4 发送和接收数据
5.14 LwIP应用实例
5.14.1 使用LwIP API
5.14.2 使用协议栈直接接口
第6章 移植LwlP——实现操作系统模拟层
6.1 获得LwIP源码
6.2 建立一个最基本的工程
6.3 把LwlP加入工程
6.4 官方文档——操作系统模拟层移植说明
6.5 准备工作——建立文件、定义数据类型及其他
6.6 信号量操作函数
6.6.1 sys_new_sem()函数
6.6.2 sys_sem_signal()函数
6.6.3 sys_sem_free()函数
6.6.4 sys_arch_sem_wait()函数
6.6.5 编译
6.7 邮箱操作函数
6.7.1 准备工作——设计思路及数据类型定义
6.7.2 sys_mbox_new()函数
6.7.3 sys_mbox_free()函数
6.7.4 sys_mbox_post()函数
6.7.5 sys_arch_mbox_fetch()函数
6.8 实现sys_thread_new()函数
6.9 实现sys_arch_timeouts()函数
6.10 实现临界保护函数
6.11 扫尾——结束操作系统模拟层的编写
第7章 以太网MAC(EMAC)编程手册
7.1 概览
7.2 结构框图
7.3 功能描述
7.3.1 接收缓冲区
7.3.2 发送缓冲区
7.3.3 EMAC发送模块
7.3.4 暂停帧(Pause Frame)支持
7.3.5 EMAC接收模块
7.3.6 EMAC地址检查模块
7.3.7 广播地址
7.3.8 哈希寻址
7.3.9 复制所有帧(或混杂模式)
7.3.10 类型ID检查
7.3.11 VLAN支持
7.3.12 PHY管理
7.3. 13 MII与RMII接口
7.4 操作说明
7.4.1 初始化配置
7.4.2 初始化接收缓冲区数组
7.4.3 初始化发送缓冲区数组
7.4.4 地址匹配
7.4.5 中断
7.4.6 发送帧
7.4.7 接收帧
7.5 用户接口——寄存器说明
7.5.1 网络控制寄存器
7.5.2 网络配置寄存器
7.5.3 网络状态寄存器
7.5.4 发送状态寄存器
7.5.5 接收缓冲区队列指针寄存器
7.5.6 发送缓冲区队列指针寄存器
7.5.7 接收状态寄存器
7.5.8 中断状态寄存器
7.5.9 中断使能寄存器
7.5.10 中断禁止寄存器
7.5.11 中断掩码寄存器
7.5.12 PHY管理寄存器
7.5.13 暂停时间寄存器
7.5.14 低位哈希寄存器
7.5.15 高位哈希寄存器
7.5.16 低位特殊地址寄存器1~4
7.5.17 高位特殊地址寄存器1~4
7.5.18 类型ID寄存器
7.5.19 用户输入/输出寄存器
7.5.20 统计寄存器
第8章 LwIP应用之旅——初始化、网络驱动及使用
8.1 rawapi.txt——LwIP初始化说明
8.2 准备工作——建立LwIP入口文件
8.3 _ilvInitLwIP()函数
8.4 _ilvSetLwIP()函数
8.5 ethernetif_init()——初始化底层网络接口函数
8.5.1 ethernetif_init()——底层网络接口的入口函数
8.5.2 low_level_output()——链路层发送函数
8.5.3 low_level_init()——网卡初始化函数
8.5.4 EMACInit()——网卡初始化工作的实际完成者
8.5.5 ethernetif_input()——实现接收线程
8.5.6 low_level_input()——读取完整的一帧数据
8.5.7 GetlnputPacketLen()函数——获得帧长
8.5.8 EMACReadPacket()——搬运,从接收缓冲区到pbuf
8.5.9 EMACSendPacket()函数——发送一帧数据
8.5.10 编译ethernetif.c及lib_emac.c文件
8.6 ping——结束LwIP的移植
8.6.1 编译、链接整个工程
8.6.2 遗漏的工作——把LwlP整合到系统中
8.6.3 测试LwlP——ping及简单的WEB服务器
第9章 重构——继续改进系统
9.1 改善软件系统的可维护性
9.1.1 提高源码的可读性
9.1.2 添加必要的注释语句
9.1.3 重新调整程序文件及代码的组织结构
9.2 改善软件系统的可扩展性、可重用性
9.2.1 重新架构网络系统
9.2.2 编码实现新的系统架构
9.2.3 小结
9.3 SWI系统调用
9.3.1 工作机制
9.3.2 编码实现SWI系统调用
第10章 实现动态网页服务
10.1 设计思路
10.2 源码剖析
10.3 实现DNS解析
附录A 开发板原理图
附录B ARM指令集编码
附录C 程序状态寄存器位域说明
附录D AT91SAM7x256内嵌外设用户接口列表
附录E PIO控制器复用引脚说明
参考文献
M6x
嵌入式网络系统设计:基于Atmel ARM7系列
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!
