27
VxWorks 软软软软软软软软软软 tof@felab 2005.3.27

VxWorks 软硬件设计及实例分析

  • Upload
    bonner

  • View
    241

  • Download
    3

Embed Size (px)

DESCRIPTION

VxWorks 软硬件设计及实例分析. tof@felab 2005.3.27. 主要内容. VxWorks 特点 Tornado 界面 硬件实例 软件流程 用户程序框架 更多技术细节. 一、 VxWorks 的特点. 支持多任务 实时性强 体积小,可裁剪 支持多种 CPU 支持网络通讯、串口通讯 汇编 + 标准 C 的编程模式 内核和定制任务可以分开编译、动态下载,支持用户自定义启动任务. VxWorks 多任务. 为什么多任务 每个明显单独运行的程序称为一个任务. 任务包含什么. 任务名和任务 ID 任务优先级(0~255) - PowerPoint PPT Presentation

Citation preview

Page 1: VxWorks 软硬件设计及实例分析

VxWorks软硬件设计及实例分析

tof@felab

2005.3.27

Page 2: VxWorks 软硬件设计及实例分析

主要内容 VxWorks 特点 Tornado 界面 硬件实例 软件流程 用户程序框架 更多技术细节

Page 3: VxWorks 软硬件设计及实例分析

一、 VxWorks的特点

支持多任务 实时性强 体积小,可裁剪 支持多种 CPU 支持网络通讯、串口通讯 汇编 + 标准 C 的编程模式 内核和定制任务可以分开编译、动态下载,支持

用户自定义启动任务

Page 4: VxWorks 软硬件设计及实例分析

VxWorks多任务 为什么多任务

– 每个明显单独运行的程序称为一个任务

Page 5: VxWorks 软硬件设计及实例分析

任务包含什么 任务名和任务 ID 任务优先级( 0~255 ) 任务状态

Page 6: VxWorks 软硬件设计及实例分析

任务操作 taskSpawn() 发起任务 taskDelete() 删除任务 taskDeleteForce()删除设置了安全保护的任务 taskSafe() 设置任务的安全保护 taskUnsafe() 取消任务的安全保护 taskSuspend() 挂起一个任务 taskResume() 使任务退出挂起状态 taskPrioritySet() 设定任务的优先级 taskPriorityGet() 获得任务的优先级 taskLock() 锁定任务调度 taskUnLock() 重新允许任务调度 taskIdSelf() 获得任务本身的 ID taskIdVerify() 判断 ID 对应的任务是否仍然存在 taskDelay() 延迟 taskTcb 获得任务的控制块 TCB

Page 7: VxWorks 软硬件设计及实例分析

任务间通讯 共享内存(全局变量、数组、结构体) 管道 (pipe) 信号灯 (semaphore) 消息队列 (message queue)

Page 8: VxWorks 软硬件设计及实例分析

二、 Tornado--集成编译环境

Page 9: VxWorks 软硬件设计及实例分析

GDB--调试界面

Page 10: VxWorks 软硬件设计及实例分析

WindView--多任务观察界面

Page 11: VxWorks 软硬件设计及实例分析

程序编辑 --Source Insight

Page 12: VxWorks 软硬件设计及实例分析

参考文档 Tornado 安装目录 \docs\books.html 《嵌入式实时操作系统 VxWorks 及其开发环境

Tornado》,中国电力出版社 VxWorks 开发人员指南丛书 ,清华出版社 http://www.windriver.com/ http://bbs.edw.com.cn/list.asp?boardid=3 ,电子

产品世界——嵌入式设计论坛 BSP training, Device driver, Tornado training

Workshops BSP Developer’s Kit for VxWorks, user’s Guide

Page 13: VxWorks 软硬件设计及实例分析

三、硬件实例

Page 14: VxWorks 软硬件设计及实例分析

硬件框架

网 口

FPGA

CPU小系统

CPU

ROM

RAM

FLASH

外围器件

单板软件

*.o

vxWorks

bootrom

TCP/IP通道

人机界面

PCI总线

PCI接口芯片 5933

串 口

超级终端

Page 15: VxWorks 软硬件设计及实例分析

四、软件流程 软件 说明 软件 说明

bootrom 由 WindRiver 公司提供 BSP

编译,需要针对硬件修改,烧制到单板 ROM

BIOS 由主板生产方提供,固化到主板 ROM

vxWorks 由 WindRiver 公司提供 BSP

编译,需要针对硬件修改,通过串口或网络下载

windows 由微软提供,安装到硬盘

开发过程中

用户程序 用户编写,使用 Tornado集成环境调试,通过串口或网络动态下载

用户开发的应用软件

使用 VC 等工具编写调试,从硬盘执行

bootrom 固化到单板 ROM BIOS 固化到主板 ROM 开发完毕后

vxWorks

(+自启动用户程序)

烧入单板 FLASH Windows

(+自启动软件)

安装到硬盘

Page 16: VxWorks 软硬件设计及实例分析

文件分布 Tornado

– docs– host– target

Page 17: VxWorks 软硬件设计及实例分析

文件分布 BSP

– all– bspname

Page 18: VxWorks 软硬件设计及实例分析

文件分布 用户程序

– .c .h– makefile– [XXXgnu]

Page 19: VxWorks 软硬件设计及实例分析

硬件控制 板载灯

– 配合 EPLD 或者 FPGA 进行初期调试 串口(后期调试)

– Bootrom 启动后期 网口( TCP/IP, UDP)

– Bootrom 启动后期 PCI 器件

– bootrom和 VxWorks 中都用关于 PCI 通用寄存器( 256byte )配置的部分

– 用户程序负责用户寄存器的填写

Page 20: VxWorks 软硬件设计及实例分析

五、用户程序框架

bootrom

(从 Flash读取映像文件)

VxWorks

(发起多个系统任务)

用户程序入口

(发起多个用户任务)

单任务

系统

多任务

系统

系统任务

(tExcTask/ tLogTask

/ tWdbTask/ tNetTask)

网络模块

绑定中断服务程序,发起相应任务

轮询硬件模块

Page 21: VxWorks 软硬件设计及实例分析

中断处理 初始化部分

– 挂接终端( intConnect()) 中断服务程序

– 关中断 (intDisable())– 通知硬件中断已经被相应

中断服务任务– 处理中断– 开中断 (intEnable())

Page 22: VxWorks 软硬件设计及实例分析

硬件轮询( while(1)+taskDelay()) 软件延迟void dailyFunc(int param1,int param2…){

while(1){

taskDelay(TIME_TO_GO);/* 需要定时执行的内容 */

}}

void initDailyFunc(){

taskSpawn(…,(FUNCPTR)dailyFunc,…param1,param2…);

}

Page 23: VxWorks 软硬件设计及实例分析

硬件轮询( watchdog) 硬件延迟void dailyFunc(int param)

{

wdStart(wdDailyFunc,TIME_TO_GO,(FUNCPTR)dailyFunc,param);

/* 需要定时执行的内容 */}void initDailyFunc()

{

wdDailyFunc = wdCreate();

wdStart(wdDailyFunc, TIME_TO_GO,(FUNCPTR)dailyFunc,param);

}

Page 24: VxWorks 软硬件设计及实例分析

基于缓冲队列的双工通讯模式

信息

发送

缓冲

队列

信息

接收

缓冲

队列

PC或工作站

socket API

socket API

信息接收任务

信息解释任务

信息执行 1

信息执行 m

信息执行 n

信息发送任务

硬件中断

中断服务程序

中断服务任务

硬件轮询

任务

Page 25: VxWorks 软硬件设计及实例分析

网络运行(一) 通讯协议

byte0 byte1 byte2 byte3 byte4 byte5 byte6 byte7 byte8 ~4095

命令

净数

据长

度最

高 8

命令

净数

据长

度次

高 8

命令

净数

据长

度次

低 8

命令

净数

据长

度最

低 8

命令

号高

8位

命令

号低

8位

命令

紧急

标志

暂时

不用

纯数据(长度小于 或 等 于4088byte)

纯数据(长度等于 4096byte)

纯数据(长度小于或等于 4096byte)

首帧

中间帧

尾帧

Page 26: VxWorks 软硬件设计及实例分析

网络运行(二) 网络监控

– socket 函数返回错误– ping()

网络初始化

命令接收 命令处理 命令发送

网络监测

各任务发起

各任务删除

网络出错通知

Page 27: VxWorks 软硬件设计及实例分析

六、更多技术细节… 网络通讯的缓冲队列实现 多任务控制 善用宏定义 自启动 VxWorks 制作 嵌入式软件的控制端调用 VxWorks 编程规范