如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
HYPERLINK"http://chromatic32.spaces.live.com/blog/cns!90A1BEE8EE907800!415.entry"I/O系统 1.使用设备的过程 使用设备的过程通常包括:驱动程序初始化;创建设备;打开文件;I/O操作;关闭文件;删除设备。 块设备:一个设备可以实现不同的文件系统,可以有多个文件; 非块设备:一个设备通常对应一个文件。 2.基本I/O函数说明 VxWorks中I/O分为基本I/O和缓冲I/O,基本I/O是VxWorks中最底层的I/O,以下是7个标准C语言库兼容的接口: #include“ioLab.h” 1)intopen(constchar*name,intflags,intmode);打开/创建文件,第一个参数为文件名,第二个参数定义对打开的文件进行的操作,它可以是O_RDONLY,O_WRONLY,O_RDWR,O_CREAT。 2)STATUSclose(intfd);关闭文件,其将终止fd与物理文件之间的关联,并释放在文件描述符表中占用的资源。释放后文件描述符和文件描述符表的空间能够重新使用。 3)intcreat(constchar*name,intflags)创建文件同时以指定标志打开文件。实际上,creat创建文件时先确定文件所在设备,然后调用设备驱动程序提供的函数创建文件。 4)STATUSremove(constchar*name)删除文件;和creat一样,remove先确定文件所在设备,然后调用设备驱动程序提供的函数删除文件。 5)intread(intfd,char*buffer,size_tmaxbytes);读取之前创建或者打开的文件;第二个参数是读取数据缓冲区指针,第三个参数是最大读取字节数。函数返回的是函数实际读取的字节数; 6)intwrite(intfd,char*buffer,size_tnbytes)写入到之前创建或者打开的文件。第二个参数是输出数据缓冲区指针,第三个参数是要求写得字节数。其返回值表示所写的字节数,如果等于0,表示没有写入任何数据。 7)intioctl(intfd,intfunction,intarg);特殊控制。其对描述符fd指定的对象执行在function中给出的操作, 文件描述符:所有的基本I/O操作都引用文件描述符(fd)。文件描述符是调用open()或者create()返回的一个正数值,其他I/O调用需要使用该fd参数。文件描述符全局可见,两个不同的任务通过相同的文件描述符访问的将是同一个文件。VxWorks支持有限的文件描述符,具体在I/O系统初始化时指定有效的fd数目(宏定义NUM_FILES)。因此当文件不再使用时应该立即关闭文件,防止超出系统限制。 第五章VxWorks启动过程 3.VxWorks启动过程 VxWorks的启动过程需要解决: 处理器初始化:使处理器复位,禁止中断,内部寄存器都为确定的值; 代码装入:将执行映像从存储介质装入RAM执行; 硬件初始化:使硬件复位,并初始化为中断或查询方式为系统服务; 内核激活(函数为kernelInit()):使多任务微内核开始调度任务运行; 操作系统组件初始化:初始化用户应用需要的各种操作系统功能。 “处理器初始化”和“代码装入”即通常所说的引导代码(romInit.s和romStart.c)。 通常的启动过程为:引导,准备激活内核,激活内核,根任务运行。 VxWorks通过一个根任务usrRoot来完成“安装设备驱动”和“各种组件初始化”的操作。对内核而言,根任务和普通的用户任务一样。由于VxWorks的wind内核是一个微内核,所有的设备驱动和常规操作系统功能都不在内核中实现,因此通过一个普通任务即根任务完成设备驱动的安装和系统组件初始化。 4.引导 引导过程是上电后最先执行的部分,确保系统代码会位于正确的位置。 系统开始函数是romInit(),然后跳转到romStart(),这两个函数都是在ROM/FLASH中开始执行。 romInit()是个和目标系统CPU特性直接相关的汇编程序,其短小精悍,所执行的最基本的硬件初始化只为了可以正确运行接下来的C语言程序romStart(),余下的初始化由一般初始化程序完成。 5.准备激活内核 内核激活的准备工作由usrInit()实现,“准备”也就是使激活内核的条件满足:设备处于静止状态;处理器中断处于禁止状态。在引导阶段已经使处理器中断处于禁止状态,因此usrInit()的主要工作在于使设备处于静止状态。 6.激活内核 激活内核由函数kernelInit()实现,具体工作包括: 初始化、启动内核;初始化系统内存池;激活一个rUsrRoot任务完成初始化过程;解除中断(在kernelIni
as****16
实名认证
内容提供者
最近下载