2012年(17)
分类: 虚拟化
2012-07-07 01:17:19
源代码节点构成一棵源代码节点树。描述对象的行为,状态等;main是根节点。
源代码描述文档JDMUF节点描述符的定义:由编译器据源代码描述文档生成的32位即是1字的机器指令码。文档中的所有行都是属性节点或属性标签行。通常是汇编指令或子程序。
在开发APO应用程序的过程中有一些重要的步骤:
*用A语言编写main()函数和相关的窗口描述文挡。
*创建菜单、对话框和其它资源并把它们放入资源窗口描述文挡。
*使用Unicode编译器中的编辑器来创建对话框等。
*用项目文件来编译并链接所有的A源程序和资源文件
APO需要一个main函数。这是应用程序开始执行和结束的地方。
main{ // 代码根节点,JDMUF根节点(进程)描述符由内核定义。
阻塞线程调度; // 编译器会自动替换该节点为内核类库中相应的宏代码。
线程入口表地址; // 线程接口
初始化函数; // 入口初始化等。
SNP对象通信线程; // 1号消息处理线程。
鼠标键盘消息处理线程; // 2号消息处理线程。
定时器消息处理线程; // 3号、如需要处理定时器消息则增加这一个线程。
中断消息处理线程; // 4号消息处理线程。如需要处理中断则增加这一个线程。
用户线程5; // 5号用户处理线程。如需要则增加,一切随意。
。。。。。。。。。
}
入口:线程位图地址在R2, 64个线程任务。线程入口在进程的初始化中实现。每个线程执行到完成后阻塞才运行下一个线程。
阻塞线程调度{
Mp1;
SS1(R0,R2,0X0040);// 搜索线程位图最高位为1的高优先级线程号送R0。
BTB1 Z, 内核入口; // 到达尾部结束跳,无线程任务将CPU交回给内核。
TBH(线程入口表地址,R0);// 查表跳转指令;运行相应线程。
JMP Mp1; // 继续,将所有需运行的线程执行一遍。
}
H{ // 变量定义表,相当于C的头文件。每行都是属性标签行。这是头文件描述文档。
线程位图地址 地址值;
。。。。。。。。。。
}
// 进程的切换由内核执行。使用Unicode编译器,可处理中文标称。
SNP对象通信线程{ // 只处理进程间的通信消息。
。。。。。。。。。。
}
// 适用于2,3,4号消息处理线程。
XX消息处理线程{
CALL(获取消息子程序);//从系统消息循环表中取有用的消息返回转换后的msg号。
TBH(感兴趣的消息入口表地址,msg); // 查表跳转指令;
感兴趣的消息入口表地址; // 消息接口
处理感兴趣的消息1; // JDMUF节点描述符为由编译器产生的1字的节点地址。
。。。。。。。。。
处理感兴趣的消息N; //
}
不要把消息处理想的太复杂,打个简单的比方:假如你是一位接线员,在你前面的桌上有很多部电话,那么你要做的是:有电话响时就接电话,没有电话响时就什么都不做。是不是很简单!其实消息处理也就是这个道理。
消息通知一个应用程序发生了一个事件。从技术上来讲,消息不仅仅是与应用程序相关,而且是与应用程序的某一特定窗口有关。与WINDOWS的所有的消息都被发往窗口不同,APO用另一方式。 APO 不使用消息队列;也不会将消息处理方法封装到具体的对象中。APO追求的是尽可能少的代码量。相当于WINDOWS操作系统功能的代码量估计不到4K字,而不会象WINDOWS的以GB为单位。4K字,4K行的代码也是非常恐怖的事啊。
我的个性喜欢简单,对于砖头级的书本通常只看开头与目录,想进一步了解的话多半是看网上的通俗介绍文章;之后靠想象。我的印象中单片机项目做过3次;VB,C#做过1次;没用过C。其它的那些对我来说都是很遥远的梦。多年前,对JAVA曾有过“3分钟激情”,但看到后面的一堆砖头,赶紧退缩。那要浪费多少看小说,玩游戏的时间啊?几年前的一个项目,请别人来用JAVA来编写,总算了结了一点心愿。说实在我看到那些鸡鸭肠子般的代码通常会想睡眠。同样,为使人脑能更清晰阅读的XML,又使我再次产生“3分钟激情”。而往后看,一个字”晕“。看看,那个MS已经把软件界搞到一塌糊涂了,就像精简机构一样越精越复杂。我只想看到简单的能理解的“软件”,就象看小说一样。