关于COM教学的一些想法

有时候我一直就在想,COM相关的技术我们整天都在用(不用怀疑,Windows就是COM插起来的,VB6,ASP,JScript等下面都是COM),但是很多人都觉得COM难学,我觉得是不是对COM的教学走了歪路了。C++有C++的对象模型,COM有COM的对象模型,.net 和java都有自己的对象模型(当然.net跟java的对象模型对用程序员来说是透明的,MS跟sun不需要也不想让程序员了解)。只是因为COM的对象模型的部分特征看起来跟C++的对象模型比较相似,所以大多数教材都在用C++讲述COM的原理,(《COM本质论》,《COM技术内幕》是“罪魁祸首”),原理固然挺重要,但是这样一来搞得COM的起点相对很高,一定要深入理解C++的内部机制和对象模型才可以看得懂那些书写的是什么意思,而且看懂了之后,让自己动手写个能用的COM组件,还是很多人写不出来。

我就想对COM的认识是不是也可以从感性到理性,就像我们不懂得进城线程,虚存,MMU,调度算法,一样用Windows操作系统用的也挺好。不懂得POP3,SMTP协议,整天也在网上发邮件一样,可不可以讲COM不从C++将起,用vb6,用ATL,甚至用当年的Visual J++都可以先写几个COM先用起来,或者就干脆用VB用人家写的COM …

more ...

Windows CE下的网络体系结构

今天画了一幅图,是Windows CE下的网络体系结构图。其实图里面的有些东西以前没怎么接触过,例如blue tooth,贴出来,还请高手批评指正。


图:错误报告的结构
用户可以在控制面板中通过错误报告控制面板插件来对错误报告系统进行配置。当有用户未捕捉的错误发生时,首先,错误报告生成模块可以捕捉到这个错误,然后通过错误报告生成模块生成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 ...

同济微软2005 Windows Embedded教学研讨会感想

6月25日和26日,由我校软件学院与微软亚洲研究院联合举办的2005微软嵌入式系统教学研讨会,在我校成功举行。(此处略去数百字,原文,同济大学网站:http://www.tongji.edu.cn/news/20050627162954.htm

从二月延期到四月,从四月延期到六月,终于,这个研讨会结束了。终于可以长长的松一口气,压在胸口半年的一块石头也可以落地了。回想一下,还是感慨良多。

最早知道这个会议是在04年年底。万老师告诉我微软有个嵌入式的教学研讨,张亚勤等MS的高层也会到场。让我在这个研讨会上对《Windows CE嵌入式系统》这门课程的教学方法,教学内容等作一个经验介绍。介绍的对象是全国顶尖高效的老师。

后来一个寒假都战战兢兢的在想PPT该怎么做,内容该怎么讲。开学之后,听到的第一个消息是会议延期了,今年3月左右,又听到消息,会议延期到6月底了。而且张亚勤博士因为有事,估计不会出席了。随着会议日期一天天临近,一些实质性的筹备开始做起来了。我的任务又加了两个“动手实验”,要教老师动手做一些Windows CE下的应用开发,内核定制等实验。并且还负责做了一个培训相关的网站(虽然都是静态HTML,但是也体会到了一些非技术的问题 …

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 ...

《自然辩证法》与软件工程

  • 程序员
  • 软件

当年《电子游戏软件》的“电刑室手记”上有这么一篇小短文:
某日上政治课,老师讲量变,质变,全班人迟迟不能理解,某一玩友徐徐曰:“量变者,升段也,质变者,转职也”。全班顿悟。且欲撰一奇文,题曰《马克思主义与RPG》。

这个段子后来大概因为是涉及政治问题,没有收录到“电刑室手记”完整版本里,但是电子游戏里面的升段和转职的确符合哲学里面对量变与质变规律的描述。看来哲学规律的普遍性和对具体科学(电子游戏也算是科学吧,否则国家863项目怎么投钱开发网络游戏引擎呢?)的指导意义真是非同小可。

今天刚刚考完期末考试,最后一门是《自然辩证法》,起初以为这门课跟毛思邓论一样,属于考记忆力背书的的东西,后来在这半个月疯狂的背书过程中,发现还真是如课本所说的自然辩证法“有助于提高理论思维能力和科技实践能力,更好的参与现代化建设”。书中对自然观,科学技术方法论和科学技术观的一些描述,还真是与程序员日常接触的东西有密切的关系,(不知道算不算得上模式),摘录一些如下:

  • 自然辩证法的层次观:

层次表征了系统内部结构的不同等级和水平,揭示了系统之间的纵向和垂直的联系。

层次的特点:低层次系统对高层次系统有构成性关系,低层次系统之间存在相互作用。

层次结合能递减规律 …

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 ...

MSN China?

很早就听MS的上海“美思恩”公司的“内部人士”说,在做一个“很大”的东西,还死活不肯透露内容。今天,这个东西终于面世了。www.msn.com.cn…总体感觉,失望,太失望了,想写些东西骂一下,结果google了一下,发现网上的口水已经到处都是了,就没必要再多费口舌了,转了一篇,大概也就是我想说的,还有几个同学要到MSN去实习,不知道会做些什么啊。。。

传说中的MSN中国终于揭开了面纱,首页罗列了一堆互不相干的栏目:资讯与娱乐、互动社区、财经频道、汽车频道、数码娱乐、购物频道、游戏频道、图铃下载、英语课堂,完全看不出来它是做给谁看的。就这么个大杂烩,首页左下角还有个“将MSN设定为我的主页”的链接,自我感觉还挺良好的。

首页的版式是按照去年改版前的MSN英文版首页做的,而不是采用现在的符合W3C标准的版式,Firefox下看起来惨不忍睹。另外,颇受好评的My MSN不见了。如果不是左上角也有个蝴蝶标志 …

more ...