浅析嵌入式网络平台的设计——基于ARM

减小字体 增大字体 作者:佚名  来源:www.zhonghualunwen.com  发布时间:2011-10-16 22:44:40

目前,嵌入式领域应用最广泛的RISC结构的微处理器ARM以低成本、高性能、低功耗的特点占据了领先地位。在工业控制、通信系统、消费类电子产品、网络系统和无线系统等领域得到广泛应用。韩国三星公司推出S3C2410芯片是基于ARM920T内核的通用嵌入式处理器,是为小型掌上设备嵌入式系统应用设计的微控制解决方案。该处理器对现有Linux、VxWork、WinCE、μC/OS-II等嵌入式操作系统有良好的支持。μC/OS-II是一种开源、代码精简,高效稳定的实时多任务操作系统,采用可剥夺型内核、基于优先级进行任务调度。μC/OS-II可以管理多达64个任务,其中8个保留给系统,应用程序最多可以有56个任务,基本满足一般嵌入式系统的需要。但在μC/OS-II操作系统不足之处是它不包含网络和文件系统。瑞士Adam unkels等开发的LWIP是开源的独立TCP/IP协议栈,在支持比较完整的TCP/IP协议的基础上减少代码,也减少对存储器的使用量。LWIP具有移植接口比较简洁清晰,易于添加入其它操作系统中的优势。

本文所采用的是三星公司推出的基于核心处理器ARM920T的S3C2410硬件平台,其网络接口使用的是CS8900A芯片。以此为基础,建立一个以μC/OS-II和LWIP为内核的网络系统,为网络应用提供支持。该体系结构包括四个模块以及各个模块之间的接口(如图附1所示),分别为:

硬件初始化模块:该模块系统启动后硬件的初始化,并为软件提供运行环境。

实时操作系统模块:通过为μC/OS-II添加硬件相关代码把μC/OS-II移植到S3C2410硬件平台上。

网络协议栈模块:为LWIP实现与操作系统相关的接口函数把LWIP移植到μC/OS-II。

网络芯片驱动模块:LWIP实现底层硬件数据接收功能,使CS8900A网卡驱动支持LWIP。

2 设计实现

2.1 μC/OS-II的移植

μC/OS-II正常运行,处理器必须满足以下要求:[1](1)处理器的C编译器能产生可重入代码;(2)用C

语言就可以打开和关闭中断;(3)处理器支持中断,并且能产生定时中断(通常在10至100Hz之间);(4)处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈;(5)处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。

S3C2410硬件平台完全支持,对μC/OS-II除一些类型定义等外,还需要使用特定处理器结构使用汇编语言实现处理器现场的保护和恢复来完成多任务切换。具体体现在对与体系结构相关文件的修改上,具体如下:

os_cpu.h

该文件中包含了与ARM处理器相关的常数、宏和数据类型。通过对ARM9的标准数据类型长度定义、进入临界区的方法定义、堆栈的增长方向的定义、开关中断的宏定义和任务切换的宏定义来对处理器和编译器进行设定。

os_cpu_c.c

该文件中定义了任务堆栈初始化函数,使堆栈如同中断刚发生过一样。用于μC/OS-II操作系统进行任务切换或中断时保护CPU的寄存器的内容到任务堆栈。除此之外还有一些标准的钩子函数用于系统扩展。

os_cpu_a.s

该文件中定义了μC/OS-II在进行任务调度时需要切换任务相关数据、处理器相关的任务切换函数、时钟中断处理函数和进退临界区宏指令。

具体分别是:

OsStartHighRdy()—高优先级任务运行调度函数;

OsCtxSw()—任务切换函数;

OsIntCtxSw()—中断服务子任务切换函数;

OsTickISR()—时钟中断处理函数。

Startup.s和Init.s

主要功能是使系统硬件环境处于一个合适的状态,从而为执行操作系统做好准备,即μC/OS-II内核运行环境初始化代码,是整个软件系统最开始运行的程序,也是移植成功的关键。其步骤分析如下:

(1)设置异常向量表。ARM要求中断向量表必须放置在从0X0地址开始的连续4字节的空间,即在0x0–0x1c位置放置7条跳转指令(其中0x14为空)。当中断产生时,ARM处理器便强制把向量表中对应中断类型的地址值赋PC,最后通过跳转指令b来完成相应跳转。(2)编写每种异常中断的处理程序,其中包括Reset_Handler、Undefined_Handler、SWI_Handler、Prefetch_Handler、Abort_Handler、IRQ_Handler、FIQ_Handler。(3)系统启动和复位后从Reset_Handler进入,需要首先进行相关硬件的初始化操作,针对S3C2410而言,只要完成时钟管理、电源管理、内存管理等初始化。因此,必须建立svc态和irq态下的堆栈建立函数:setup_svc_stack,setup_irq_stack。(4)强制ARM处理器状态转换为svc管理态,跳转到μC/OS-II代码的main入口,实际上是编译链接后产生的_main入口。

[1] [2] [3]  下一页

Tags:嵌入式网络平台

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论