首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM的嵌入式TCP/IP协议的实现(2)

基于ARM的嵌入式TCP/IP协议的实现(2)

1.3 其它协议ARP协议为32位IP地址到对应的48位以太网地址之间提供动态映射。嵌入式系统中仅响应ARP请求,发送ARP回答包。请求者广播出包含ARP请求的以太帧、目的以太网地址为全1的广播地址。本机收到后,由目的IP地址发现自己是目的主机,发送一个ARP回答。ICMP通过IP协议传输其报文。IP协议是无连接的,它无法将报文和错误信息传到最初的主机,ICMP将状态信息和错误信息发送到发报文的主机。
2 前端设备的系统设计
TCP/IP协议扩展到工业控制级,将企业内部计算机网络应用于工业现场实时信息的发布和显示,通过Internet浏览器对现场工业信息进行动态监视。下面是笔者在某公司一分布式监控系统中的应用实例。基于TCP/IP协议的前端设备系统软件结构如图3。前端嵌入式设备处理器是Samsung公司的S3C4510B(ARM核)。该芯片是用在基于以太网系统的高性价比、高性能的16/32位RISC微控制器。通信部分采用BNC接口方式,信号输出经耦合隔离变压器由RJ45接头联入集线器,此外还设计了液晶显示和键盘输入当地接口功能。
在TCP/IP协议中多处用到超时和重发机制。这种机制对于确保两个或多个彼此独立的通信结点从通信错误或故障状态自动恢复到正常状态是非常有效的,但也增加了软件结构的复杂性。因为对超时的处理通常独立于正常程序流程,也就是与正常的程序流程异步。要实现的TCP/IP协议软件中有四处要用到定时器:第一是在ARP高速缓存的维护中,被添加到ARP高速缓存中的表项在一段时间后要置为无效;第二是在等待对发出的ARP请求返回响应时,可能会在指定的超时时间内还未收到返回的响应;第三是在IP组装收到分片时,由于部分分片在一定时间内没有收到而丢弃整个IP包;第四是在TCP等待接收方对数据段的确认时。如果在指定时间内还未收到对某个数据段的确认,需重新发送。从上述可见,要实现的定时器具备以下特点:
·对定时的精度要求都不是很高,基本都是秒级的精度。这样,完全可以稍滞后一些来处理定时器超时,不把超时处理放在时钟中断处理程序中。

    ·对同一类超时处理可以由同一处理程序来完成,只是传入到相应的处理程序中的参数不同而已。例如一个ARP高速缓存中的表项超时时,需要将其置为无效,可以统一用一个处理程序,参数中放入相应的表项地址即可。
首先,定义一定时器的数据结构,如图4所示。每一类超时都是由一个超时控制块和其所属的一个由超时事件项组成的链表管理。整个链表按超时事件将要发生的时间顺序排列,先发生的超时事件排列在前。超时控制块中的head_ptr用以指向一个超时事件项链表的首项;timeout_process是超时事件发生时处理程序的入口地址。在每个超时事件项中,next_ptr指向链表中的下一项;relative_time是本表项的超时事件相对于上一表项的超时事件发生的相对时间。所以某个表项表示的超时事件距离当前的时间是它以前所有表项(包括自身)中的relative_time的和。relative_time的基本单位是granularity。

    定时器任务使用一个信号量作同步。信号量有两个变量:count和waiting_task。count对事件计数,当count大于0时,表示有count个事件发生并等待处理;当count小于0时,表示有某个任务在等待事件的发生,此时waitint_task保存相应任务控制块的地址。信号量有两个操作:sem_up和sem_down。sem_up首先使count加1,然后看count是否为0,若为0表示有任务在等待,通过waiting_task中记录的任务控制块的地址把等待任务的状态设为就绪,否则返回。sem_down首先使count减1然后看count是否小于0,若小于0会使当前任务成为等待状态并引发任务管理器对任务的调度,否则返回。
每当时钟中断服务程序计数到granularity个时钟中断,给定时器任务使用的信号灯作sem_up操作。当定时器任务被调度执行时,它遍历每一个超时控制块,对每一个超时控制块作如图5所示的处理,最后对信号灯调用sem_down。
继承事业,薪火相传
返回列表