- 浏览: 9891 次
最新评论
VxWorks下编程的几个误区
2010年07月30日
VxWorks下编程的几个误区
【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的情况,
你还能怎么办呢?方向盘附近有个显示面板,倒可以在上面打印: "内存不足,请关闭部分任务或稍后
再试!"可能开车子的还没有 看到这个提示就已经车毁人亡了。
本文章来自中国IT实验室
http://embed.chinaitlab.com/
发表评论
-
socket阻塞和非阻塞的区别
2012-01-20 00:40 677socket阻塞和非阻塞的区 ... -
Socket编程基础
2012-01-20 00:40 672Socket编程基础 2010年10月20日 TCP/I ... -
MTK 上的socket
2012-01-20 00:40 776MTK 上的socket 2010年10月0 ... -
VC 小技巧(一)
2012-01-20 00:40 655VC 小技巧(一) 2010年06月 ... -
WMI(Windows管理规范)常见问题解答
2012-01-17 00:58 498WMI(Windows管理规范)常见 ... -
网络和黑客windows编程
2012-01-17 00:58 784网络和黑客windows编程 2011年04月18日 第 ... -
Windows XP的小秘密 {7}
2012-01-17 00:57 720Windows XP的小秘密 {7} 201 ... -
转: Boost下载安装编译配置使用指南(含Windows和Linux)
2012-01-17 00:57 642转: Boost下载安装编译配 ... -
通过QQ旋风离线下载Android SDK,速度超快
2012-01-17 00:57 956通过QQ旋风离线下载Android SDK,速度超快 201 ... -
EGLIBC库介绍
2012-01-15 19:41 517EGLIBC库介绍 2011年05月05 ... -
c库函数qsort使用方法实例
2012-01-15 19:41 549c库函数qsort使用方法实例 2010年01月03日 ... -
制作和使用自定义C库文件
2012-01-15 19:41 618制作和使用自定义C库文 ... -
九标海外项目负责人爬进!
2012-01-15 19:41 650九标海外项目负责人爬 ... -
[转]GCC笔记
2012-01-15 19:41 582[转]GCC笔记 2010年03月23日 The His ...
相关推荐
vxworks编程1 vxworks编程1 vxworks编程1 vxworks编程1 vxworks编程1
几个初学者的常见误区和一些基础疑问的解答,希望对大家的学习有所帮助。
VxWorks 网络编程手册 VxWorks 网络编程手册
VxWorks用户编程手册
VxWorks5.5.1编程指南,Word文件
VxWorks 网络编程教程 里面有大量的事例!
Vxworks的网络编程手册,简单易用!对入门者很有提高哦!
VxWorks串口编程代码:包括串口的配置,读写操作,以及任务量的启动。
基于vxworks653进行嵌入式开发的编程手册
vxworks网络编程源码,可以参考一下
Vxworks网络编程指南
Vxworks编程指南与用户手册Vxworks编程指南与用户手册Vxworks编程指南与用户手册
学习网络编成的好帮手,vxworks资料不多,网络编程方面的更是难得
VxWorks SMP多核编程指南.doc
VxWorks编程与使用指南 希望能对大家有所帮助
vxworks 驱动开发,主要针对刚学vxworks开发的新手,根据自己的需要下载
vxworks_programmers_guide.pdf与vxworks_network_programmers_guide.pdf 中英对照,经理让看的,觉得看英文原著确实比看中文的好,希望对朋友们有帮助,顺利拿点资源分好继续下载资源
vxworks_kernel_programmers_guide : This guide describes the VxWorks operating system, and how to use VxWorks facilities in the development of real-time systems and applications.
VxWorks 编程手册