新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 轻型PPP协议在µC/OS-II操作系统中的实现

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

作者:时间:2012-03-21来源:网络收藏

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数据帧发送出去。

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数据帧。



评论


相关推荐

技术专区

关闭