轻型PPP协议在µC/OS-II操作系统中的实现

发布者:tgdddt最新更新时间:2012-03-21 来源: 微计算机信息 关键字:ARM  µCOS-II  嵌入式系统  PPP 手机看文章 扫描二维码
随时随地手机看文章

1 引言

随着嵌入式技术的发展,让嵌入式设备接入Internet,实现网络资源共享,是未来发展的必然趋势,µC/OS-II操作系统中没有完备的网络协议栈[1,2],要实现嵌入式设备网络通信,必须要有自己的网络协议。鉴于目前PPP协议使用的普遍性和广泛性[3,4],本文提出了基于ARM7TDMI处理器的µC/OS-II操作系统上PPP协议的设计与实现。通过PPP协议在µC/OS-II上的实现[5,6],能让嵌入式设备接入Internet,进行信息互访,为未来的“普适计算”的发展提供了一个有利条件。

2 µC/OS-II移植实现

2.1 编写ARM7TDMI的启动程序

启动代码是芯片复位后进入C语言的main()函数前执行的一段代码,启动代码主要有4个文件:Vectors.s、Init.s、 Target.c和Target.h。Vectors.s主要包括了异常向量表、堆栈初始化InitStack和中断服务程序与C程序的接口。而 Init.s主要是指系统初始化代码,执行的顺序是初始化堆栈,目标设备初始化和执行Main模块。对于Target.c和Target.h来说,主要包含了异常处理程序和目标板初始化程序。

2.2 µC/OS-II的移植

OS_CPU.H中函数软中断SWI机制[7],为了使底层接口函数与处理器状态无关,同时在对底层函数调用不需要知道函数的位置,因此在uC/OS移植中,使用软中断指令SWI[1]作为底层接口,通过不同的功能号来区分不同的函数,其软功能分配号如表1所示。

表1 软中断功能号分配

                          Table 1 SWI function number assignments

   功能号

           接口函数

      简述

    0x00

Void OS_TASK_SW()

任务级任务切换函数

    0x01

_OSStartHighRdy(void)

运行优先级最高的任务

    0x02

Void OS_ENTER_CRITICAL()

关中断

    0x03

Void OS_EXIT_CRITICAL()

开中断

    0x40

Void *GetOSFunctionAddr(int index)

获取系统服务函数入口

    0x41

Void *GetUdrFunctionAddr(int index)

获取自定义服务函数入口

    0x42

Void OSISRBegin(void)

中断开始处理

    0x43

Int OSISRNeedSwap(void)

判断中断退出需要切换吗

    0x80

Void ChangeToSYSMode(void)

任务切换到系统模式

    0x81

Void ChangeToUSRMode(void)

任务切换到用户模式

    0x82

Void TaskIsARM(INT8U prio)

任务切换是ARM代码

    0x83

Void TaskIsTHUMB(INT8U prio)

任务切换是THUMB代码

用软中断作为操作系统的底层接口就需要在C语言中使用SWI指令。在ADS中,有一个关键字_swi,用它声明一个不存在的函数,若在用户任务中调用这个函数就在调用这个函数的任务代码中地方插入一条SWI指令,并且指定了功能号。

OS_CPU.H中关中断OS_ENTER_CRITICAL()和开中断OS_EXIT_CRITICAL()都是用来保护临界资源代码[8]。移植使用软中断指令SWI使处理器进入管理模式和ARM指令状态,并通过调用功能号0x02和Ox03来关中断和开中断。但在C语言中,仍然使用OS_ENTER_CRITICAL()关中断,而使用OS_EXIT_CRITICAL()开中断。

OS_CPU.H中通过使用结构常量OS_STK_GROWTH中值来指定堆栈的生长方式:当OS_STK_GROWTH置为1时,表示在堆栈存储时,是从上到下的方式存储。当OS_STK_GROWTH置为0时,表示在堆栈存储时,是从下向上的方式存储。

OS_CPU_A.S中OS_TASK_SW()是在µC/OS-II中从低优先级任务切换到最高优先级任务时被调用的。在ARM移植使用软中断指令SWI使处理器进入管理模式和ARM指令状态,并调用功能号0实现OS_TASK_SW()的功能。但在C语言中,仍然使用OS_TASK_SW()函数进行任务切换功能。

OS_CPU_A.S中OSStartHighRdy():在多任务环境下,OSStart()最终调用OSStartHighRdy()函数运行多任务启动优先级最高的任务。移植中使用软中断指令SWI使处理器进入管理模式和ARM指令状态,并使用功能号1实现OSStartHighRdy()功能。在调用OSStartHighRdy()函数之前,OSTCBHighRdy指向的是优先级最高的任务的任务控制块。[page]

OS_CPU_C.C中断服务子程序的算法如下:

void XxxISR(void)

{OS_ENTER_CRITICAL()或直接给变量OSIntSum赋1;

清除中断源(与具体的外设有关);

通知中断控制器中断结束:VICVectAddr=0;

开中断:OS_EXIT_CRITICAL();

用户处理程序;}

OS_CPU_C.C中任务堆栈的初始化函数OSTaskStkInit()

OS_STK *OSTaskStkInit()

{模拟带参数(pdata)的函数调用;

模拟ISR向量;

按照预先所设定的寄存器值初始化堆栈结构;

返回栈顶指针给调用该函数的函数;}

3 轻型PPP协议的设计与实现

PPP协议软件模块主要通过各层协商机制完成数据链路的建立、配置、测试、以及在链路连接建立后,将收到的PPP数据帧解析,根据协议字段将数据信息交由不同的上层模块进行处理;同时可根据系统的需要,将上层模块传来的信息打包成不同的PPP数据帧发送出去。

Main主模块:该模块控制着整个PPP守护进程的程序流程。当PPP连接成功后,它使PPP守护进程进入休眠状态,一直到管理员断开或者外部事件引起断开时它负责断开PPP连接。在PPP成功建立连接后,建立一个信号量,由PPP模块处理任务不断检测这个信号量;若检测到有调制解调器中断复服务程序发来的信号量,则进行PPP数据帧的发送或接收。

LCP模块:该阶段是通过交换配置数据包来建立和配置数据链路,发送LCP REQ数据包,将会收到客户端的发送过来的LCP ACK数据包,客户端还要回REQ数据包,服务器端接受到LCP REQ后,则向客户端同样发送一个LCP ACK数据包,至此链路协商正式结束。

认证协商模块(PAP):认证阶段是可选的,如果在链路建立协商阶段,服务器发送的第一个LCP REQ数据包中含有了认证的数据选项,而且其数据选项一直没有被对方拒绝并且得到确认,则进入认证协商阶段;否则,进入网络层协商阶段。

网络层协商模块(NCP):NCP协商的主要目的是服务器首先让客户端确认自身的IP地址,然后给客户端动态分配一个合法的IP地址。网络层协商 NCP每次请求数据包必须含有服务器端的IP选项,并且此选项最终被确认。在客户端回送了对服务器端的确认数据包后,开始进入客户端向服务器端申请动态分配IP地址的阶段,所以客户端继续向服务器端发送含有客户端IP地址且值为0的NCP REQ数据包,服务器端接受到这个数据包后,从IP地址池中取出一个合法的IP地址,发送了一个NCP NAK数据包。在该数据包中,客户端IP地址的数据选项中填入了从IP地址池中取出的IP地址的值,即给客户端动态的分配IP地址的值。随后,客户端将接收到的NCP NAK中的IP地址值作为下一次回送的NCP REQ中的客户端的IP地址值的选项。当服务器端再接收到此NCP REQ数据包后,便发送NCP ACK数据包,至此整个PPP协商过程结束,链路建立成功。

PPP模块:在协商好网络协议,可以进行数据的传输。为了更实时的进行数据传输,在这里为PPP协议模块建立一个信号量,当发生modem接受事件时,当Modem接收到数据时引发处理器的外部中断。在外部中断0处理函数中,将接收到的数据存入串口缓冲区中,如果缓冲区的数据已组成了一个完整的 PPP数据帧,则由中断服务子程序通过µC/OS-II所提供的OSSemPost()向任务PPP模块任务发送一个信号量。

对PPP模块任务来说,通过OSSemPend()函数等待由Modem中断服务程序发出的信号量,当接收到这个信号量后,说明有事件发生;再次判断这个事件是什么事件,若是接送事件,则调用Receive()接收PPP数据帧,放到SRAM接收缓冲区,若接收后,判断接收缓冲区是否正确地接收到数据,若正确地接收到PPP数据帧时,则调用PPPInput()进行对PPP数据帧的解析。若帧类型是IP则调用IP数据包的处理例程;若帧类型是LCP则调用LCP数据帧的处理例程;若帧类型是PAP、NCP则分别调用这两种类型数据包的处理例程。若是发送事件,则调用 Send()发送PPP数据帧。[page]

4 轻型PPP协议模块的测试和性能分析

根据点对点通信的特点,分别在PC和ARM板两端安装一个Modem,通过一个交换机,或直接用电话线连接起来。由PC 端通过拨号软件,进行与ARM开发板端的连接后,分别通过双方的协商,建立数据通信;在ARM开发板端,建立一个Test_task测试任务模块,将一个信息“hello world”封装成UDP包,再经PPP模块的封装,发送到PC机端,PC机端若与ARM板连接成功,在Modem状态对话框中,能够正确的显示出对方所发送来的字符数和自己发送给对方字节数以及连接状态;若PC端显示出这个信息,说明PPP模块得以实现。通过测试后,其Modem状态连接图如图1所示。

   

图1 Modem状态连接图

Fig.1 The state link block of modem

从PC端的Modem状态连接图可知,该PC机端已经通过了相互协商,建立连接,处于数据帧的接收状态。已经正确地接收到由ARM开发板所发送的PPP数据帧,进行了相互通信,表明ARM板上PPP协议成功的得到了实现。

5 结束语

本文作者创新点在于从uCOS—II内核工作原理入手,以ARM开发板为平台,简述了系统硬件平台ARM7TDMI处理器的体系结构和相应的指令集。对与处理器相关的代码部分进行了修改与编译,实现了µC/OS-II在ARM开发板上移植;在该系统平台上重点的介绍了轻型 PPP协议设计与实现的具体过程,主要对main主模块、LCP模块、PAP模块、NCP模块和PPP模块等五个方面的设计与代码编写。通过测试,验证了 ARM开发板的PPP协议的网络通信功能。

1.  Jean J L.uC/OS-||The Real_Time Kernel[M].2nd ed.北京:北京航空航天出版社,2003.

2. uC/OS-II for ARM Processors[Z].2006.http://www.Micrium.com.

3.  The Point-to-Point Protocol[S]. RFC 1661, 1994.

4. 姚念龙,尹航,姜久春.μC/OS-Ⅱ在MC9S12A64上的移植及应用[J]. 微计算机信息,2006,12-2:53-55。

5. 谢林枫.基于PPP协议单片机拨号上网的设计与实现[J].单片机与嵌入式统应用,2002,(7):53-55.

6.  ARM Developer Suite Version1.2 CodeWarrior IDE Guide[Z].2006. http://www.arm.com

7.   LABROSSE J J.嵌入式实时操作系统uC/OS-Ⅱ[M].2版.邵贝贝,译.北京:北京航空航天大学出版社,2005.

8. Andrew N S,Dominic S,Chris W.ARM System Developer’s Guide designing and Optimizing System Software[M].北京:北京航空航天出版社,2005.

关键字:ARM  µCOS-II  嵌入式系统  PPP 引用地址:轻型PPP协议在µC/OS-II操作系统中的实现

上一篇:基于WinCE的嵌入式系统注册表的研究
下一篇:基于Windows CE的7×3手机键盘驱动实现

推荐阅读最新更新时间:2024-05-02 21:58

ARM HMS30C7202与触摸屏接口电路的设计
1. 导言 随着现代计算机技术和互联网技术的飞速发展,嵌入式系统开始占据市场主流。因32位ARM嵌入式处理器具有高性能、低功耗的特性,它已广泛应用于科学研究、工程设计,军事技术,商业文化艺术及消费产品。而触摸屏作为一种最新的电脑输入设备,具有坚固耐用、反应速度快、节省空间、易于交流等优点。主要用于公共信息的查询、工业控制、军事指挥、旅游、电子游戏、点歌点菜、多媒体教学和房地产预售等场所。因此,本文着重讨论基于嵌入式微处理器HMS30C720与触摸屏控制器的接口设计和底层串口驱动与上层microwindows图形界面结合的编程设计方法,以实现触摸屏对嵌入式设备之间的控制。 2. 系统的整体结构 该系统的整体结构如图
[单片机]
<font color='red'>ARM</font> HMS30C7202与触摸屏接口电路的设计
ARM9的中断处理技术详细深入剖析-三星S3C2440处理器
1、中断的生命周期 中断信号产生(中断源)—》中断信号过滤(中断控制器)—》中断信号处理(CPU) 1.1 中断源 在中断的生命周期中,中断源的作用是负责产生中断信号。 S3C2440支持60个中断源(包含子中断源,不包括EINT8_23等里面的独立中断源,例如串口的发送中断、接收中断、错误中断属于串口的子中断源。); S3C6410支持64个中断源; S5PV210支持93个中断源; 1.2 中断控制器 1.3 中断处理 1)非向量方式(2440) 2)向量方式(6410/210) (对于向量方式,是直接进入中断函数(而不是跳转到中断程序总入口),因为中断函数(的地址)保存在相应寄存器里,根据相应中断源跳转
[单片机]
ARM调查:七成五企业领袖关注物联网商机
 ARM近日公布一项由英国经济学人智库(EconomistIntelligenceUnit,EIU)主办,ARM赞助的全面性调查,调查主题为「物联网商业指数:一场正在加速的宁静革命(TheInternetofThingsBusinessIndex:Aquietrevolutiongatherspace)」。调查结果发现,有高达75%的高阶企业领袖正积极研究物联网所带来的相关商机,且有30%认为物联网将开启新的营收机会。   另有29%的受访者预期物联网将带动全新的工作型态,且最终将改变企业的营运模式(23%)。调查结果指出,要让数百万个连网装置能够互相沟通,避免所谓的「孤岛式网路(InternetofSilos)」现象,第一
[物联网]
uboot之ARM位置无关代码设计
前言: 所谓位置无关代码是指:可执行镜像test.bin 我将它拷贝至内存0x30000000,然后pc = 0x30000000、它可以顺利执行; 我将它拷贝至内存0x38000000,然后pc = 0x38000000、它仍可以顺利执行。 1.程序的编译及运行流程 源码经过编译、汇编(生成相对地址符号表)和连接(提供绝对首地址、进而确定绝对地址符号表)后编程可执行镜像; 特别指出地是:在连接时,对各个目标文件进行重定位、建立符号引用规则;进而为变量和函数分配了绝对的运行地址; 程序执行时,系统必须把可执行镜像加载到连接阶段指定的地址空间,这样程序执行中才能对变量、函数等符号做正确引用,程序才能正常运行。 在有操作系
[单片机]
借助飞思卡尔MCU和i.MX处理器畅享智能新生活
生活在多媒体时代 曾几何时,我们印象中的嵌入式系统就是一种专用的计算机系统,作为装置或设备的一部分。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都在使用嵌入式系统。只是彼时,嵌入式系统似乎和多媒体应用以及多媒体人机交互还很远。 技术的脚步总是让我们看到以前无法想象的应用出现,如今,我们已经生活在多媒体时代。嵌入式产品的多媒体应用让人们尽情享受科技之美,智能多媒体已处处可见。在智能交通中,道路上的网络摄像以便车辆导航、流量控制、信息监测;汽车服务方面,GPS让你及时调整行车路线,享受畅爽出行;在智能家居中,冰箱、空调等的网络化和智能化将引领人们的生活步入一个崭新的空间,即使你不在家里,也可以通过手机、平
[嵌入式]
基于ARM S3C44B0X 的LED显示屏设计
  1 引言   L ED 显示屏应用十分广泛,是信息传播的有效工具。在某井下矿采设备监测系统中选用了ARM S3C44B0X 32 位单片机作为CPU ,根据应用要求,监测系统的显示部分使用16 行的单色L ED 显示屏实时显示监测数据。由于系统外设较多,端口资源十分紧张,针对这种情况开发了一种四线驱动的显示屏电路设计方案,很好地解决了这个问题。   2 常见的驱动电路设计及改进   在常见的显示驱动电路设计中,列控制一般采用串入并带锁存的移位寄存器如74HC595 ,将数据打入锁存器中,使寄存器各引脚呈现与锁存器相同的状态来选中需要点亮的列。行控制一般采用译码器电路如4/ 16 译码器74HC154 ,控制信号经译码后选
[电源管理]
基于<font color='red'>ARM</font> S3C44B0X 的LED显示屏设计
ARM内核目标系统中的代码运行时间测试方法
  在ARM系统中,有时需要精确的时间测量。通常,取时间的C函数(如gettime()等)不仅通用性差(必须包含头文件DOS.H,且不支持Unix、Linux和标准C),明显不适用于ARM系统 ;更成问题的是,其最短时间只能到10-2 秒级,不能提供更短的时间分度。根本原因在于: 这类函数是基于系统实时时钟(RTC)的,而RTC通常采用标准化钟表晶振,频率只有32.768 kHz而已 。   然而很多应用涉及μs级的时间计量,这是标准化了的RTC以及基于它的时间函数所无能为力的。笔者在移植DES算法到ARM系统的实验过程中,便遇到过要定量评估加密算法耗时多少的问题,发现的确不能用上述常规的C函数解决。经对ARM芯片结构的考察,发
[单片机]
<font color='red'>ARM</font>内核目标系统中的代码运行时间测试方法
ARM9(S3C2440) LED控制
下面为TQ2440开发板的硬件LED接口: LED控制思想 1、将相应的引脚设置为输出 2、再将相应的引脚设置为低电平 代码实现 src: inc: 2440init.s为开发板开启首先运行的代码。目的:初始化C语言环境。 ; NAME: 2440INIT.S ; DESC: C start up codes ; Configure memory, ISR ,stacks ; Initialize C-variables 。。。。。。 。。。。。。 IMPORT MMU_SetAsyncBusMode IMPORT MMU_SetF
[单片机]
<font color='red'>ARM</font>9(S3C2440) LED控制
热门资源推荐
热门放大器推荐
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved