网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 嵌入式系统 > 文章  
嵌入式系统的人机界面原型设计策略
文章来源: CE china 文章作者: 未知 发布时间: 2006-07-25   字体: [ ]  
 

 

代码的组织

 

如果我们已经编写了两个版本的setAlarm-State()函数,那么我们必须保证一次只编译其中的一个。要达到这一目的,一种方法是一直采用CPB代码,直到目标硬件设计好之后,再用目标专用的代码代替其中所有CPB专用的代码。如果我们这样做,那么在我们开始目标硬件的开发工作之后,就无法再运行仿真了。读者可能认为这不是什么问题,但事实上,即使硬件设计好之后,仿真也是有用的。

 

例如,仿真中基于PC的调试环境往往就比目标硬件的开发环境要好。因为目标硬件的下载速度可能较慢,或者每次修改软件都必须重新烧录一块一次性可编程芯片。而且目标硬件的调试环境中可能也不支持单步调试和断点调试。即使目标硬件的调试环境较好,相对而言,PC仿真还是有其它优势。开发者可以将.exe文件通过电子邮件发送给不在同一工作地点的工作伙伴,以获得他们的反馈信息。

 

一旦开发者决定要在整个项目的开发周期中同时保留两个版本的函数,那么分隔它们就很容易。在CPB中的Project/Options下,可以定义宏。我通常会定义USING_CPB,然后在我的源代码中,利用一个#ifdef来区分不同的函数版本。另一种区分函数版本的方法就是将目标代码和仿真代码存放在不同的文件中,但让二者共享同一个头文件,以保证二者采用同样一组函数标记。

 

CPB环境是基于C++的一种环境,但许多嵌入式目标几乎都不支持C。这时,开发者只能采用共享代码中由交叉编译器所支持的C++子集,这其实并没有想象中的困难。解决该问题的方法之一就是针对嵌入式目标来编译代码,即使当前并没有硬件可以运行这些代码。这时那些在PC机上可用的而在目标硬件上则可能属于非法的特性就显得突出起来。例如,有些较小型的处理器就不支持递归。同时,在嵌入式编译器上检查软件,还能快速地在程序中标出那些偶然被包含进目标可执行文件中的CPB专用代码。我本人就发觉这种方法在跟踪软件的大小时非常有用,因为CPB库过于庞大,会完全扭曲程序的大小,所以PC机中进行编译时给出的软件大小并不真实。

 

这里采用了三种类型的代码。其中有些属于CPB专用代码,只能在PC机上编译;有些属于目标专用代码,只能在目标上编译;而其它的则属于公共代码,应该既能在PC机平台上运行,也能在目标平台上运行。在理想情况下,每个源文件应该都只包含一种类型的代码。设计工程师的IDEmakefile应允许其选择在每次创建可执行文件时需要包含哪些文件。

 

建议在命名文件时,将所有CPB专用的文件命名为.cpp文件,所有目标专用的文件和共享文件均取.c为扩展名。那么在目标环境中编译时,就只需编译扩展名为.c的文件,而不编译扩展名为.cpp的文件。

 

如果设计工程师遵循以上风格,那么在CPB环境中编译时还会遇到一个问题。CPB环境将.c文件假设为C代码编写的文件,而将.cpp文件假设为C++代码编写的文件。当从一个文件到另一个文件发生调用时,将会因 C++产生破损函数名的方式不同而产生链接错误。我们可以通过采用extern C构造来回避这个问题。但这样有点麻烦,尤其当调用发生在从CC++或从C++C时。可以为Borland编译器设置一个标志,告诉它,不论文件名的后缀是什么,均将其作为C++文件来编译。遗憾的是IDE中没有这样的标志。于是我们只能手工编辑项目配置文件来实现这一功能。

 

代码举例

 

读者可以在www.panelsoft.com/cpb处找到一个可执行文件five.exe,文件中包含一行5个按钮和一组LED。按下前4个按钮中的任何一个都会打开相应的一个LED。第5个按钮是RESET(复位)按钮,按下该按钮会关断所有LED 当然,在构造这样一个项目时,并不需要进行仿真。但该例旨在说明,只要具备初始的接口界面图象,那么仿真时,只需稍作努力就可得到与真实设备看起来相似的运行结果。同时,该例还说明,key.c模块中包含的代码既可在目标环境中运行,也可在仿真环境中运行,而且该代码不会因目标环境和仿真环境这两种平台之间的差异而需要任何条件代码才能运行。用于构造该应用的所有源代码和初始位图均可从该站点下载。

 

建立类似的仿真需要设计工程师具备一定的C++知识,学习CPB开发环境也需要一定的过程,当设计工程师从未用过这种面向对象的事件驱动环境时尤其如此。然而只要建立起一个仿真,那么其它工作只需按相同的步骤进行即可。设计工程师如果曾编写过基于PC的程序,而且程序中用到了GUI,那么这一经验会有助于对CPB的学习。我过去就曾利用这样一个程序来完成过一个简单的下载应用,实现与嵌入式目标的串行通信。

 

--

原文链接: http://www.ednchina.com/Article/html/2006-07/2006725090320.htm

 
推荐文章
·嵌入式Linux平台的多协议路由器
·恰当选择嵌入式Linux环境下的GUI
·嵌入式Linux系统的MiniGUI研究和
·基于Linux的移动电话开发技术及
·嵌入式uClinux的内核结构和开发
·基于 GTK+ 和 X-window 的 GUI
·基于Qt/Embedded和Qtopia的GUI设
·恰当选择嵌入式Linux环境下的GUI
·ARM的嵌入式Linux移植体验之操作
·ARM的嵌入式Linux移植体验之基本
·ARM的嵌入式Linux移植体验之应用
·ARM的嵌入式Linux移植体验之设备
·ARM的嵌入式Linux移植体验之Boot
·嵌入式Linux系统中的GUI系统的研
 
 
共3页: 上一页 [1] [2] 3 下一页
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·ARM的嵌入式Linux移植体
·U-Boot简介
·基于Qt/Embedded的GUI移
·基于Qt/Embedded和Qtopi
·U-BOOT的启动流程及移植
·ARM的嵌入式Linux移植体
·几种Linux嵌入式开发环
·ARM的嵌入式Linux移植体
相关文章
·双内核嵌入式处理器及其
·嵌入式数据库
·开源嵌入式数据库Berkel
·Linux 2.6 内核的嵌入式
·YAFFS文件系统在嵌入式L
·嵌入式系统的USB虚拟串
·ARM7系统中实现CF卡存储
·ARM入门
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统