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
VxWorks软硬件设计及实例分析
tof@felab
2005.3.27
主要内容 VxWorks 特点 Tornado 界面 硬件实例 软件流程 用户程序框架 更多技术细节
一、 VxWorks的特点
支持多任务 实时性强 体积小,可裁剪 支持多种 CPU 支持网络通讯、串口通讯 汇编 + 标准 C 的编程模式 内核和定制任务可以分开编译、动态下载,支持
用户自定义启动任务
VxWorks多任务 为什么多任务
– 每个明显单独运行的程序称为一个任务
任务包含什么 任务名和任务 ID 任务优先级( 0~255 ) 任务状态
任务操作 taskSpawn() 发起任务 taskDelete() 删除任务 taskDeleteForce()删除设置了安全保护的任务 taskSafe() 设置任务的安全保护 taskUnsafe() 取消任务的安全保护 taskSuspend() 挂起一个任务 taskResume() 使任务退出挂起状态 taskPrioritySet() 设定任务的优先级 taskPriorityGet() 获得任务的优先级 taskLock() 锁定任务调度 taskUnLock() 重新允许任务调度 taskIdSelf() 获得任务本身的 ID taskIdVerify() 判断 ID 对应的任务是否仍然存在 taskDelay() 延迟 taskTcb 获得任务的控制块 TCB
任务间通讯 共享内存(全局变量、数组、结构体) 管道 (pipe) 信号灯 (semaphore) 消息队列 (message queue)
二、 Tornado--集成编译环境
GDB--调试界面
WindView--多任务观察界面
程序编辑 --Source Insight
参考文档 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
三、硬件实例
硬件框架
网 口
FPGA
CPU小系统
CPU
ROM
RAM
FLASH
外围器件
单板软件
*.o
vxWorks
bootrom
TCP/IP通道
人机界面
PCI总线
PCI接口芯片 5933
串 口
超级终端
四、软件流程 软件 说明 软件 说明
bootrom 由 WindRiver 公司提供 BSP
编译,需要针对硬件修改,烧制到单板 ROM
BIOS 由主板生产方提供,固化到主板 ROM
vxWorks 由 WindRiver 公司提供 BSP
编译,需要针对硬件修改,通过串口或网络下载
windows 由微软提供,安装到硬盘
开发过程中
用户程序 用户编写,使用 Tornado集成环境调试,通过串口或网络动态下载
用户开发的应用软件
使用 VC 等工具编写调试,从硬盘执行
bootrom 固化到单板 ROM BIOS 固化到主板 ROM 开发完毕后
vxWorks
(+自启动用户程序)
烧入单板 FLASH Windows
(+自启动软件)
安装到硬盘
文件分布 Tornado
– docs– host– target
文件分布 BSP
– all– bspname
文件分布 用户程序
– .c .h– makefile– [XXXgnu]
硬件控制 板载灯
– 配合 EPLD 或者 FPGA 进行初期调试 串口(后期调试)
– Bootrom 启动后期 网口( TCP/IP, UDP)
– Bootrom 启动后期 PCI 器件
– bootrom和 VxWorks 中都用关于 PCI 通用寄存器( 256byte )配置的部分
– 用户程序负责用户寄存器的填写
五、用户程序框架
时
间
轴
bootrom
(从 Flash读取映像文件)
VxWorks
(发起多个系统任务)
用户程序入口
(发起多个用户任务)
单任务
系统
多任务
系统
系统任务
(tExcTask/ tLogTask
/ tWdbTask/ tNetTask)
网络模块
绑定中断服务程序,发起相应任务
轮询硬件模块
中断处理 初始化部分
– 挂接终端( intConnect()) 中断服务程序
– 关中断 (intDisable())– 通知硬件中断已经被相应
中断服务任务– 处理中断– 开中断 (intEnable())
硬件轮询( while(1)+taskDelay()) 软件延迟void dailyFunc(int param1,int param2…){
while(1){
taskDelay(TIME_TO_GO);/* 需要定时执行的内容 */
}}
void initDailyFunc(){
taskSpawn(…,(FUNCPTR)dailyFunc,…param1,param2…);
}
硬件轮询( 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);
}
基于缓冲队列的双工通讯模式
信息
发送
缓冲
队列
控
制
端
受
控
端
信息
接收
缓冲
队列
PC或工作站
socket API
socket API
信息接收任务
信息解释任务
信息执行 1
信息执行 m
信息执行 n
信息发送任务
硬件中断
中断服务程序
中断服务任务
硬件轮询
任务
网络运行(一) 通讯协议
byte0 byte1 byte2 byte3 byte4 byte5 byte6 byte7 byte8 ~4095
命令
净数
据长
度最
高 8
位
命令
净数
据长
度次
高 8
位
命令
净数
据长
度次
低 8
位
命令
净数
据长
度最
低 8
位
命令
号高
8位
命令
号低
8位
命令
紧急
标志
暂时
不用
纯数据(长度小于 或 等 于4088byte)
纯数据(长度等于 4096byte)
纯数据(长度小于或等于 4096byte)
首帧
中间帧
尾帧
网络运行(二) 网络监控
– socket 函数返回错误– ping()
网络初始化
命令接收 命令处理 命令发送
网络监测
各任务发起
各任务删除
网络出错通知
六、更多技术细节… 网络通讯的缓冲队列实现 多任务控制 善用宏定义 自启动 VxWorks 制作 嵌入式软件的控制端调用 VxWorks 编程规范