为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

vxworks入门介绍

2020-04-04 45页 ppt 109KB 4阅读

用户头像 个人认证

一线信息技术教师,具有丰富教学经验和管理经验,多次被评为地级优秀教师

举报
vxworks入门介绍VxWorks入门介绍2010/10/1目录 VxWorks简介 BSP及系统执行流程 中断 任务调度 任务切换 任务创建 定时器目录 任务间通讯信号量二进制信号量消息队列socket 集成开发环境Tornado的使用VxWorks简介 VxWorks组成VxWorks操作系统由任务的管理与调度、任务的同步与通信、动态内存的管理、时钟的管理、I/O管理、文件系统等几部分组成VxWorks简介 对于VxWorks,用户可裁减掉程序员认为没有使用到的功能,直到只剩下最简内核(可以只有10k左右) 一般使用的VxWorks为标准的单...
vxworks入门介绍
VxWorks入门介绍2010/10/1目录 VxWorks简介 BSP及系统执行流程 中断 任务调度 任务切换 任务创建 定时器目录 任务间通讯信号量二进制信号量消息队列socket 集成开发环境Tornado的使用VxWorks简介 VxWorks组成VxWorks操作系统由任务的管理与调度、任务的同步与通信、动态内存的管理、时钟的管理、I/O管理、文件系统等几部分组成VxWorks简介 对于VxWorks,用户可裁减掉程序员认为没有使用到的功能,直到只剩下最简内核(可以只有10k左右) 一般使用的VxWorks为的单CPU版本。VxFusion为标准的多CPU版本,应用程序在多个CPU上运行,但仍然象在一个CPU上运行那样进行数据的交换、通信与同步。VxWorks简介 VxWorks使用统一的API,对于VxWorks支持的不同的CPU、VxWorks的不同版本,API都是一样的。VxWorks的API是由操作系统内核提供的服务原语搭建起来的。服务原语,是不可打断的,这样可以保证系统调用的时间尽量小、尽量是常量和可确定BSP BSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。所谓初始化是指从系统上电复位开始直到windkernel和usrRoot根任务启动的这段时间,系统的执行过程。驱动程序就是一些包含I/O操作的子函数。 初始化包括:CPUInit、BoardInit、SystemInit。CPUInit初始化CPU的内部寄存器。BoardInit初始化智能I/O的寄存器,将device打通。SystemInit为系统的运行准备数据结构,进行数据初始化。BSP 系统上电代码执行流程执行流程中断 中断是实时系统非常重要的组成部分,与linux及windows相比,VxWorks对于中断的相应速度和中断处理程序的处理速度要高很多,实时性最好 对于中断处理程序,可能引起阻塞的都不能使用,printf可能引起阻塞,如果在中断处理程序里面需要输出调试信息,可以使用logMsg来输出。中断里面也不要试图获得信号量,接收消息队列里面的消息等操作。中断 中断包含三层含义中断引脚号(或从中断控制器中得到)中断号中断向量(对x86是中断号*4)中断处理程序和中断向量必须连接再允许后才能被激活中断 对于中断服务程序,越简短越好,为提高VxWorks的中断服务程序与任务的合作性能,最好的机制是信号量。下面例子中我们会看到标准的中断处理过程。中断 典型的中断处理过程示例:1。中断连接:intConnect(IV_IRQ6,(FUNCPTR)Isr1,0);参量1:连接的中断向量参量2:中断服务程序参量3:中断服务程序的参量中断中断允许:2。intEnable((int)IV_IRQ6);参量:中断向量3。中断处理程序中断 Isr1() {关中断;清中断;semGive(SemId1);/*释放信号量*/ }中断4。中断处理任务task1(){for(;;)semTake(SemId1,WAIT_FOREVER)…开中断;}任务间调度 VxWorks无条件的使用基于优先级的任务间调度 对于同等优先级的任务,如果基于时间片轮循没有打开,任务采取先到先运行,运行完毕再交出cpu,如果打开,则轮流使用cpu。 任务里如果有死循环,比它优先级低的任务都不能运行任务切换 任务切换速度:us量级,Cache关闭时上升到10us量级。任务的创建 VxWorks创建任务,如下例所示创建名为task1的任务:taskSpawn(“tTask1”,55,0,10000,(FUNCPTR)task1,0,0,0,0,0,0,0,0,0,0);参量1:任务名参量2:任务优先级任务的创建参量3:创建时可选参量参量4:任务堆栈尺寸参量5:创建的任务参量6-15:任务的参量定时器 VxWorks使用3种定时器time0:用于系统时钟,可用sysClkRateSet()改变速率,默认值时60次/秒,一般我们改为100次/秒,系统时钟变为10ms等级。VxWorks下的watchdog基于timer0,因为是在interrupt尺度,使用必须谨慎,否则会降低系统效率定时器 time1:用于辅助时钟,可用sysAuxClkRateSet()改变速度,其精度可以很高,例如1ms,除驱动外,一般不使用。 time2:用于时标(timestamp)。从系统开始运行时就一直递增,可以用来获得系统运行时间,在windview工具中被使用。用户程序也可以通过sysTimestamp()得到运行时间。一般不使用。Watchdog定时器 使用举例 申明:WDOG_IDWdId1; 初始化创建:WdId1=wdCreate();初始化启动:wdStart(WdId1,1,(FUNCPTR)function1,0)参数1:定时器ID 参数2:延时tick数Watchdog定时器 参数3:定时器到要调用的函数 参数4:要调用函数的参数 定时要调用的函数 function1 { … wdStart(WdId1,1,(FUNCPTR)function1,0) }Watchdog定时器 定时器里面运行的代码与中断有同等的优先级,对于中断所有的约束定时器同样要遵守,会引起阻塞的都不能使用。比如不能使用printf打印,不能接收消息里面的消息,不能试图获得一个信号量等。任务间通讯 信号量 消息队列 管道 全局变量 socket 信号量 信号量提供了任务间最快速通信,可以实现任务间同步和互斥。 互斥用于资源管理,上锁对共享资源的访问。 同步可以协调任务间的执行。信号量 信号量的三种类型二进制互斥计数信号量信号量 互斥信号量本质也是一种二进制信号量,主要用于解决内在互斥的问题,优先级继承等情况而优化的特殊的二进制信号量 计数信号量会随着信号量释放的次数改变而改变 二进制信号量最基本,最常用二进制信号量 最常用最快的信号量,用于同步和互斥 创建信号量的时候,队列类型已经确定。等待信号量的任务可以按照优先级(SEM_Q_PRIORITY)或先进先出(SEM_Q_FIFO)的顺序排队。二进制信号量 二进制同步信号量使用举例:申明:SEM_IDSemId1;初始化:SemId1=semBCreate(SEM_Q_FIFO,SEM_EMPTY);二进制信号量 任务一释放信号量SemId1Task1(){…semGive(SemId1);} 任务二获得信号量后继续执行,否则等待此信号量二进制信号量task2(){For(;;)semTake(SemId1,WAIT_FOREVER);…}二进制信号量 二进制互斥信号量使用举例:申明:SEM_IDSemId1;初始化:SemId1=semBCreate(SEM_Q_PRIORITY,SEM_FULL);二进制信号量 使用function1(){semTake(SemId1,WAIT_FOREVER);…/*需要保护的代码*/semGive(SemId1);}消息队列 任务间通讯使用的最常用的方式 允许长度可变,数目可变的消息排队 用在单CPU任务间通讯 任何任务可以发送消息到消息队列 任何任务可以从消息队列接收消息 两个任务若需要全双工通信,需要两个队列,一发一收消息队列使用举例 申明:MSG_Q_IDMsgQ1; 创建:MsgQ1=msgQCreate(500,300,MSG_Q_FIFO);参数1:排队的最大消息数量参数2:每个消息允许的最大长度参数3:操作方式,fifo或优先级消息队列 发送msgQSend(MsgQ1,pmsgbuf,length,NO_WAIT,MSG_PRI_NORMAL);参数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.4TCP/IP兼容的网络栈。 通常使用socket编程接口,客户/服务器编程来实现VxWorks与其他系统,如linux,windows等其它系统之间的通信socket SOCKET编程举例例子较长,具体可以参见《VxWorksNetworkProgrammer‘sGuide5.5》7.2BSDSOCKET7.2.2DatagramSockets(UDP)7.2.3StreamSockets(TCP)Tornado工具使用 Tornado整个开发系统包含三部分组成VxWorks:运行在目标板上的高性能的实时操作系统tornado开发环境:运行在宿主机上,进行编译连接和调试的开发环境连接前两者的通信方式:如串口网口等Tornado工具使用 Tornado开发环境是交叉开发环境运行在主机上的部分,是调试和开发VxWorks系统不可缺少的一部分,集成了编辑器,编译器,调试器与一体。编辑器功能较弱,一般不使用。Tornado工具使用 Tornado工具使用演示的创建编译连接调试其它
/
本文档为【vxworks入门介绍】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索