vxworks入门介绍_第1页
vxworks入门介绍_第2页
vxworks入门介绍_第3页
vxworks入门介绍_第4页
vxworks入门介绍_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 VxWorks入门介绍 2010/10/1 目录 VxWorks简介 BSP及系统执行流程 中断 任务调度 任务切换 任务创建 定时器 目录 任务间通讯 信号量 二进制信号量 消息队列 socket 集成开发环境Tornado的使用 VxWorks简介 VxWorks组成 VxWorks操作系统由任务的管理与调度、任务的同步与通信、动态内存的管理、时钟的管理、I/O管理、文件系统等几部分组成 VxWorks简介 对于VxWorks ,用户可裁减掉程序员认为没有使用到的功能,直到只剩下最简内核(可以只有10k左右) 一般使用的VxWorks为标准的单CPU版本。VxFusion为标准的多CPU

2、版本,应用程序在多个CPU上运行,但仍然象在一个CPU 上运行那样进行数据的交换、通信与同步。 VxWorks简介 VxWorks使用统一的API,对于VxWorks支持的不同的CPU、VxWorks的不同版本,API都是一样的。VxWorks的API是由操作系统内核提供的服务原语搭建起来的。服务原语,是不可打断的,这样可以保证系统调用的时间尽量小、尽量是常量和可确定 BSP BSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间,系统的执行过程。驱动程序就是一些包含I/O操作的子函数。 初

3、始化包括:CPU Init、Board Init、System Init。CPU Init初始化CPU的内部寄存器。Board Init初始化智能I/O的寄存器,将device打通。System Init为系统的运行准备数据结构,进行数据初始化。 BSP 系统上电代码执行流程 执行流程 中断 中断是实时系统非常重要的组成部分,与linux及windows相比, VxWorks对于中断的相应速度和中断处理程序的处理速度要高很多,实时性最好 对于中断处理程序,可能引起阻塞的都不能使用,printf可能引起阻塞,如果在中断处理程序里面需要输出调试信息,可以使用logMsg来输出。中断里面也不要试图获

4、得信号量,接收消息队列里面的消息等操作。 中断 中断包含三层含义 中断引脚号(或从中断控制器中得到) 中断号 中断向量(对x86是中断号*4)中断处理程序和中断向量必须连接再允许后才能被激活 中断 对于中断服务程序,越简短越好,为提高VxWorks的中断服务程序与任务的合作性能,最好的机制是信号量。下面例子中我们会看到标准的中断处理过程。 中断 典型的中断处理过程示例: 1。中断连接: intConnect ( IV_IRQ6, (FUNCPTR) Isr1, 0); 参量1:连接的中断向量 参量2:中断服务程序 参量3:中断服务程序的参量 中断 中断允许: 2。intEnable( (int

5、)IV_IRQ6 ); 参量:中断向量 3。中断处理程序 中断 Isr1() 关中断; 清中断; semGive(SemId1);/*释放信号量*/ 中断 4。中断处理任务 task1() for(;) semTake (SemId1, WAIT_FOREVER) 开中断; 任务间调度 VxWorks无条件的使用基于优先级的任务间调度 对于同等优先级的任务,如果基于时间片轮循没有打开,任务采取先到先运行,运行完毕再交出cpu,如果打开,则轮流使用cpu。 任务里如果有死循环,比它优先级低的任务都不能运行 任务切换 任务切换速度:us量级,Cache关闭时上升到10us量级。 任务的创建 VxW

6、orks创建任务,如下例所示创建名为task1的任务: taskSpawn(“tTask1”,55,0,10000,(FUNCPTR) task1,0,0,0,0,0,0,0,0,0,0); 参量1:任务名 参量2: 任务优先级 任务的创建 参量3:创建时可选参量 参量4:任务堆栈尺寸 参量5:创建的任务 参量615:任务的参量 定时器 VxWorks使用3种定时器 time0:用于系统时钟,可用sysClkRateSet()改变速率,默认值时60次/秒,一般我们改为100次/秒,系统时钟变为10ms等级。 VxWorks下的watchdog基于timer0,因为是在interrupt尺度,使

7、用必须谨慎,否则会降低系统效率 定时器 time1:用于辅助时钟,可用sysAuxClkRateSet()改变速度,其精度可以很高,例如1ms,除驱动外,一般不使用。 time2:用于时标(timestamp)。从系统开始运行时就一直递增,可以用来获得系统运行时间,在windview工具中被使用。用户程序也可以通过sysTimestamp()得到运行时间。一般不使用。 Watchdog定时器 使用举例申明:WDOG_ID WdId1; 初始化创建:WdId1 = wdCreate(); 初始化启动:wdStart(WdId1 , 1, (FUNCPTR)function1, 0) 参数1:定时

8、器ID参数2:延时tick数 Watchdog定时器参数3:定时器到要调用的函数参数4:要调用函数的参数定时要调用的函数function1 wdStart(WdId1 , 1, (FUNCPTR)function1, 0) Watchdog定时器 定时器里面运行的代码与中断有同等的优先级,对于中断所有的约束定时器同样要遵守,会引起阻塞的都不能使用。比如不能使用printf打印,不能接收消息里面的消息,不能试图获得一个信号量等。 任务间通讯 信号量 消息队列 管道 全局变量 socket 信号量 信号量提供了任务间最快速通信,可以实现任务间同步和互斥。 互斥用于资源管理,上锁对共享资源的访问。

9、同步可以协调任务间的执行。 信号量 信号量的三种类型 二进制 互斥 计数信号量 信号量 互斥信号量本质也是一种二进制信号量,主要用于解决内在互斥的问题,优先级继承等情况而优化的特殊的二进制信号量 计数信号量会随着信号量释放的次数改变而改变 二进制信号量最基本,最常用 二进制信号量 最常用最快的信号量,用于同步和互斥 创建信号量的时候,队列类型已经确定。 等待信号量的任务可以按照优先级(SEM_Q_PRIORITY) 或先进先出( SEM_Q_FIFO)的顺序排队。 二进制信号量 二进制同步信号量使用举例: 申明:SEM_ID SemId1; 初始化: SemId1=semBCreate(SEM

10、_Q_FIFO,SEM_EMPTY); 二进制信号量 任务一释放信号量SemId1Task1() semGive(SemId1); 任务二获得信号量后继续执行,否则等 待此信号量 二进制信号量task2()For(;) semTake (SemId1, WAIT_FOREVER) ; 二进制信号量 二进制互斥信号量使用举例: 申明:SEM_ID SemId1; 初始化: SemId1= semBCreate(SEM_Q_PRIORITY ,SEM_FULL); 二进制信号量 使用function1()semTake(SemId1,WAIT_FOREVER); /*需要保护的代码*/semGiv

11、e(SemId1); 消息队列 任务间通讯使用的最常用的方式 允许长度可变,数目可变的消息排队 用在单CPU任务间通讯 任何任务可以发送消息到消息队列 任何任务可以从消息队列接收消息 两个任务若需要全双工通信,需要两个队列,一发一收 消息队列使用举例 申明:MSG_Q_ID MsgQ1; 创建: MsgQ1 = msgQCreate(500,300,MSG_Q_FIFO); 参数1:排队的最大消息数量 参数2:每个消息允许的最大长度 参数3:操作方式,fifo或优先级 消息队列 发送msgQSend(MsgQ1, pmsgbuf, length, NO_WAIT, MSG_PRI_NORMAL

12、);参数1:队列ID参数2:要发送的消息指针参数3:要发送的消息长度参数4:等待的tick数目 消息队列 参数5:操作方式,MSG_PRI_NORMAL 或 MSG_PRI_URGENT 消息队列 接收Task1()for(;) msgQReceive(MsgQ1, m_buffer, 500, WAIT_FOREVER); 消息队列 参量1:队列ID 参量2:接收消息的buffer 参量3:buffer的最大长度 参量4:等待的tick数目,NO_WAIT不进不进 行等待,行等待,WAIT_FOREVER永远永远 等待等待 socket 网络是VxWorks和其它系统联系的主要途径。 VxWorks实现了与BSD4.4 TCP/IP兼容的网络协议栈。 通常使用socket编程接口,客户/服务器编程来实现VxWorks与其他系统,如linux,windows 等其它系统之间的通信 socket SOCKET编程举例 例子较长,具体可以参见VxWorks Network Programmers Guide5.5 7.2 BSD SOCKET 7.2.2 Datagram Sockets (UDP) 7.2.3 Stream Sockets (TCP) Tornado工具使用 Tornado整个开发系统包含三部分组成 VxWorks:运行在目标板上的高性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论