VxWorks 编程的几个误区
基于VxWorks的串行通信编程方法

第03卷 3月 1 23 0 7年 第 期
J un f 边 ba ies y(学版 ) S i c) o rM o延 a 大学学报 ( i Naua c ne n inUn r t Y v 自然科 trl e
V 13 o 1 o.3N .
数 串行 通 信 是 基 于 W i o 平 台或 Ln x平 台 , 法 满 足 对 实 时 性 要 求 较 高 的 系 统 . 此 , n ws d iu 无 为 在嵌 入 式 系 统 中常采 用 基 于 实 时操 作 系统 的 串行 通 信 方法 . 集成 开发 环 境 下设 计 与实 现 基 于 V wok 实 时 操 作 系 统 的 串行 通 信 编 程 方法 . x rs , 本 文在 分 析 Vx rs 作 系统 的特 点 基 础 上 , wok 操 以实 际项 目为 例 , 出 了如 何 在 T rao 提 ond
一
个 串行 通 信 通道 或 一 个 任 务 间管 道 ; 可 以是 随 机 存 储 设 备 上 的 一 个 逻 辑 文 件 . 也 由于 将
IO系统设计成为与设备类 型无关 的统一接 口, / 因此对于 串行 口的操作仍 然可 以视为对一
个 文件 的操 作 , 不必 关 心 设 备 驱 动 程序 实 现 的细 节 . 而
M a .2 0 r 07
文章编 号 :10 —3 3 2 0 ) 10 5 —4 0 44 5 (0 7 0 —0 20
基 于 V Wo k 的 串行通 信 编 程方 法 x rs
王 业罡 , 张健 民 , 李 允 俊
(延 边 大 学 工 学 院 计算 机科 学 与技 术 系 , 吉林 延 吉 13 作 系统 , Wok 实 以基 于 Vx rs 统 的 I P 2 Wok 系 X 4 5平 台与 P C机 串 口通信 为例 , 出了在 T rao集成 开发环境 下设计 与 实现基 于 Vx rs 串行通 信编 程方法 . 提 on d Wok 的
Vxworks开发简明培训教程服务器应用

Vxworks开发简明培训教程服务器应用一、教学内容本教程服务器应用部分,主要针对VxWorks操作系统的服务器应用进行讲解。
教材涵盖的章节有:第三章网络编程,第四章服务器编程,第五章Web服务器开发。
具体内容如下:1. 第三章网络编程:介绍VxWorks操作系统中的网络编程基础,包括套接字编程、TCP/IP协议栈的使用等。
2. 第四章服务器编程:讲解如何在VxWorks中实现网络服务器,包括基于TCP和UDP的服务器编程。
3. 第五章Web服务器开发:介绍Web服务器的基本原理,以及在VxWorks中如何开发Web服务器。
二、教学目标1. 使学生掌握VxWorks操作系统的基本网络编程方法。
2. 培养学生具备在VxWorks中实现网络服务器的能力。
3. 让学生了解Web服务器的工作原理,并能在VxWorks中进行开发。
三、教学难点与重点1. 教学难点:VxWorks网络编程中的socket API,Web服务器开发中的HTTP协议处理。
2. 教学重点:服务器编程的基本方法,Web服务器的核心模块实现。
四、教具与学具准备1. 教具:多媒体教学设备,VxWorks操作系统安装光盘。
2. 学具:学生个人电脑,VxWorks操作系统安装文件,网络编程实践案例。
五、教学过程1. 引入实践情景:以企业实际需求为背景,讲解网络编程在服务器应用中的重要性。
2. 讲解第三章网络编程:通过示例代码,讲解VxWorks中的套接字编程方法。
3. 讲解第四章服务器编程:以TCP服务器为例,讲解服务器程序的实现过程。
4. 讲解第五章Web服务器开发:介绍Web服务器的工作原理,以及在VxWorks中实现Web服务器的方法。
5. 随堂练习:让学生根据所学内容,编写一个简单的网络服务器程序。
6. 例题讲解:分析并讲解典型的网络编程问题,如Socket编程中的粘包问题。
7. 课后作业:布置作业题目,要求学生完成一个基于VxWorks的Web服务器程序。
OBT-BSP-VxWorks5.4 应用开发手册说明书

OBT-BSP-VxWorks5.4应用开发手册V 2.0珠海欧比特控制工程股份有限公司2010年10月17日欧比特严禁复制目 录1引言.......................................................................................................................................................1 1.1编写目的.......................................................................................................................................1 1.2定义...............................................................................................................................................1 2 用途......................................................................................................................................................1 3 软件安装..............................................................................................................................................2 4 创建ROM映像........................................................................................................................................3 4.1 新建工程......................................................................................................................................3 4.2 选择BSP ........................................................................................................................................5 4.3 修改V X W ORKS 的宏..........................................................................................................................5 4.4 设置波特率. (6)4.5 添加应用程序..............................................................................................................................7 4.6 设置应用程序入口......................................................................................................................8 4.7 选择映像类型 (9)4.8 创建映像文件............................................................................................................................10 5 映像烧写及运行................................................................................................................................115.1 烧写最终映像方法.....................................................................................................................11 5.2 启动VXWORKS.........................................................................................................................14 6 移植注意事项....................................................................................................................................146.1 不同系统时钟频率的修改........................................................................................................14 6.2 不同SRAM数据线宽度的修改....................................................................................................15 6.3 不同SRAM大小的修改................................................................................................................15 欧比特严禁复制1引言1.1编写目的这份手册向读者介绍如何使用OBT-BSP-VxWorks5.4,主要介绍在Tornado 集成开发环境中如何开发针对S698系列开发板的VxWorks 5.4应用软件,以及生成最终烧写程序的过程。
VxWorks下几种定时延时方法的小结

编程过程中,出于需要,大家或多或少要用到定时/延时。
VxWorks下提供了几种定时/延时机制,根据收集的一些资料和VxWorks相关文档,在学习和上机实验的基础上,对它们的使用以及我所遇到的问题做一个总结,希望对大家能有所帮助。
不正确之处,恳请斧正。
1 taskDelaytaskdelay()提供了一个简单的任务睡眠机制,也常用于需要定时/延时机制的应用中。
它的格式是STATUS taskDelay(int ticks /* number of ticks to delay task */),可以看出使用该函数实现延时的单位为tick(一般系统中一个tick都是ms级的)。
在VxWorks下可以这样使用taskDelay()函数:taskDelay(sysClkRateGet()*1)。
函数sysClkRateGet()返回系统的时钟速率,单位是tick数/每秒(利用函数sysClkRateSet()可以改变系统的时钟速率)。
在POSIX中有一个与taskdelay()相对应的函数――nanosleep()(下文中有介绍)。
这两个函数仅仅是延时单位不同,效果是相同的。
利用taskdelay(),可以将调用的任务移动到具有相同优先级的就绪队列尾部。
特别的,可以通过调用taskdelay(0),将cpu交给系统中其他相同优先级的任务。
延时为0的调用只能用于taskdelay()中,nanosleep()认为这种调用是错误的。
taskdelay()会导致调用的任务在指定的延时期间(以ticks计数)放弃cpu,使任务处于DELAY状态(因此,其不能用于中断服务程序中)。
通常其受到任务调度的影响,但在等待一些与中断无关联的外部条件时,其是有用的。
如果调用的任务受到一个信号,指出其没有被阻塞或被忽略,taskDelay()将返回ERROR,并在信号处理程序运行后设置errno为EINTR。
2 WatchDogVxWorks提供了一个看门狗定时器(watchdog timer)机制,利用提供的函数,任何任务都可以创建一个看门狗定时器,经过指定的延时后,实现在系统时钟ISR的上下文中运行指定的程序。
VxWorks的bootrom 到u-boot的移植心得

设定 VmWare 的 CDROM 为 iso 文件 第一句是设定编译的 cpu 类型,第二句设定路径,就是编译器安装后的路径。 设置完毕之后可以找一个简单的 foo.c 文件编译一下,看看是否安装成功。 $ ${CROSS_COMPILE}gcc –o foo foo.c 具体情况参见/mnt/cdrom 下的 readme.html。 比较懒的人可以用 root 权限,在文件/etc/profile 文件下加入下面两行,这 样就不用每次都输入了。 (/html/2005/1024/51803.html,里 面有单用户设置
VxWorks 的 bootrom 到 u-boot 的移植心得
原因:Wind River 公司推出的 VxWorks 具有优良的性能,可惜是个收费软件。 因此考虑将原来 VxWorks 下配套的软件 (引导程序 bootrom, 操作系统 VxWorks, 用户程序 user application)统统移植到免费的 linux 下。其中 bootrom 可由 denx 推出的 u-boot 代替。 硬件条件:实验室自己开发的电路板,已经有成功运行的 bootrom 和 VxWorks, CPU 为 MPC8240(powerpc603 类型的核),启动地址对应到 8bit 数据宽度的 EEPROM,有板载 Flash,但地址不连续,串口网口齐全。 本文内容:用于将 bootrom 移植成 u-boot,虽然涉及到 bootrom,VxWorks 和 user application,但真正被代替的只有 bootrom。并不包括 VxWorks 到嵌入式 linux,以及 user application 的移植方法。 1.u-boot 简介 U-Boot,全称 Universal BootLoader,是遵循 GPL 条款的开放源码项目。其源 码目录、 编译形式与 Linux 内核很相似,事实上,不少 U-Boot 源码就是相应 的 Linux 内核源程序的 简化,尤其是一些设备的驱动程序,这从 U-Boot 源码 的注释中能体现这一点。但是 U-Boot 不仅仅支持嵌入式 Linux 系统的引导,当 前,它还支持 NetBSD, VxWorks, QNX, RTEMS, ARTOS,LynxOS 嵌入式操作系统。 其目前要支持的目标操作系统是 OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux,SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX,RTEMS,ARTOS。U-Boot 除了支持 PowerPC 系列的处理器外, 还能支持 MIPS、x86、 ARM、NIOS、XScale 等诸多常用系列的处理器。 更多内容:MPC8xx 的 U-Boot 移植体会 /logs/2005/10/1516893.html 2.准备工作 2.1 安装 VmWare 下的 Linux 通常玩 Tornado 的都是在 Windows 下 (或者在 windows 的伪 Dos 下玩命令行) 。 但是 u-boot 要在 linux 下编译。 由于移植过程中不可避免的要参考 VxWorks 的 BSP,而且从 u-boot 启动的 VxWorks 可能与从 bootrom 启动的 VxWorks 略有不 同,因此强烈建议在 Windows 下安装 VmWare 虚拟机,再装上一个 Linux。我用 的是比较古老的红帽子 Linux7.3。 关于 Linux 在 VmWare 下的安装资料网上到处都是, 自己搜去吧。 需要注意的是, 装完之后强烈建议安装 VMèInstall VmWare Tools,安装好了之后分辨率就可以 设置上去了, 否则看起来太难受了。 此外, 再设置一个共享文件夹 VMèSettings, linux 下在/mnt/hgfs/目录下,方便 Windows 和 Linux 之间互相拷贝文件(这 个地方我一直没有搞定,从 Windows 下向共享文件夹里拷贝文件可以,从 linux 下总是报错:Error while copying to … there is not enough space on the destination,用 root 也是一样。)或者设置一下网络后,用 ServU 在 Windows 下开一个 ftp,开放读写权限(反正也就 linux 一个用户),效果也是一样的。
VxWorks APPLICATION PROGRAMMER'S GUIDEApplication Programmer's Guide

2 实时进程2.1 介绍VxWorks实时进程(RTPs)在很多方面和其它操作系统的进程类似——如UNIX和Linux ——包括扩展POSIX兼容。
创建、执行和终止应用程序的方法对于理解UNIX进程模型的开发者比较熟悉。
然而VxWorks进程模型设计用于实时嵌入式操作系统。
这个模型支持的功能包括系统范围内任务调度(进程本身没有调度),和用户模型一样的内核模式下的进程抢占,两步创建进程来分离加载实例和从入口加载应用程序。
VxWorks实时进程提供在用户模式下执行应用程序的方法。
每个进程有自己的地址空间,包含可执行程序,程序的数据,每个任务的栈,堆,进程本身管理相关的资源(如内存分配跟踪)。
可能内存中同时存在多个进程,每个进程包含多个任务(其它操作系统成为线程)。
VxWorks进程可以使用两种不同的虚拟内存模型:平面(默认)和重叠(可选)。
若使用平面虚拟内存模型,每个VxWorks进程有自身的通过一个唯一一个地址范围描述的虚拟内存。
这个模型在一个支持或不支持MMU的编程模型中和调试应用中在执行速度方面比较有优势。
若使用重叠虚拟内存模型,每个VxWorks进程使用相同的虚拟地址范围来存放驻留代码(文本,数据,bss段)。
这个模型对虚拟内存地址提供更精准的控制,具备更快速的应用加载时间。
关于RTP应用程序开发相关信息,参考3. RTP Applications。
2.2 关于实时进程一个进程的通用定义是执行的一个程序,VxWorks进程也一样。
事实上,VxWorks实时进程的生命周期和POSIX进程保存高度一致(参考2.2.9 RTPs and POSIX)。
然而,VxWorks进程更准确的称为实时进程(RTPs),因为此进程设计用于实时性要求比较高的系统。
以如下方式操作:●保留VxWorks任务调度模型。
进程不会调度——任务在系统全局范围内调度。
●进程在内核模式下和在用户模式下一样可能会被抢占。
每个任务有一个用户模型和一个内核模型栈。
VxWorks操作系统RTP介绍和使用方法
VxWorks 操作系统RTP 介绍和使用方法从VxWorks 6.x开始引入RTP(VxWorks real time process projec模t) 式编程,这种模式的优点是应用程序相互独立,互不影响,而且增加了内核的稳定性,缺点是由于“内核态”与“用户态”的内存拷贝,其执行效率有所降低,随着CPU 速度越来越快,这点效率的牺牲已经越来越不重要。
相比较于传统的DKM (downloadable kernel module project ),RTP适合多个团队独立运作,然后汇总联试,这种模式除了全局函数不能再shell 里直接调用外,其对应用程序几乎不做任何约束,原有的DKM 工程代码稍作修改即可正常运行。
内核变化较大,需要添加较多的组件,内存需要较好的划分,为保持应用程序直接调用函数调试的习惯,需要封装接口供用户使用。
现简单的介绍RTP使用方法,并给出demo 代码供参考。
1. 新建并编译工程:(1) File->new-> VxWorks real time process projec如t, 图【1】图【1】(2) 一路next 后,选择如图【2】所示的编译器图【2】(3) 选择Finish 后,工程新建完毕。
(4) 导入源文件:这里的源文件名称是fooRtpApp.c ,一种较快捷的方式是选中新建的工程,按下F5,源文件会出现在工程中.(5) 右键选择编译,出现如图【3】,选择Continue 继续。
图【3】编译完成后,会生成vxe 格式的可执行文件,此处为usrAppA.vxe 。
2. 下载可执行性文件待板子启动后,使用ftp 将vxe 文件下载到板子中。
步骤如下:(1)运行->cmd,打开对话窗口,如图【4】所示:图【4】依次执行如下命令:(a) ftp 192.168.0.2 (该ip 可在vxWorks启动后,输入命令ifconfig 查看)(b) bi(c) cd /tffs0(d) put filename (完整的文件路径)(e) by执行完上述命令后,即可把可执行程序下载到目标板上,如下图【5】:图【5】在串口终端中,输入ifconfig 命令查看ip 地址;依次输入如下命令查看刚下载到目标板的文件:(a) cd “/tffs0 ”(b) ls上述操作结果如下图【6】所示:图【6】3. 运行可执行文件下载完成后,可以断电重启或者在调试串口中输入命令ctrl+x 软重启电路板,待系统启动后应用程序自动运行。
vxworks课件
第一节 VxWorks操作系统的 VxWorks操作系统的 基本构成
3 网络系统
VxWorks支持两种形式的网络 VxWorks支持两种形式的网络 驱动,一种是BSD驱动支持通用的 驱动,一种是BSD驱动支持通用的 BSD4.4网络,API,结构等和大多数 BSD4.4网络,API,结构等和大多数 BSD网络的驱动类似.另一种是END BSD网络的驱动类似.另一种是END 网络驱动, VxWorks独有的, 网络驱动,是VxWorks独有的,根据 VxWorks MUX接口编程,不过END驱 MUX接口编程,不过END驱 动在底层也要转换成BSD的形式. 动在底层也要转换成BSD的形式.
第一节 VxWorks操作系统的 VxWorks操作系统的 第二节 开发工具tornado 开发工具tornado 基本构成
2 微内核wind 微内核wind
在VxWorks 下,任何子程序 都可产生具有自身的上下文和堆 栈的单独任务.其它的基本任务 控制程序可使任务悬挂,重开, 删除,延迟和改变优先级.
�
第一节 VxWorks操作系统的 VxWorks操作系统的 基本构成
1
板级支持包BSP 板级支持包BSP
所谓初始化是指从系统上电复位 开始直到wind kernel和usrRoot根任务 开始直到wind kernel和usrRoot根任务 启动这段时间系统的执行过程.驱动 程序就是一些包含I/O操作的子函数. 程序就是一些包含I/O操作的子函数. 初始化包括CPU Init, 初始化包括CPU Init,Board Init 和System Init.CPU Init初始化CPU的 Init. Init初始化CPU的 内部寄存器.Board Init初始化智能 内部寄存器.Board Init初始化智能 I/O的寄存器,将device打通.System I/O的寄存器,将device打通.System Init为系统的运行准备数据结构,进行 Init为系统的运行准备数据结构,进行
05-基于vxworks的中间件及驱动设备的设计和实现
05-基于vxworks的中间件及驱动设备的设计和实现工程硕士专业学位论文(设计)题目基于vxworks的中间件及驱动设备的设计和实现作者完成日期 2010-9-23培养单位四川大学指导教师指导教师工程领域计算机科学技术授予学位日期年月日A Dissertation for the Degree of Master of EngineeringVxworks middle ware add driver design and realizeCandidate:Major:ComputerSupervisor:Prof.SiChuan University摘要VxWorks是业内领先的商业级设备软件操作系统。
它是一个多任务时实操作系统,借助于其高确定性、高性能、可裁剪性和内存指印,全球3亿多台设备运行得更为快速、更加可靠。
下一代VxWorks增加了一些功能强大的新特性,并专注于开放性、高性能、可靠性和互操作性。
VxWorks已经广泛应用于各种设备、电子产品的开发当中,本文介绍了一种基于vxworks的中间件实现,包括应用程序类、图形中间件、网络中间件、配置文件读取类、观察者模式类、线程类等中间件的实现。
另外vxworks是一种嵌入式操作系统,系统运行的硬件设备一般需要单独定制,需要实现设备驱动、中断、图形显示、任务控制等相关的驱动,所以在论文中详细论述了一种硬件平台的驱动实现。
并且深入论述vxworks系统为了满足1600X1200高分辨率显示驱动的设计和实现过程。
关键字: vxworks嵌入式操作系统,中间件,设备驱动AbstractVxWorks is a modern operation system.Modern real-time systems are based on the complementary concepts of multitasking and intertask communications. A multitasking environment allows a real-timeapplication to be constructed as a set of independent tasks, each with its own thread of execution and set of system resources. The intertask communication facilities allow these tasks to synchronize and communicate in order to coordinate their activity. In VxWorks, the intertask communication facilities range from fast semaphores to message queues and from pipes to network-transparent sockets.Vxworks is widely used in all kinds of equipment.this article mainly describe a middle ware for vxworks include application class,graphic middle ware,net middle ware,configuration file read class,observe class,thread class and so.Another key facility in real-time systems is hardware interrupt handling, because interrupts are the usual mechanism to inform a systemof external events. To get the fastest possible response to interrupts, interrupt service routines (ISRs) in VxWorksrun in a special context of their own, outside any task'scontext.And this article discibe a way to 1600X1200 rate display of equipment driver.Keywords:vxworks operation system、middle ware 、equipment driver 目录1 概述 ..................................................................... ........................ 8 1.1 嵌入式vxWorks系统及开发介绍 (8)1.1.1 嵌入式vxworks系统概述和开发方式研究 (8)1.1.2 集成开发环境体系结构 (10)1.1.3 vxWorks图形库windML介绍 (12)1.1.4 Vxworks网络堆栈及其开发介绍 .................................................. 13 1.2 中间件技术及vxworks中间件开发介绍 ............................................. 15 1.3 Vxworks驱动技术及开发介绍 ............................................................. 16 1.4 Vxworks系统编程研究 ..................................................................... . (16)1.4.1 多任务调度...................................................................... . (17)1.4.2 任务间的同步和进程间协调 (18)2 基于vxworks的中间件设计和实现 ....................................20 2.1 应用程序类设计...................................................................... ............... 20 2.2 图形中间件设计...................................................................... ............... 22 2.3 网络通讯中间件设计...................................................................... ....... 26 2.4 配置文件读取类设计...................................................................... ....... 28 2.5 观察者模式类设计...................................................................... ........... 29 2.6 线程类设计...................................................................... ....................... 31 2.7 多线程流水作业设计...................................................................... ....... 33 2.8 xml处理类设计 ..................................................................... . (34)3 基于HP4400的设备驱动设计、配置和实现 .................... 35 3.1 BSP功能研究 ..................................................................... ................... 35 3.2 Vxworks系统引导顺序和引导文件研究 (38)3.2.1 Vxworks系统引导概述 (38)3.2.2 配置引导序列...................................................................... ............ 38 3.3 驱动模块设计和及函数调用过程设计. (41)3.3.1 romInit() 函数设计 ..................................................................... . (41)3.3.2 romStart() 函数设计 ..................................................................... .. 423.3.3 sysInit() 函数设计 ..................................................................... .. (42)3.3.4 usrInit()函数设计...................................................................... . (42)3.3.5 初始化cache方法设计 (43)3.3.6 初始化中断向量的设计 (43)3.3.7 初始化系统硬件为静默状态 (43)3.3.8 kernelInit()函数设计 ..................................................................... .. 443.3.9 执行kernelInit() ..............................................错误~未定义书签。
vxWorks开发入门教程索引
vxWorks还提供了内存泄漏检测功能,以帮助用户发现并及时处理内存泄漏问题。同时,vxWorks还支持内 存回收功能,可以自动回收不再使用的内存空间。
03 开发环境搭建与 配置
安装与配置开发环境
安装Wind River Workbench
下载并安装适用于您的操作系统的Wind River Workbench,这是开发vxWorks应用程序的集成开发环境( IDE)。
vxWorks开发入门教程索 引
contents
目录
• 引言 • vxWorks基础知识 • 开发环境搭建与配置 • 驱动程序开发与调试 • 中间件及组件应用 • 系统优化与性能提升 • 项目实战:基于vxWorks的智能家居控
制系统设计
01 引言
vxWorks概述
01
vxWorks是一款实时操作系统(RTOS),专为嵌入式系统设计 ,具有高性能、可确定性和低延迟等特点。
日志和跟踪工具
使用vxWorks提供的日志和跟踪工具来记录应用程序的运行状态和错误信息。这有助于 分析和解决问题。
04 驱动程序开发与 调试
设备驱动模型概述
01
设备驱动模型组成
包括设备、驱动和服务等组件, 用于实现硬件设备的抽象和访问 控制。
02
设备驱动模型作用
提供统一的设备访问接口,屏蔽 底层硬件细节,简化驱动开发流 程。
关键模块代码实现及讲解
设备驱动模块
展示设备驱动模块的代码实现,包括 设备初始化、数据读写等操作。
通信协议模块
介绍通信协议模块的实现,包括协议 的选择、封装和解封装等过程。
应用功能模块
展示应用功能模块的代码实现,如远 程控制、自动化场景设置等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【1】tornado使用标准c语言吗?为什么没有提供inb(), outb()等函数?
tornado缺省使用gnu编译器,支持ansiiso c, c++,以及at&t语法汇编(非intel)。由于
c++很庞大,而且在不断发展,所以有些标准c++的特征
可能gnu不支持(基本没有编译器支持所有c++特征)。程序员一般只要掌握常用部分就
能编出不赖的程序了。
inb(),outb()是turbor cdos下的,不属于标准c。tornado在bsp中提供了相应的
sysinbyte(),sysoutbyte()等函数,参考bsp下的sysalib.s。
【2】vxworks下怎么访问a盘,c盘(pc机环境)?
a,c是m$对pc机设备的命名方式,目的是让傻瓜用户方便理解。vxworks下叫fd0和ata0。
【3】目标机没有键盘和显示器,printf()打印到哪里去了?
打印到标准输出设备上了。至于标准设备是什么,如果你用pc终端,就到屏幕上;否则到
系统中第一个串口去;还有可能被重定向到别的设备上了,比如磁盘文件或telnet端口。如
果什么都没有,打印的字符串被丢弃。
c语言中,3个标准设备的文件描述符为std_in, std_out, std_err;
文件指针为stdin, stdout, stderr;c++中有cin, cout, cerr对象。
【4】怎么在vxworks下用(段偏移地址)方式访问端口?
vxworks for x86工作在保护模式下,应用程序不用关心段的存在。直接用线性地址访问即
可,例如:
(unsigned short )0xb8000 = 0xaa55;
可以访问video ram。(8086,dos真是害人的玩艺儿,是不是现在大学里还在教)
【5】在中断服务程序(isr)中调用printf()打印调试信息。
程序死机是正常的,没有烧坏硬件算幸运的了。vpg里规定了哪些函数是可以调用的。关键
是printf()会引起任务阻塞,而中断不是任务。可以用logmsg()。
【6】不用io函数,写汇编直接访问串口。
最好使用open()close(),read()write()访问串口。这样程序不依赖于硬件,好移植。有人对
移植性不以为然,实际上老板们都希望以前的程序不用改就能重用,尤其是老程序已经通过
严格测试,并经过了实践检验。
如果你的程序没有移植性需求,可能的原因有:
- 程序太烂,不值得移植,不如重写;
- 程序太乱,且缺少文档,没办法移植;(可以让老板不敢炒你鱿鱼;))
- 产品在市场上惨败,公司已决定不再开发类似产品,可能要大规模裁员。
有人认为自己写专用驱动效率高,灵活。错了!
效率高是因为功能弱。为了让驱动和app交换数据,你必须设计类似ring-buffer的数据结
构并使用信号量机制;为了支持同时监视多个串口,必须设计类似select的机制;必须管理
所有串口的细节。最后发现,你不过是在从头发明轮子。
串口是一种古老而缓慢的通信方式,指望在它身上挤出一点效率,我看不出有什么实
际意义。如果速度实在不够,也许你应该选用usb。
open()close()函数是c程序员都应该会用的,而专用驱动接口只有你自己会用。
不要因为不会使用io函数,就牺牲多数人的灵活性以换取少数人的灵活性。
可能你对8250或scc很熟,但别指望每个人都是。有可能在另外一种硬件环境下的串口你
也不懂。
【7】分不清fopen(),fread()和open(),read()的区别。
fwrite等是带缓冲的,最好别用在串口或音频等设备上。写串口的意思是希望串口立即把数
据发送出去,而不是放在缓冲区中。另外,工作
在line_mode下的串口驱动本身就具有缓冲能力。
【8】反复查询标志变量以确定等待的事件或超时发生。
最没有效率的做法。尽量使用信号量、select()或watchdog。只有在特殊情况下,例如硬件
不支持中断,或延迟一小段时间,才有理由这样做。
【9】在程序中频繁调用malloc() free()。
桌面系统和嵌入式系统的一个很大区别是,桌面系统的user是人,人对系统实时性,稳定
性要求相对并不高。程序死机时,大不了结束进程或重新关机开机。嵌入式系统的user基
本上是大系统中的其它部分,实时性或稳定性不好会导致重要数据丢失,甚至发生重大事故。
卫星在天上飞时,如果系统瘫痪,遥控系统都失灵了,你总不能亲自爬上去关机开机吧。(不
过象这种系统都有备份,出错时可以启动备份系统)。
vxworks是实时操作系统,并不表示你写的程序就一定是实时的。malloc()free()非常灵活,
但它每次需要进行搜索算法,需要的时间是不确定的。另外它导致内存碎片,导致性能下降
或内存不足,写得差的程序还可能发生内存泄漏或悬空指针。
实时性要求高的应用,或多或少都会采用静态分配,即在程序中事先定义好可能需要
的全部变量,或者在程序启动时一次分配好,以后就不再分配释放了,或者是写专用的内存
管理函数。利用率和灵活性是差了些,得到的是性能。
在风河公司的另一款基于osekvdx的操作系统osekworks中,你甚至不能在程序中创
建任务,分配资源。所有都在编译前静态指定。osekworks主要用于汽车工业。试想malloc()
返回null的情况,你还能怎么办呢?方向盘附近有个显示面板,倒可以在上面打印:“内存
不足,请关闭部分任务或稍后再试!”可能开车子的还没有看到这个提示就已经车毁人亡了。