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
三、硬件实例
硬件框架
四、软件流程
文件分布 Tornado docs host target
文件分布 BSP all bspname
文件分布 用户程序 .c .h makefile [XXXgnu]
硬件控制 板载灯 串口(后期调试) 网口(TCP/IP, UDP) PCI器件 配合EPLD或者FPGA进行初期调试 Bootrom启动后期 bootrom和VxWorks中都用关于PCI通用寄存器(256byte)配置的部分 用户程序负责用户寄存器的填写
五、用户程序框架
中断处理 初始化部分 中断服务程序 中断服务任务 挂接终端(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);
基于缓冲队列的双工通讯模式
网络运行(一) 通讯协议
网络运行(二) 网络监控 socket函数返回错误 ping()
六、更多技术细节… 网络通讯的缓冲队列实现 多任务控制 善用宏定义 自启动VxWorks制作 嵌入式软件的控制端调用 VxWorks编程规范