嵌入式系统 C 课程期末考察论
年级:大学三年级
专业:09城建电子一班
学号:09290060134
姓名:檀友军
第一部分 LINUX进程通信- “管道”
管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。
有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。
Linux管道的实现机制
在Linux中,管道是一种使用非常频繁的通信机制。从本质上说,管道也是一种文件,但它又和一般的文件有所不同,管道可以克服使用文件进行通信的两个问题,具体表现为:
· 限制管道的大小。实际上,管道是一个固定大小的缓冲区。在Linux中,该缓冲区的大小为1页,即4K字节,使得它的大小不象文件那样不加检验地增长。使用单个固定缓冲区也会带来问题,比如在写管道时可能变满,当这种情况发生时,随后对管道的write()调用将默认地被阻塞,等待某些数据被读取,以便腾出足够的空间供write()调用写。
· 读取进程也可能工作得比写进程快。当所有当前进程数据已被读取时,管道变空。当这种情况发生时,一个随后的read()调用将默认地被阻塞,等待某些数据被写入,这解决了read()调用返回文件结束的问题。
注意:从管道读数据是一次性操作,数据一旦被读,它就从管道中被抛弃,释放空间以便写更多的数据。
1. 管道的结构
在 Linux 中,管道的实现并没有使用专门的数据结构,而是借助了文件系统的file结构和VFS的索引节点inode。通过将两个 file 结构指向同一个临时的 VFS 索引节点,而这个 VFS 索引节点又指向一个物理页面而实现的。
2.管道的读写
管道实现的源代码在fs/pipe.c中,在pipe.c中有很多函数,其中有两个函数比较重要,即管道读函数pipe_read()和管道写函数 pipe_wrtie()。管道写函数通过将字节复制到 VFS 索引节点指向的物理内存而写入数据,而管道读函数则通过复制物理内存中的字节而读出数据。当然,内核必须利用一定的机制同步对管道的访问,为此,内核使用了锁、等待队列和信号。
当写进程向管道中写入时,它利用标准的库函数write(),系统根据库函数传递的文件描述符,可到该文件的 file 结构。file 结构中指定了用来进行写操作的函数(即写入函数)地址,于是,内核调用该函数完成写操作。写入函数在向内存中写入数据之前,必须首先检查 VFS 索引节点中的信息,同时满足如下条件时,才能进行实际的内存复制工作:
·内存中有足够的空间可容纳所有要写入的数据;
·内存没有被读程序锁定。
如果同时满足上述条件,写入函数首先锁定内存,然后从写进程的地址空间中复制数据到内存。否则,写入进程就休眠在 VFS 索引节点的等待队列中,接下来,内核将调用调度程序,而调度程序会选择其他进程运行。写入进程实际处于可中断的等待状态,当内存中有足够的空间可以容纳写入数据,或内存被解锁时,读取进程会唤醒写入进程,这时,写入进程将接收到信号。当数据写入内存之后,内存被解锁,而所有休眠在索引节点的读取进程会被唤醒。
管道的读取过程和写入过程类似。但是,进程可以在没有数据或内存被锁定时立即返回错误信息,而不是阻塞该进程,这依赖于文件或管道的打开模式。反之,进程可以休眠在索引节点的等待队列中等待写入进程写入数据。当所有的进程完成了管道操作之后,管道的索引节点被丢弃,而共享数据页也被释放。
第二部分 嵌入式系统发展现状
进入20世纪90年代,嵌入式技术全面展开,目前已成为通信和消费类产品的共同发展方向。
在通信领域,数字技术正在全面取代模拟技术。在广播电视领域,欧洲的DVB(数字电视广播)技术已在全球大多数国家推广。而软件、集成电路和新型元器件在产业发展中的作用日益重要。所有上述产品中,都离不开嵌入式系统技术。在个人领域中,嵌入式产品将主要是个人商用,作为个人移动的数据处理和通讯软件。由于嵌入式设备具有自然的人机交互界面,GUIarm嵌入式系统期末考试屏幕为中心的多媒体界面给人很大的亲和力。手写文字输入、语音拨号上网、收发以及彩图形、图像已取得初步成效。
目前一些先进的PDA在显示屏幕上已实现汉字写入、短消息语音发布,日用范围也将日益广阔。对于企业专用解决方案,如物流管理、条码扫描、移动信息采集等,这种小型手持嵌入式系统将发挥巨大的作用。自动控制领域,不仅可以用于ATM机,自动售货机,工业控制等专用设备,和移动通讯设备结合、GPS、娱乐相结合,嵌入式系统同样可以发挥巨大的作用。
硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。
从软件方面讲,也有相当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft、QNX和Nuclear等产品。我国自主开发的嵌入式系统软件产品如科银(CoreTek)公司的嵌入式软件开发平台DeltaSystem,中科院推出的Hopen嵌入式操作系统。
第三部分:嵌入式系统及其在机器人控制中的应用
嵌入式控制器越来越微型化、功能化。微型机器人、特种机器人等也获得更大的发展机遇,无论从控制系统的结构还是机器人的智能程度方面都得到了很大的提高。以索尼的机器狗为代表的智能机器宠物是最典型的嵌入式机器人控制系统,除了能够实现复杂的运动功能,它还具有图像识别、语音处理等高级人机交互功能,它可以模仿动物的表情和运动行为。火星车也是一个典型例子,这个价值10亿美金的技术高度密集移动机器人,采用的是VxWorks操作系统,它可以在不与地球联系的情况下自主工作。下面从运动控制系统[1-4]、远程控制[2-5]、视频监控系统[5-7]三个方面分析嵌入式系统在机器人中的应用情况。
1、 运动控制系统
机器人的运动控制部分一般采用ARM 7来完成,主要是由于整个系统对实时性要求较高,利用ARM 7来专门控制伺服能更好的满足要求。
图2.1 ARM 7实现电机控制框图 图2.2 远程控制系统框架图
图2.1是ARM 7实现电机控制的框图,ARM 7通过串口接收数据,并根据定义好的串口相关通信协议对接收到的数据进行解析,得到各个电机的转向以及运动圈数,从而控制电机的转动,串口数据的接收是通过中断的方式来实现的。一旦有数据到达,就产生一次中断,
在中断服务程序中,新发送过来的数据将被保存起来,并且设置标志位为真,用以通知主任务有新的数据到达,可以调用电机驱动程序来实现电机的运动。
2、 远程控制
图2.2是远程控制系统的框架图,任何能连接上互联网的地方的用户,在远程用户端,OPENGL仿真将预演用户所输入的机器人控制命令后机器人的运动轨迹,并且将机器人的运动轨迹做相应的反解,从而得到各个控制关节,即相应的电机的运动数据,这些数据通过互联网传送到近端控制中心ARM 9控制板上,通过它转发给实时控制板ARM7,ARM7就控制伺服驱动器让电机按预定的轨迹运动,从而实现机器人的远程控制。
远程用户端一个重要的功能是能实时地观看到机器人的运动姿态,所以一个视频客户端是必须的。基于服务器/客户端的模型,在ARM 9控制板上运行着视频服务器,该视频服务器与带USB接口的摄像头相连,摄像头实时地采集并联机器人的运动状态,并将采集到的图像编码,ARM 9控制板将经过编码压缩后图像数据通过以太网传送到远程客户端,远程客户端在接收到图像数据后经过解码、显示从而形成视频图像,用户也就可以观测到机器人的运动状态。
ARM 9控制板是整个系统的核心,它扮演着系统的数据中心,控制中心的角。一方面它将摄像头采集到的视频数据经过编码后,通过以太网发送到远程用户端;另一方面它将它还需要负责将远程用户端传送过来的控制命令解析并转发给ARM 7控制板并接收反馈信息。
图2.3 远程机器指令流程
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论