'Windows CE 6.0尝鲜 & 谣言'

最近讨论Windows CE 6.0的人开始多起来了,但是Windows CE 6最早也要07年才开始发售。微软在MEDC 2006会议上上发布CE6的消息,我命衰,本来打算去参加MEDC,结果被美帝国主义拒签了,所以没能第一时间掌握这些消息。当不成御林军,只好当民间侠士了。回忆回忆以前从各个渠道得到的一些资料(MS对合作伙伴的讲座,MS邀请到US去进行合作伙伴测试的工程师,道听途说,等等)。大概总结了一下有下面几点,还有一些是我自己的乱弹琴评论,说得不好不对不怕拍板砖,因为本来我就没有得到过官方资料,要怪就怪美帝国主义那个拒我签证的大光头,所以还得把这段圆滑的“AS IS”文字放上,把MS替换成我就好了:

废话少说,正文开始:

  1. 取消系统中最多32个进程,每个进程32MB虚拟内存的限制,据说现在可以支持32767个进程,而且每个进程有2G的用户可用空间。

这个可以说是Windows CE 6.0最具有爆炸性的改动了。以前在想别人介绍Windows CE操作系统的时候,总是说Windows CE是一个微内核的操作系统,很多操作系统特性都被放在用户态的exe里面实现,并且其驱动程序也是放在用户态的,等等等等云云云云,这与桌面Windows这种把所有东西都放在OS内核中的宏内核的体系结构操作系统完全不同。可是,现在呢 …

more ...

我写在程序员11期上的文章

《程序员》第11期有个专题,纪念C++诞生20周年,我为这个专题写了一篇文章,叫《C++在嵌入式系统中的运用》,虽然名字起得很大,但是篇幅有限,只能泛泛而谈。空而无物,贴在这里,供大家批评。(一幅图没了,看图的话,买杂志去吧。嘻嘻)

C++嵌入式系统中应用

何宗键

同济大学软件学院嵌入式系统研究中心

转换舞台

C++作为一种编程语言,从其诞生之日至今,已经在软件业的历史上扮演了至关重要的角色。它强大的语言功能和灵活的语言机制是无数程序员为之折腰。而C++中蕴含的OO,GP等编程思想,更是潜移默化的影响了软件的架构方法。从这个层面上讲,C++的影响已经不仅仅是一门编程语言这样简单。然而随着Internet的发展及其带来的B/S架构软件的兴起。新兴的Java/C#/VB.NET等基于虚拟机语言及Ruby/Groovy等动态语言作为后起之秀,凭借其独有的快速开发、简单易用等特性,开始逐渐挑战C++的地位,在企业计算领域占据了越来越重要的地位。抛开企业计算,我们转换舞台,来看一看C …

more ...

Windows CE下的错误报告

错误报告是Windows CE 5.0中添加的新功能,它是操作系统的一个可选组件。与我们熟悉的Windows XP的错误报告类似,在应用程序崩溃的时候,错误报告可以自动收集崩溃时的系统和应用程序的状态信息(通常叫做Dump File),并允许把收集的错误信息发送给微软或者OEM商,来更好的改善系统的可靠性。

图:错误报告的结构
用户可以在控制面板中通过错误报告控制面板插件来对错误报告系统进行配置。当有用户未捕捉的错误发生时,首先,错误报告生成模块可以捕捉到这个错误,然后通过错误报告生成模块生成dump文件,接着,通过错误报告驱动程序把错误报告保存为文件系统上的一个文件,最后,根据用户的选择,把错误报告发送到微软的服务器上。

more ...

Windows CE下的注册表

- 嵌入式

与桌面Windows一样,Windows CE也使用注册表(Registry)来保存应用程序、驱动程序和用户的设定以及其他一些配置信息。Windows CE注册表也采用树形结构来管理配置信息,由于Windows CE注册表的结构和功能与桌面Windows几乎一样,在这里就不详细介绍了,读者可以参考其它关于注册表的资料。
Windows CE支持四个根键,描述如下:
键名描述
HKEY_LOCAL_MACHINE硬件和驱动配置数据
HKEY_CURRENT_USER用户配置数据
HKEY_CLASSES_ROOTOLE和文件类型匹配配置数据
HKEY_USERS适用于所有用户的数据
由于嵌入式系统的特点,一些嵌入式设备是没有外存的。因此Windows CE的注册表提供了两种实现方式:基于RAM的注册表(RAM-Based Registry)和基于Hive的注册表(Hive-Based Registry)。我们可以选择在Windows CE中使用任何一种注册表,注册表类型对于用户和应用程序来说是透明的。
基于RAM的注册表
正如其名,基于RAM的注册表把整个注册表作为一个对象存储堆存放在系统的内存中。这意味着如果对系统进行冷启动或者系统断电,对注册表的所有改动都会丢失。
如果使用基于RAM的注册表,对注册表的读写访问操作会变得非常高效。因此基于RAM的注册表比较适用于没有外部存储,而且有电池保存内存数据(battery-backed RAM)的设备。如果有外存且经常冷启动的设备采用基于RAM的注册表,则需要在系统断电的时候对注册表进行保存,等系统再次启动时对保存的注册表进行还原。
Windows …

more ...

Windows CE下访问物理内存的方法

- 嵌入式

嵌入式设备与桌面PC的一个显著不同是它的应用程序中通常需要直接访问某一段物理内存,这在驱动程序中对物理内存的访问尤为重要,尤其是像ARM体系结构下,I/O端口也被映射成某一个物理内存地址。因此,与桌面版本Windows相比,Windows CE提供了相对简单的物理内存访问方式。无论是驱动程序还是应用程序都可以通过API访问某一段物理内存。
Windows CE的有些函数中需要用到物理内存结构体PHYSICAL_ADDRESS, Windows CE在ceddk.h中定义了PHYSICAL_ADDRESS,它其实是LARGE_INTEGER类型,其定义如下:
// in ceddk.h
typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
// in winnt.h
typedef union _LARGE_INTEGER{
struct{
DWORD LowPart;
LONG HighPart;
};
LONGLONG QuadPart;
} LARGE_INTEGER;
可见,Windows CE中用64个Bit来代表物理地址,对于大多数32位的CPU而言,只需要把它的HighPart设置为0就可以了。
如果要直接访问某一个地址的物理内存,Windows CE提供了VirtualAlloc()和VirtualCopy()函数,VirtualAlloc负责在虚拟内存空间内保留一段虚拟内存 …

more ...

拥抱嵌入式时代

This has been a great year moving towards the digital lifestyle.

I’d say it’s going even faster than we would have expected.

–Bill Gates

2005全球消费性电子产品博览会

我们在描述未来生活的科幻小说中经常可以看到这样的场景:

周末的早上,珍妮被放在枕边的手机放出的轻音乐从睡梦中唤醒。睡眼惺忪的她刚刚从床上坐起来,桌上的电脑已经自动开启,清晰的语音从电脑音响里面飘了出来,内容是今天的天气情况和珍妮所关心的新闻,消息。珍妮被其中一条动物园的优惠信息吸引了,她想利用今天的空闲去逛逛动物园,珍妮告诉电脑,订一张动物园的门票,电脑一切照办并使用珍妮的银行账户存款购买门票。

早饭过后,珍妮坐上去动物园的公交车,在车上,珍妮使用手机登录自己的电子信箱,发现有朋友的新邮件,珍妮口述邮件要回复的内容,手机帮助珍妮撰写邮件并回复。

动物园到了,动物园的门禁系统知道珍妮已经预购了门票 …

more ...

Windows CE下的Flat Virtual Address space

On 6/10/05, song titan wrote:

常看到书上这么说:Flat虚拟地址空间。加上上次聊到的,WINCE下进程里的私有数据保护。这个”平板式”的意思,我刚想了一下,是不是可以这么理解?

因为嵌入式的存储 介质有很多:RAM,ROM
,FLASH等,所以MMU把这些都映射到一个flat的虚拟地址空间上。这样不连续的内存就可以通过页表连续起来。所以称之为
flat

还有上次的你说如果选了Enable kernel
debug,就没有了slot的边界,进程的私有数据也就无法保护了。我记得在桌面版的WINDOWS下,是MMU来控制这种权限的读写的吧,那这里就是把这种权限机制解除掉了?

我觉得平板的意思就是所有的进程都共享一个地址空间吧。
Enable Full Kernel
Mode之后Slot之间的界限就解除了,就像所有的32个进程其实是一个进程一样,但是MMU的保护还存在。例如某段内存在进程A里面是只读的,那么所有的进程都可以去读这段内存。但是如果有进程去写这段内存,那么就会违例。

more ...

Windows CE的步进电机驱动终于搞定了!

今天虽然是周末,但是还是跑到了嘉定校区工作。头等大事就是搞步进电机的驱动。以前虽然只是理论上推导,应该可以写成功,但是由于缺乏硬件,始终没有动过手。不免心虚。这次终于,硬件设备,代码,人都有了,开始写。
代码并不复杂。一个感觉HHARM的BSP可真够烂的!几乎什么都不支持,居然Windows CE能在这个板子上跑起来,真是奇迹。把driver相对应的注册表放到project.reg里面,Driver居然Load不起来。又没有registry editor可以查看,我只好摸黑操作。后来,后来,居然work了。
按一下Button,看着开发板上的那个小电风扇转圈,“成就感油然而生”…

剩下的,就是为六月底的Windows CE培训会议作准备了。打开了“熟悉的”Microsoft Word。继续工作……

more ...


'从"超越"汽车故障诊断软件谈软件质量'

作完了,终于做完了!几个晚上忙碌到凌晨。有成果了。这是最终的截图:

本来想把这篇blog写成技术类文章,也谈谈软件架构阿,设计模式阿,重构阿,扩展性阿,双缓冲画图阿等等,但是,Coding结束之后,却没有心情再谈这些技术,一个是因为自我感觉水平的确还没高到可以蛊惑世人的程度,第二个是万一分析技术发现了更好的设计,担心自己不睡觉,又回去Coding。

这个程序基本上就是GDI画图,BitBlt, LineTo,CreateSolidBrush偶早就已经驾轻就熟了,所以从头到尾就没有遇到什么技术难题,但是画图根画图不一样,因为没有技术问题,所以想的更多的是Design上的东西。稍微在这个小程序中用了一些Pattern和OO的思想。有点感悟,或许这就是万老师说的,代码编得多了,才会想到模式,架构。

认识好多在软件公司里的同学,好多都说他们的软件烂,上次回嘉定,SAP中国研究院的同学说他们的某款软件BUG狂多云云,还有一位华为的工程师更直接,原话:“在中国电信跑的几千万的项目,代码写的都跟屎一样”。

或许进了软件公司,很多项目都是被进度和时间所束缚,内有老板,PM催,外有客户赶。在这种情况下,实现代码的功能就成了第一位的工作。至于优美的设计,良好的可扩展性,OO …

more ...