Hu’s Blog

Just a blog

Archive for June, 2007

[zz]如何在预编译时判断WinCE的版本?

Friday, June 29th, 2007

作者:Daric 来源:BIPLIP.com 时间:2004年7月8日 4:15 阅读3262次

问:在写WinCE程序时,经常要针对不同的版本写不同的代码,如何在预编译时判断WinCE的版本呢?

答:可使用如下语句判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//===============
//判断WinCE版本号
#if (_WIN32_WCE == 211)
      //Your code;
#endif
 
#if (_WIN32_WCE >= 200)
      //Your code;
#endif
 
#if (_WIN32_WCE < 300)
      //Your code;
#endif
 
//=============
//判断WinCE与PC
#if defined(_WIN32_WCE)
      //Your code;
#endif
 
//==============
//判断Palm Size PC
#if defined(_WIN32_WCE_PSPC)
      //Your code;
#endif
 
//=============
//判断Pocket PC
 #if defined(WIN32_PLATFORM_PSPC)
        // Pocket PC or Palm Size PC
 #if (WIN32_PLATFORM_PSPC == 1)
        // Pocket PC 2000
 #elif (WIN32_PLATFORM_PSPC == 310)
        // Pocket PC 2002
 #else
        // Some other Pocket PC
#endif
 
//=============
//判断模拟器
#ifdef _WIN32_WCE_EMULATION
      //Your code;
#endif
 
//=============
//判断HPC
#if defined(WIN32_PLATFORM_HPC2000)
        // H/PC 2000
#elif defined(WIN32_PLATFORM_HPCPRO)
        // H/PC Pro
#endif
 
//=============
//判断SmartPhone
#if defined(WIN32_PLATFORM_WFSP)
        // Smartphone
#endif
 
//=============
//判断CPU类型
#if defined(ARM)
        // ARM processor
#elif defined (MIPS)
        // MIPS processor
#elif defined (SH3)
        // SH3 processor
#elif defined (SH4)
        // SH4 processor
#elif defined (x86)
        // x86 processor - emulator version
#else
        // 其它
#endif

WordPress 插件:WordPress Database Backup

Friday, June 29th, 2007

主页:http://www.ilfilosofo.com/blog/wp-db-backup

[zz]介绍一下Windows CE的学习路线

Thursday, June 28th, 2007

Q:什么是嵌入式系统?
国际电气和电子工程师协会(IEEE)对嵌入式系统的定义是这样的:嵌入式系统是“控制、监视或者辅助设备、机 器和车间运行的装置”(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
但是这个定义非常的难于理解——句子的主干:“嵌入式系统是装置”——并且不 太会被计算机行业的人士接受,为什么呢?因为做出这个定义的组织是IEEE,是搞电子的一群人,在他们眼里,当然是Device比较重要。Google一 下,还可以找到另外一个定义,我觉得这个定义是比较不错的:
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
这样句子的主干就成了“嵌入式系统是计算机系统”。我们可以通过上面的定义,挖掘嵌入式系统的三个特点:
(1) 嵌入性:由于是嵌入到对象系统中,必须满足对象系统的环境要求,如物理环境(小型)、电气/气氛环境(可靠)、成本(价廉)等要求。通俗一点说,嵌入式系统通常需要与某些特定的应用领域紧密结合。
(2) 专用性:软、硬件的裁剪性;满足对象要求的最小软、硬件配置等。一般而言,当嵌入式系统开发结束之后,它的用途也就被定下来了,一般不会改变。例如,我们不可能用投影仪去听mp3,虽然投影仪上的硬件足以应付对mp3的处理。
(3) 计算机系统:嵌入式系统必须是能满足对象系统控制要求的计算机系统。与上两个特点相呼应,这样的计算机必须配置有与对象系统相适应的接口电路。
总之,嵌入式系统与我们平时接触的桌面PC还有企业后台服务器的差别还是比较明显的。这些差别会随着大家的学习而越来越深刻的体会到。
随 着互联网技术和消费类电子产品的高速发展,嵌入式系统近年来也得到了飞速发展,近年流行的一个概念,叫“泛嵌入式系统”。意思是嵌入式系统原本的概念早就 被延伸了。随着PDA,智能手机等新兴的设备加入到嵌入式的阵营,为PDA、智能手机开发应用程序从广泛意义上来说也可以算得上是嵌入式开发,而为此类设 备开发应用程序与为桌面设备开发应用程序的差别不大,因此,嵌入式开发与桌面开发之间的界限越来越模糊了。

Q:什么是Windows CE?
Windows CE是微软公司开发的一个32位、多任务、多线程的嵌入式操作系统。它可以用在手机、机顶盒、智能手持设备、网关、数字媒体设备、工业控制等多种场合。 Windows CE支持X86、ARM、MIPS和SH四种处理器架构。并支持WiFi,USB 2.0等新型设备,并具有强大的多媒体功能。
Windows CE操作系统是模块化设计的,整个系统被划分为数百个模块,嵌入式系统开发人员可以根据系统的需要,来选择自己需要的模块,从而达到减小系统体积目的。一 个最小的Windows CE可运行内核只需要几百KB。而一个功能完备的Windows CE映像也不会超过64MB。此外,微软开放了部分Windows CE的源代码,并且允许开发人员对这部分源代码进行修改。
Windows CE自1996年发布了第一个版本,目前最新的版本是5.0。它的6.0版本会在2007年发布。

Q:Windows CE与微软其他Windows版本之间的关系怎么样?
目 前,微软的操作系统基本可以分为三大领域:桌面OS、服务器OS和嵌入式OS。桌面OS也就是我们熟悉的Windows XP,Windows 9x等。服务器OS包括Server系列,像Windows 2000 Server和Windows Server 2003。这里就不再详细介绍了。
嵌入式OS也分为两类,一类是Windows XP Embedded,基本上就是把桌面版本的XP做了组件化。另一类就是Windows CE。Windows CE和Windows XPE统称Windows Embedded。

Q:什么是Windows Embedded?什么是Windows Mobile?什么是Windows Automotive?
Windows Embedded是基于Windows的嵌入式操作系统的统称。目前Windows Embedded家族包含两款产品:Windows CE和Windows XP Embedded。
Windows Mobile是搭建在Windows CE之上的针对移动领域的家族产品集合。也就是说Windows Mobile的内核还是Windows CE,只不过在Windows CE之上搭建了一些针对这个领域一些特有的行业应用组件,例如手机图形界面,短信息应用等。目前Windows Mobile包含Pocket PC和Smartphone两款产品。Pocket PC针对PDA设计。Smartphone针对智能手机设计。
Windows Automotive也是搭建在Windows CE之上的针对汽车电子领域的产品。包含了一些汽车电子上比较常用的组件,例如导航系统。

Q:Windows CE与嵌入式Linux等其他嵌入式操作系统如何比较?
由于嵌入式系统的特点而决定的,在嵌入式领域不可能有一款嵌入式操作系统可以一统嵌入式OS的天下。不同的嵌入式操作系统有不同的优缺点。嵌入式开发人员可以根据应用的具体需要进行选择。
与其他嵌入式操作系统相比,Windows CE的优点有如下几点:
学 习 / 使用简单:微软提供了方便的IDE和开发工具,对于OS的定制、裁减、交叉编译等都相对简单。此外,Windows CE的应用程序开发接口也是Win32 API,与桌面Windows的基本一致。这也方便了桌面Windows开发人员向Windows CE嵌入式开发过渡。
图形界面优秀:这个理由或许是许多人员选用Windows CE的主要原因。Windows CE的图形和多媒体能力是非常优秀的,可以方便的支持多种视频音频格式。此外还支持DirectX多媒体接口,这对于开发多媒体应用(例如电子地图导航、 多媒体播放器等)非常方便。
应用集成度高:Windows CE自带了很多应用程序,例如Web浏览器,多媒体播放器,Office文件察看器等。这对于快速的开发一款产品相当有用。此外,互联网上有数以万计的为Windows CE开发的应用程序。
与其他嵌入式操作系统相比,Windows CE可能有如下缺点:
对硬件要求高:Windows CE要求硬件必须有32位的CPU和MMU,和数MB的RAM,虽然Windows CE可以裁减到几百K,但是对于一些小型的设备(例如一些航天设备只有64KB的ROM和几百KB的RAM),Windows CE依然不适合这类的领域。
实时性和可靠性:虽然Windows CE在实时性上下了非常大的功夫,并且实时性与桌面Windows相比已经有了质的提高,但是在一些实时性和高可靠性的场合,Windows CE可能依然不适合。
授权费用:Windows CE是按照license方式来收钱的,根据用户选择的组件不同,每个Windows CE的license可能要到十几美元左右。

Q:学习Windows CE的方向有哪些?
与桌面操作系统和服务器操作系统下的软件开发不同,为嵌入式操作系统开发软件可不只是写写应用程序那么简单。我们常常要深入到内核,甚至要深入到硬件。根据不同的开发层面,我们把Windows CE 下的嵌入式软件开发者分为下面三类:
第 一类我们称之为应用程序开发者。此类开发人员与传统的通用操作系统下的应用开发人员比较相似。他们通常是利用操作系统提供的API (Application Programming Interface,应用程序编写接口),应用程序库(例如C 运行时库,Visual Basic 运行时库)或应用开发框架(例如J2EE 与.NET Framework)来编写代码。他们开发的代码通常运行在用户态,无需直接对硬件进行操作。他们所关注的是通常是应用功能和业务逻辑的实现。此外,他们 的程序通常是直接与最终用户打交道的。
第二类是操作系统平台的提供者。此类开发人员的主要职责是针对具体的应用环境,对嵌入式操作系统进行裁减, 向第一类开发人员提供应用程序运行的平台。他们通常要对所裁减的操作系统的各个模块的功能了如指掌,这样才可以针对具体的应用环境,搭建出合适的平台,使 资源达到最节省。例如,一个运行在自动取款机上的嵌入式操作系统应不应该加入MPEG4 播放模块,管理数码相机的嵌入式操作系统中“蓝牙”网络协议栈是否必要……。此外,为了满足应用需求,他们有可能还需要对所裁减的嵌入式操作系统进行一些 扩充,增加嵌入式操作系统所不支持的功能,编写一些比较上层的驱动程序通常是必要的。例如,用于视频会议的嵌入式系统要用到USB 摄像头的支持,如果该嵌入式系统没有提供USB 摄像头的驱动程序,就需要此类开发者来提供。在现实的世界中,除了微软向外界提供Windows Mobile和Windows Automotive,还没有发现有公司专门定制操作系统。一般这类角色通常都由第一类或第三类开发人员兼任。
第 三类是内核/驱动开发者。嵌入式操作系统与通用操作系统最显著的区别之一是它的可移植性。一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板 上。为了使嵌入式操作系统可以在某块具体的开发板上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而把一部份与具体硬件设备相关的 代码作为抽象的接口保留出来,给提供硬件的OEM 厂商来完成。这样才可以保证整个操作系统的可移植性。这些代码通常是BSP(Board Support Package,板级支持包)的一部分。例如,不同的处理器和开发板通常都会提供时钟支持,用来得到当前的时间日期,但是时钟的实现方式却不胜枚举,如何 告诉嵌入式操作系统当前的时间,就是此类开发人员要解决的任务。这一类开发人员不但要对嵌入式操作系统提供的硬件接口了如指掌,还要对操作系统运行的硬件 有极为深入的了解。有可能此类开发人员会同时身兼软件工程师和硬件工程师双种身份——让嵌入式操作系统在自己设计的硬件平台上运行起来。
通常第一类软件开发者的数目最多,第三类软件开发者的数目最为稀少。从软件角度来看,一般把应用开发称作上层开发,而把驱动等系统开发称作底层开发。所以,这三类软件开发者的结构通常呈现出“倒三角型”。
就 目前国内市场上来看,无论是应用开发还是内核/驱动开发都有良好的前途(钱途)。国内基于Windows CE的应用程序开发主要集中在Windows Mobile这一块,也就是给Pocket PC和Smartphone开发应用程序。此外,还会有一些公司需要开发Windows CE的BSP和驱动程序。从报酬来看自然是后者要高于前者,这个与开发难度是成正比的。
但是应用开发与内核/驱动开发都有自己的知识体系,而且它们的交集并不多。如果两者兼顾可能需要花费大量的时间与精力。建议学习Windows CE的人根据自己的喜好对这两者进行选择,对自己的能力有12分自信的则可以“通吃”。

Q:学习Windows CE需要哪些基础知识?
根据学习方向的不同,基础知识的要求也不同。
如 果立志做一个优秀的Windows CE下的应用开发人员,则不需要了解太多的硬件,关键是要对应用程序开发接口,包含Win32 API,.NET Compact Framework等有详尽的了解。因此,如果有桌面Windows开发的经验自然是最好的。例如C / C++语言,Windows程序设计经验。.NET开发经验等等。
如果要做一个内核/驱动开发人员,则一方面需要了解操作系统的基本原理,另一方 面需要了解一些硬件的工作原理等知识。因为无论是编写BSP还是编写驱动程序,都需要直接对硬件打交道。具体而言,可能有如下一些知识:汇编语言 (ARM,X86)。微机原理,组成原理,操作系统……

Q:目前有哪些比较好的参考书?
由于Windows CE最近几年才开始流行,所以市场上的参考书并不是很多,最好的资料还是Windows CE自带的帮助文档。下面几本书可以读一下:
《Windows CE内核定制及应用程序开发》:以Windows CE 4.2为蓝本,基本上是一本platform builder的用户手册。可以熟悉PB,对熟悉内核和驱动帮助不大。
《Windows CE嵌入式开发入门–基于Xscale架构》:看目录非常不错,但是我没有看过书的具体内容。
《WINDOWS CE实用开发技术》:作者是北京交通大学的张冬全老师,张老师在国内Win CE培训方面很有名气,可惜我也没有读过这本书,看目录很好。
《Windows CE.NET系统分析及实验教程》陈向群老师的作品,主要是分析Windows CE开放的部分的源代码,适合想知道CE底层的人阅读。

From: http://community.csdn.net/Expert/TopicView3.asp?id=5613927

[转]Six ways to write more comprehensible code

Monday, June 25th, 2007

Tip 1: Comment like a smart person.

Tip 2: Use #define a lot. No, a LOT.

Tip 3: Don’t use variable names that will mock you.

Tip 4: Do error checking. You make errors. Yes, you.

Tip 5: “Premature optimization is the root of all evil.” - Donald Knuth

Tip 6: Don’t be too clever by half.

英文原文:http://www.ibm.com/developerworks/linux/library/l-clear-code/
中文翻译:http://www.ibm.com/developerworks/cn/linux/l-clear-code/

WordPress 插件:Simple Tagging

Sunday, June 10th, 2007

介绍:

Simple Tagging 是用于 Wordpress 的另一个标签插件,更加小巧,快速。另外两个常用的标签插件是:Ultimate Tag Worrior (UTW) 和 Jerome’s Keywords。Simple Tagging 的主要特性有:

  • 从UTW 和 Jerome’s Keywords 中导入标签。
  • 输入标签时的自动提示功能
  • 可以显示当前文章的标签,与本文相关的文章
  • 标签云
  • 相关标签
  • ……

主页:

http://trac.herewithme.fr/project/simpletagging/

下载 :

http://trac.herewithme.fr/project/simpletagging/wiki/Download

安装:

安装比较容易,几步就可完成

  1. 解压下载的 zip 压缩包,上传所有文件到 wordpress 的插件目录,一般是 /wp-content/plugins/。
  2. 在 wordpress 后台的插件管理页面启用 Simple Tagging。
  3. 在 wordpress 后台打开 Tags 页面,调整选项,保存。
  4. 更新永久链接结构

具体的使用函数说起来要好几张网页呢,所以还是建议你到上面提到的主页上查找。

我现在只是最简单地使用了 Simple Tagging

  • 显示当前文章的标签:
    在模板的合适位置加入 <?php STP_PostTags(); ?>
  • 标签云:
    在模板的合适位置加入

    <?php if (class_exists('SimpleTagging')) : ?>
    	<ul id ="tagcloud">
    		<?php STP_Tagcloud(); ?>
    	</ul>
    <?php endif; ?>

    然后修改css文件,加入以下内容,设置字体

    ul#tagcloud { padding:0; margin:0; text-align:center; list-style:none; }
    
    ul#tagcloud li { display:inline; font-size:70%; color:#ccc; background: none; padding: 0;}
    
    ul#tagcloud li a, ul#tagcloud li a:link { text-decoration:none; }
    
    ul#tagcloud li a:hover { text-decoration:underline; }
    
    ul#tagcloud li.t1 a { color:#797979; font-size: 120%; }
    
    ul#tagcloud li.t2 a { color:#6d6d6d; font-size: 160%; }
    
    ul#tagcloud li.t3 a { color:#616161; font-size: 190%; }
    
    ul#tagcloud li.t4 a { color:#555555; font-size: 210%; }
    
    ul#tagcloud li.t5 a { color:#484848; font-size: 230%; }
    
    ul#tagcloud li.t6 a { color:#3c3c3c; font-size: 250%; }
    
    ul#tagcloud li.t7 a { color:#303030; font-size: 270%; }
    
    ul#tagcloud li.t8 a { color:#242424; font-size: 290%; }
    
    ul#tagcloud li.t9 a { color:#181818; font-size: 310%; }
    
    ul#tagcloud li.t10 a { color:#0c0c0c; font-size: 330%; }

[转]代替visio画流程图的免费软件

Sunday, June 10th, 2007

说到画流程图,很多人第一反应是MS visio。对于公司来讲,这确为较好的选择。但对个人偶尔应用、对于较简单的流程图,恐怕支付1000元/标准版或4000元/专业版的价格,远非良策。此时,不妨试一下免费/开源软件的替代方案。

按软件的体积从小到大,依次介绍如下。

EVE v3.56|73kb|超小的神奇矢量绘图程序

eve

谁能想到一个73kb的exe,能制作出这样的效果呢?牡蛎是这样介绍EVE的:EVE:Embedded Vector Editor,可能是“世界上最小的矢量绘图软件”。菜单、对话框有些乱,可以把程序自己和绘制的图形捆绑到一个exe文件中发布,还可以创建一些交互效果。EVE Web Edition :EVE Web Edition则增加了输入/输出SVG矢量图的功能。

主页下载(V3.56 161K含教程)|用户手册FAQ

Diagram Designer V1.18|700kb|画流程图真方便

diagramdesignerot6.png

直接引用Zenzen的介绍吧:一个小巧免费的流程图绘制工具,Diagram Designer。速度飞快,无需安装。我想对大多数人来说,无论是画流程图,还是设计界面,还是做一些简单的演示,都够用了。我就想不通为什么一定要使用一些大型的破解软件呢,难道真的有那个必要吗?另外喜欢中文界面的朋友可以下载语言支持包。喜欢玩开源的朋友可以下一个稍微老一点的版本的 源码

以下软件特性由Zenzen译自官方网站原文

  • 自定义对象模板
  • 拼写检查
  • 导入/导出 WMF, EMF, BMP, JPEG, PNG, MNG, ICO, GIF 以及 PCX 格式
  • 幻灯片播放
  • 简单的数学公式
  • 可以解方程的高级计算器
  • 整合了MeeSoft Image Analyzer用来编辑位图以及其他扩展格式
  • 使用压缩格式,使得文件尺寸最小

Dia|10MB|跨平台的流程图绘制程序

dialogo.jpg

Dia(主页)是基于 GTK的图形(diagram)绘制程序,适用于Linux, Unix和Windows,以 GPL 许可发布。通俗的说,一个10MB量级的免费软件,代替visio基本没问题,被收入了“最好的300款免费软件”。也有些用户认为Dia很多地方不太好用,但无论如何,它是综合性能最高的免费解决方案。

其Windows版安装包在这里下载,目前为0.96版。这里有很多截屏。说到软件性质,Dia不是freeware,而是free software。想了解更多,可点击上文的GPL链接。

OpenOffice.org|100MB|开源办公套件中的画图功能

ooodrawnz4.png
如同MS Office的Word/Powerpoint中有画图功能一样,OpenOffice.org也具有画图功能,并且是以独立的OpenOffice.org Draw的形式。当然,不会有人因为画流程图而装全套OOo(下载包90MB,安装后170MB),而是有了OOo再用来画图(还可以输出pdf/ 数据库管理/电子表格/演示文档)。OOo是一个伟大的开源软件,给Linux和Windows下的用户,无须付费便可享受高质量办公软件的自由。它与 MS Office的文档兼容不错,当然也会有个别问题(名言:没有软件能100%兼容MS Office格式,MS自己也不能)。更详细的介绍见Tag:OpenOffice.org

没有两个软件完全相同,因此,也不可能用软件A完全替代B。所谓的替代,只是用另外一种软件做同样的事——但并非以完全同样的方式。因此, 用户要有一个适应和调整。xbeta的承认,MS的产品都强大易用,但花高价买一堆用不到的功能,对个人用户是很不合算的。并且,散布MS非公开格式的文 档(比如 doc,xls,ppt)也是不合适的,这就意味着强迫接收者要应用或兼容MS,这是不公平的。而建议用rtf/pdf/htm等开放格式。

或许,最好的替代是“免费软件”代替“收费软件”,或“付费习惯”代替“盗版习惯”。

来源

Apple iPhone 确认将于6月29日发布!

Monday, June 4th, 2007

iPhone Coming June 29

刚在 boy genius report 看到,说 Apple 的电视广告 100% 确认了 iPhone 的发布日期,也就是本月29日

这里看看 Apple 的电视广告吧

博物馆惊魂夜 Night at the Museum

Sunday, June 3rd, 2007

每到夜里,在埃及法老的书写板的作用下,博物馆里的展览品全部活了过来,一条喜欢玩丢棍子游戏的恐龙,喜欢掐架的美国西部牛仔和罗马将军,结果成了兄弟,还有钻木取火的原始人,美国第二十六任总统,匈奴的大王,美国南北战争的双方军队,哥伦布以及非洲的动物。时间和空间上相差甚远的事物汇集在了一起,这不是很有趣吗?

周末看看这种轻松的喜剧片还是很舒服的,这部电影里,没有特坏的大坏蛋,没有危机四伏,有的只是丰富的想像力。