uCOS-II下bootloader...
Transcript of uCOS-II下bootloader...
![Page 2: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/2.jpg)
uCOS-II与bootloader
![Page 3: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/3.jpg)
Bootloader的任务• 硬件系统自检
• 配置其他Bank或者端口、外设等工作模式
• 处理系统的中断
• Flash编程、系统的下载
• 参数和数据的设置、存储和传递
![Page 4: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/4.jpg)
异常类型
FIQ
IRQ(Interrupt ReQuest)
未定义指令
预取中止
数据中止
复位
软件中断Software interrupt
通过软件中断产生
进行管理员模式中获得
通常要求特殊的管理功能,如操作系统支持
![Page 5: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/5.jpg)
ARM中异常的优先级
(1) Reset (highest priority)
(2) Data abort
(3) FIQ
(4) IRQ
(5) Prefetch abort
(6) 未定义指令, Software interrupt (最低优先级)
![Page 6: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/6.jpg)
• 只要产生异常就会导致正常和程序流程被临时停止,例如外围中断服务程序
• 在异常被处理前,当前的处理器状态必须被保存,以便处理程序完成后,最后的程序可以被恢复.
如何处理异常
![Page 7: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/7.jpg)
进入异常的操作-1
• 在相应的链接寄存器LR (r14)中保存下一条指令的地址
• 将CPSR复制到相应的SPSR中
• 强制使CPSR模式位置成对应异常类型的值
• 强制使程序计数器指向相应异常向量,取下一条指令
![Page 8: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/8.jpg)
进入异常的操作-2R14_<Exception_Mode>=Return LinkSPSR_<Exception_Mode>=CPSRCPSR[4:0]=Exception Mode NumberCPSR[5]=0 ;当运行于ARM状态时
IF<Exception_Mode>==Reset or FIQ then;当响应FIQ异常时,禁止新的FIQ异常
CPSR[6]=1;CPSR[7]=1;
PC=Exception Vector Address
![Page 9: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/9.jpg)
异常向量
![Page 10: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/10.jpg)
处理系统的中断
• 带有MMU或者支持remap的处理器,使用重映象
的方法
• ARM720T、ARM920T
• S3C4510
• 不支持(或者不使用)重映象的处理器,需要在bootloader中处理中断、或者软件重定位
![Page 11: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/11.jpg)
bootloader中处理中断的问题如果处理器不支持remap
• 通常Bootloader所在的空间是ROM空间
• ARM的跳转指令(B或者BL),只能相对寻址±32MB空间
![Page 12: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/12.jpg)
查表法
• 中断向量表建立在RAM空间的指定地址
• Bootloader中的程序查找RAM空间的向量地址并跳
转
• 向系统添加中断需要修改RAM中的中断向量表,不用修改Bootloader中的代码
![Page 13: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/13.jpg)
查表法的代码分析
AREA Init,CODE,READONLY
ENTRY b ResetHandler ;for debugb HandlerUndef ;handlerUndefb HandlerSWI ;SWI interrupt handlerb HandlerPabort ;handlerPAbortb HandlerDabort ;handlerDAbortb . ;handlerReservedb HandlerIRQ ;handlerIRQb HandlerFIQ ;handlerFIQ
![Page 14: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/14.jpg)
$HandlerLabel HANDLER $HandleLabel
$HandlerLabelsub sp,sp,#4stmfd sp!,{r0}ldr r0,=$HandleLabelldr r0,[r0]str r0,[sp,#4]ldmfd sp!,{r0,pc}MEND….
HandlerIRQ HANDLER HandleIRQ
![Page 15: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/15.jpg)
sub sp,sp,#4
栈内的数据SP
CPC
…
R1
R0 XXXXXXXX低地址
高地址
堆栈增长方向
stmfd sp!,{r0}
XXXXXXXX
ldr r0,= HandleIRQ
HandleIRQ
ldr r0,[r0]
IRQ_ISR
str r0,[sp,#4]
IRQ_ISR
ldmfd sp!,{r0,pc}
IRQ_ISR
![Page 16: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/16.jpg)
重定位法
• 直接对PC指针进行操作,使程序通过bootloader的空间直接跳转到对应的RAM空间
• 比如S3C44B0中:
• SDRAM空间从0x0C000000开始
• 系统(uCOS-II)放在0x0C000000处
• 在bootloader的异常向量表中使用ADD指令跳转
![Page 17: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/17.jpg)
ADD的限制ARM的数据处理指令格式为:
xxxx000a aaaSnnnn ddddcccc ctttmmmm 寄存器形式
xxxx001a aaaSnnnn ddddrrrr bbbbbbbb 立即数形式
ADD Rd, #0
• 如果使用立即数形式,则操作数2为:Op2 = #b, ROR #2r
![Page 18: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/18.jpg)
重定位法的代码分析
B ColdReset;when enter interruption jump to sdram areaadd pc, pc, #0x0C000000;UndefinedInstructionadd pc, pc, #0x0C000000 ;syscall_handleradd pc, pc, #0x0C000000 ;PrefetchAbortadd pc, pc, #0x0C000000 ;DataAbortadd pc, pc, #0x0C000000 ;ReservedHandleradd pc, pc, #0x0C000000 ;IRQHandleradd pc, pc, #0x0C000000 ;FIQHandler
![Page 19: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/19.jpg)
PC+8• 受到流水线的影响,读取得PC指针和实际的差8个
0x18:add pc, pc, #0x0C000000
实际跳转到了0x0C000018+8地址处
所以,RAM中程序的异常向量表要从0x0C000008处开始
![Page 20: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/20.jpg)
嵌入式以太网的设计方法
![Page 21: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/21.jpg)
以太网接口的基本知识1、传输编码
• 曼彻斯特编码
• 差分曼彻斯特编码
![Page 22: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/22.jpg)
以太网协议
• 以太网的物理传输帧 (IEEE802.3 )
32位可选不超过1500字节16位48位48位8位56位
FCSPADDATATYPESADASDPR
PR: 同步位,收发双方的时钟同步,也指明传输的速率(10M、100M)SD: 分隔位,表示下面跟着的是真正的数据,而不是同步时钟DA: 目的地址,以太网的地址为48位地址。如果为都为F,则是广播地址SA: 源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址TYPE:类型字段,表明该帧的数据是什么类型的数据。如:0800H 表示数
据为IP包DATA:数据段,该段数据不能超过1500字节。PAD: 填充位。以太网帧传输的数据包最小不能小于60字节, 当数据段不足
46字节时,后面补000000.....(当然也可以补其它值)FCS:32位CRC数据校验位。该校验由网卡自动完成
![Page 23: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/23.jpg)
以太网的应用
• PR,SD,PAD,FCS这几个数据段是由网卡自动产生的;只需要理解DA、SA、TYPE、DATA四个段的内容
• 所有数据位的传输由低位开始(传输的位流使用曼彻斯特编码) • 以太网的冲突退避算法是由硬件自动执行的
• DA+SA+TYPE+DATA+PAD最小为60字节,最大为1514字节
• 以太网卡可以接收三种地址的数据,一个是广播地位,一个是多播地址(在嵌入式的环境中一般不用),一个是它自已的地址
• 任何两个网卡的物理地址都是不一样的,是世界上唯一的,网卡地址由专门机构分配。
![Page 24: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/24.jpg)
嵌入式的以太网方案
• 嵌入式处理器+网卡芯片(RTL8019)• 对嵌入式处理器没有特殊要求,通用性强
• 处理器和网络数据交换通过外部总线,速度慢,不适合于100M网络
• 带有以太网络接口的嵌入式处理器
• 处理器面向网络应用
• 处理器和网络数据交换通过内部总线,速度快
![Page 25: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/25.jpg)
RTL8019的原理框图
![Page 26: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/26.jpg)
TCP/IP协议的层次
BSD套接字(BSD Sockets) 应用层(Application)
物理层 (Physical)
IEEE802.3 Ethernet MAC数据链路层(Data Link)
IP、ARP、ICMP、IGMP网络层 (Network)
TCP、UDP传输层 (Transport)
![Page 27: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/27.jpg)
嵌入式以太网中主要处理的协议
• ARP(Address Resolation Protocol)地址解析协议
• ICMP (Internet Control Messages Protocol)网络控制报文协议
• IP(Internet Protocol) 网际协议
• TCP(Transfer Control Protocol) 传输控制协议
• UDP(User Datagram Protocol)用户数据报协议
![Page 28: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/28.jpg)
ARP协议• 网络层用32 bit的IP地址来标识不同的主机,而链路层使用48 bit的物
理(MAC)地址来标识不同的以太网接口。只知道目的主机的IP地址并不能发送数据帧给它,必须知道目的主机网络接口的MAC地址才能发送数据帧。
• ARP的功能是实现从IP地址到对应物理地址的转换。源主机发送一份包含目的主机IP地址的ARP请求数据帧给网上的每个主机,称作ARP广播,目的主机的ARP收到这份广播报文后,识别出这是发送端在寻问它的IP地址,于是发送一个包含目的主机IP地址及对应的MAC地址的ARP回答给源主机。
• 每台主机上都有一个ARP高速缓存,存放最近的IP地址到硬件地址之间的映射记录。通常每一项的生存时间为20分钟
![Page 29: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/29.jpg)
ICMP协议• IP层的附属协议,IP层用它来与其他主机或路由器
交换错误报文和其他重要控制信息。
• ICMP报文是在IP数据报内部被传输的。
• 两个实用的网络诊断工具,Ping和Traceroute(Tracert),都是利用该协议工作的。
![Page 30: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/30.jpg)
IP协议• IP工作在网络层,是TCP/IP协议族中最为核心的协议。所有的TCP,UDP,ICMP以及IGMP数据都以IP数据报格式传输。
• IP数据报最长可达65535字节,其中报头占32 bit的数目。包含各32 bit的源IP地址和目的IP地址。在嵌入式应用中,简化设计,IP数据报长度等于数
据链路层的数据长度。
![Page 31: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/31.jpg)
TCP协议• TCP是一个面向连接的可靠的传输层协议。TCP为两台主机提供高可靠性的端到端数据通信。主要包括:• 发送方把应用程序交给它的数据分成合适的小块,并添加附加信息(TCP头),包括顺序号,源、目的端口,控制、纠错信息等字段,称为TCP数据报。并将TCP数据报交给下面的网络层处理。
• 接受方确认接收到的TCP数据报,重组并将数据送往高层。
![Page 32: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/32.jpg)
UDP协议• UDP是一种无连接不可靠的传输层协议。
• 把应用程序传来的数据加上UDP头(包括端口号,段长等字段),作为UDP数据报发送出去,
但是并不保证它们能到达目的地。可靠性由应用层来提供。就象发送一封写有地址的一般信件,却不保证它能到达。
![Page 33: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/33.jpg)
关于端口
• TCP和UDP采用16位的端口号来识别上层的TCP用户,即上层应用协议如FTP,TELNET等。
• 常见的TCP/IP服务都用1-255之间的端口号。例如FTP服务的TCP端口号都是21,Telnet服务的TCP端口号都是23
• 256-1023之间的端口号通常都是提供一些特定的Unix服务
• TCP/IP临时端口分配1024-5000之间的端口号
![Page 34: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/34.jpg)
基于ARM和uCOS-II的TCP/IP协议
• uCOS操作系统的内核中没有集成TCP/IP的协议栈,但是,TCP/IP的协议的特点决定了,它要想
很好地实现,必须要有一个多任务操作系统的支持。在嵌入式应用的领域中,uCOS也是一个很好
的选择
![Page 35: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/35.jpg)
在ARM上的TCP/IP协议栈的问题
• 32位处理器的字节对齐的问题
• ARM是一个32位处理器,通常,如果没有特殊的要求,C语言中的结构体(struct)要求4字节对齐的。但是,在TCP/IP协议中,会有如下两种问
题:
• 要求多个数据是紧缩在一个4字节中
• 有的4字节的数据从以太网的物理层接收以后,在内存中并不是4字节对齐存储的
![Page 36: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/36.jpg)
字节对齐问题的解决
• 通过,使用紧缩数据相关的关键字,可以让C语言
的结构体以紧缩的方式存储(并不不是每个结构体成员都是4字节对齐),比如在ARM SDT中,使用__packed关键字定义的结构体(struct)编译的时候,就可以生成紧缩的数据段。
![Page 37: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/37.jpg)
ARM的问题• 然而,作为32位处理器,和x86不同的是,ARM不支持非对齐字节的数据传输。就是说,在C语言里,一旦使用了32位的指针操作一个非4字节对齐的数据,ARM就会陷入一个异常。这个问题将会给TCP/IP(或者其他软件)的移植,带来很多麻烦。一定要小心的处理这些问题。
![Page 38: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/38.jpg)
BSD套接字(BSD Sockets) • BSD Sockets使用的最广泛的网络程序编程方法,主要用于
应用程序的编写,用于网络上主机与主机之间的相互通信
• UNIX,Linux,VxWorks均支持BSD Sockets,Windows的Winsock基本上是来自BSD Sockets
• Socket分为Stream Sockets和Data Sockets• Stream Sockets是可靠性的双向数据传输,使用TCP协议
• Data Sockets是不可靠连接,使用UDP协议
![Page 39: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/39.jpg)
套接字的使用
UDP服务器端和一个UDP客户端通信的程序过程• 创建一个Socket
sFd =socket (AF_INET, SOCK_DGRAM, 0)
• 把Socket和本机的IP,UDP口绑定bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize)
• 循环等待,接收(recvfrom)或者发送(sendfrom)信息• 关闭Socket,通信终止
close (sFd)
![Page 40: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/40.jpg)
uCOS-II下的驱动程序• uCOS-II没有给驱动程序提供统一的标准接口
• 任何在系统中对于硬件的管理都可以称为uCOS的驱动程序
• 为了方便驱动程序的模块化划分,提高代码的可重用性,uCOS-II的驱动程序可以自定义标准
![Page 41: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/41.jpg)
驱动程序抽象层
• 操作系统只和特定的驱动抽象层通讯,无论在抽象层下面对应的是什么类型的设备,对操作系统和用户的应用程序来说都是统一的接口。
• 通过使用C语言的指针函数的方法,实现了驱动抽象层的软件设计。通过指向不同驱动子程序的函数指针,为同一操作系统挂载了多种驱动程序。
![Page 42: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/42.jpg)
uCOS-II中CAN总线驱动程序结构
![Page 43: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/43.jpg)
uCOS-II中CAN总线驱动程序剖析
• 在can.h中定义CAN总线驱动程序的结构can_driver_t
• 通过全局数组can_driver挂载CAN总线驱动
• CAN总线的抽象层在can.c中实现
• 驱动程序在mcp2510.c中实现
• 系统的启动与驱动程序的加载过程
![Page 44: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/44.jpg)
触摸屏(键盘)驱动程序结构
![Page 45: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/45.jpg)
触摸屏驱动程序剖析
• ../ucos-ii/add/OSAddTask.c中的任务初始化函数OSAddTask_Init的触摸屏的初始化函数TchScr_init
• 创建触摸屏任务Touch_Screen_Task• 注册系统中断(SetISR_Interrupt)• 开启S3C44B0外部中断4567(TS_OPEN_INT)• 中断程序Touch_Screen_ISR的实现
• 触摸屏的查询任务
![Page 46: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/46.jpg)
键盘驱动程序剖析
• ../ucos-ii/add/OSAddTask.c中的任务初始化函数OSAddTask_Init的创建键盘任务Key_Scan_Task
• 键盘初始化函数KeyBoard_init();• 中断程序ISR_Key的实现
• 键盘的查询任务
• 键盘映射表KeyBoard_Map
![Page 47: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/47.jpg)
uCOS-II下的应用程序举例
![Page 48: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/48.jpg)
嵌入式系统开发的一点思考
![Page 49: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/49.jpg)
嵌入式的一时兴起
• 系统的模块化设计思想
• 软件的模块化
• BSP/驱动程序
• 操作系统
• 应用程序
• 硬件的模块化设计
• 基于平台的开发
![Page 50: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/50.jpg)
核心模块的设计思想
• 同一个硬件平台,内核相对固定
• 一次设计,重复使用
• 方便调试与二次开发
![Page 51: uCOS-II下bootloader 与驱动程序开发read.pudn.com/downloads75/ebook/275705/3、uCOS-II下的... · 2003-05-24 · uCOS-II下bootloader 与驱动程序开发 演讲人:刘淼(博创科技)](https://reader030.fdocuments.net/reader030/viewer/2022040915/5e8d9b96232db07e4151edb8/html5/thumbnails/51.jpg)
基于模块的开发举例——高压变频器控制器的应用
640x480 256 LCD
双串口
触摸屏
键盘
USB