《vxworks入门介绍.ppt》由会员分享,可在线阅读,更多相关《vxworks入门介绍.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 目录 VxWorks简介 BSP及系统执行流程 中断 任务调度 任务切换 任务创建 定时器 目录 任务间通讯 信号量 二进制信号量 消息队列 socket 集成开发环境Tornado的使用 VxWorks简介 VxWorks组成 VxWorks操作系统由任务的管理与调度、任务的同步与通信、动态内存的管理、时钟的管理、I/O管理、文件系统等几部分组成 VxWorks简介 对于VxWorks ,用户可裁减掉程序员认为没有使用到的功能,直到只剩下最简内核(可以只有10k左右) 一般使用的VxWorks为标准的单CPU版本。VxFusion为标准的多CPU版本,应用程序在多个CPU上运行,但仍然象在
2、一个CPU 上运行那样进行数据的交换、通信与同步。 VxWorks简介 VxWorks使用统一的API,对于VxWorks支持的不同的CPU、VxWorks的不同版本,API都是一样的。VxWorks的API是由操作系统内核提供的服务原语搭建起来的。服务原语,是不可打断的,这样可以保证系统调用的时间尽量小、尽量是常量和可确定 BSP BSP是系统用来管理外设的部分,由两部分组成:初始化、驱动程序。所谓初始化是指从系统上电复位开始直到wind kernel和usrRoot根任务启动的这段时间,系统的执行过程。驱动程序就是一些包含I/O操作的子函数。 初始化包括:CPU Init、Board In
3、it、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)IV_IRQ6 ); 参量:中断向量 3。
5、中断处理程序 中断 Isr1() 关中断; 清中断; semGive(SemId1);/*释放信号量*/ 中断 4。中断处理任务 task1() for(;) semTake (SemId1, WAIT_FOREVER) 开中断; 任务间调度 VxWorks无条件的使用基于优先级的任务间调度 对于同等优先级的任务,如果基于时间片轮循没有打开,任务采取先到先运行,运行完毕再交出cpu,如果打开,则轮流使用cpu。 任务里如果有死循环,比它优先级低的任务都不能运行 任务切换 任务切换速度:us量级,Cache关闭时上升到10us量级。 任务的创建 VxWorks创建任务,如下例所示创建名为task
6、1的任务: 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尺度,使用必须谨慎,否则会降低系统效率 定时器 ti
7、me1:用于辅助时钟,可用sysAuxClkRateSet()改变速度,其精度可以很高,例如1ms,除驱动外,一般不使用。 time2:用于时标(timestamp)。从系统开始运行时就一直递增,可以用来获得系统运行时间,在windview工具中被使用。用户程序也可以通过sysTimestamp()得到运行时间。一般不使用。 Watchdog定时器 使用举例申明:WDOG_ID WdId1; 初始化创建:WdId1 = wdCreate(); 初始化启动:wdStart(WdId1 , 1, (FUNCPTR)function1, 0) 参数1:定时器ID参数2:延时tick数 Watchdo
8、g定时器参数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_Q_FIFO,SEM_EMPTY); 二进
10、制信号量 任务一释放信号量SemId1Task1() semGive(SemId1); 任务二获得信号量后继续执行,否则等 待此信号量 二进制信号量task2()For(;) semTake (SemId1, WAIT_FOREVER) ; 二进制信号量 二进制互斥信号量使用举例: 申明:SEM_ID SemId1; 初始化: SemId1= semBCreate(SEM_Q_PRIORITY ,SEM_FULL); 二进制信号量 使用function1()semTake(SemId1,WAIT_FOREVER); /*需要保护的代码*/semGive(SemId1); 消息队列 任务间通讯使
11、用的最常用的方式 允许长度可变,数目可变的消息排队 用在单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);参数1:队列ID参数2:要发送的消息指针
12、参数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兼
13、容的网络协议栈。 通常使用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:运行在目标板上的高性能的 实时操作系统 tornado开发环境:运行在宿主机上,进 行编译连接和调试的开发环 境 连接前两者的通信方式:如串口网口等 Tornado工具使用 Tornado开发环境是交叉开发环境运行在主机上的部分,是调试和开发VxWorks系统不可缺少的一部分,集成了编辑器,编译器,调试器与一体。编辑器功能较弱,一般不使用。 Tornado工具使用 Tornado工具使用演示 工程的创建 编译连接 调试 其它
限制150内