vxworks开发的一点心得
内容导读:
1 内存的使用
内存要预先分配好,要注意指针、长度的计算,用完必须释放。
嵌入式系统要求实时性高,系统一般在初始化时给各模块分配好内存。vxworks有一个内存管理策略,类似于BSD4.3(见理查德森编写的《TCP/IP协议实现》),基于POOL/MBLK/CBLK三级管理,采用链式指针。
内存的两个参数是起始指针和块长度,这在编程过程中必须要注意,尤其是成帧、解帧时必须计算好长度,笔者曾少计算两个字节,结果导致CRC校验总出错,结果对着1500个字节的ASCII码看了五六遍,终于发现。
内存的释放分为两类:本模块的释放以及其他模块内存的释放,本模块释放时只需要传送指针即可,但指针必须对准,否则会耗尽内存。其他模块内存释放借助于回调函数实现,这一般是一个指针函数。
2 驱动程序的编写
驱动程序编写其实很简单,明确它的功能即可。驱动程序包括两个部分的功能:I/O控制和数据的收发,这部分的接口在vxworks里面以及标准化了,ppc860t带有两块网卡,一个是百兆一个是十兆,两个驱动程序不同,都写的很好,很值得参考,里面包括了对寄存器的控制,数据内存的管理。一些非标准设备可以仿效网卡驱动程序,只要在MUX层下注册,能交给IP或对应的程序即可,具体内容在下节介绍。
3 MUX层的使用
MUX层是VXWORKS中的一个关键设计,MUX层以上是IP,IPX等协议,以下是各种网卡驱动协议,数据的上下传输都需要经过它,协议和驱动的对应通过绑定实现。MUX层中有两个重要的模式,精灵模式和混杂模式。精灵模式使得你可以挂进一个钩子函数,数据一到MUX层即被勾住,混杂模式则是所有协议都不处理时交给该协议处理。笔者在实现PPPOE时借助于百兆网卡实现,首先要剥掉以太网头,交给对应的PPP协议处理。百兆网的驱动是现成的,不想改也不好改。于是在MUX层想办法,通过在MUX层注册一个PPPOE的精灵程序,在IP之前勾住百兆网上传的数据,解帧后交给PPP,PPP解帧后再通过MUX层交给IP。精灵程序的另一个好处是实现防火墙。
4 编程的习惯
注释很重要,信号量、内存等必须注意释放。
标签:
来源: 作者: 时间:2005/9/12 0:00:00