文件名称:giCell zlg-gui
文件大小:153KB
文件格式:RAR
更新时间:2011-11-23 07:40:50
giCell-gui
rtCell 实时微内核-具有下列功能: 1. 完全抢占的实时微内核结构,独立的内核栈,中断和系统调用均切换到内核栈执行; 2. 256(64、32)个优先级,0为最高优先级(系统保留),256(64、32)为空闲优先级; 3. 不同优先级任务完全抢占,同优先级之间可按先进先出或时间片轮转方式执行; 4. 在一系统(定时器服务)任务中实现内核定时器,用于超时等待内核对象、周期性定 时器、任务延迟、一次定时(此时需定义一超时后执行的过程);此服务任务的优先 级由其客户任务的最高优先级驱动,随之动态改变,以消除隐式优先级反转现象; 5. 提供任务(Task)、互斥锁(Mutex)、信号量(Semaphore)、位域标志(Flag)、 定时器(Timer)、优先级消息(Message)和环形队列(Ring buffer)内核对象; 6. 任何内核对象用一整数ID标识,而非指针,从而可避免用户任务野指针的副作用,内 核对象总数不超过61440(即60K); 7. 互斥锁支持优先级继承和优先级置顶协议,在创建时设置该协议,且总按优先级等待, 优先级继承协议时仅支持同一互斥锁的嵌套调用,优先级置顶协议还可支持不同互斥 锁的多次嵌套调用; 8. 其它对象的等待方式有:优先级等待和先进先出(节省内存)等待,在创建时设置; 9. 内核数据的同步,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它 地方均以延迟过程调用(DPC)方式执行; 10. 任务对象支持异步过程调用(Window用语APC,相当于UNIX中的信号机制),从而可 引导任务异步的执行一个过程(前提是任务栈不小于1024字节),此过程将在该任务 下次被调度时执行; 11. 删除避免机制,拥有互斥锁的任务及处于占有状态的互斥锁均具有防止被删除的机制, 要删除拥有互斥锁的任务必须自行终止或调用任务终止函数,而要删除任一个互斥锁 则必须先使其处于空闲状态,即没有任何任务占有此互斥锁,否则禁止删除; 12. 对象命名机制,同类内核对象可用唯一的名称标识来获取其ID,达到引用目的。 13. 在内核中实现了中断的进出接口,因此用户中断处理只需写标准的C函数,而不必关 心中断底层处理的细节; 14. 系统调用以陷阱指令(x86中int指令)实现,易于扩展到“内存保护”的进程模式; 15. 在内核库之外提供了一个简单的堆内存分配机制,用于内核对象动态内存分配时调用; 16. 支持毫秒级定时器,内核定时器周期为一毫秒; 17. 支持 X387/287 硬件浮点协处理器的任务状态保护,被动方式的任务浮点状态切换(开 中断执行,由于使用了特权指令实现,因此只能在纯DOS实模式下或虚拟机X386/X387及 后续机型上执行,而无法在Windows的DOS窗口中运行,但可在DOS的全屏方式下运行)。 giCell 视口裁减及消隐处理引擎-功能如下: 1. 完善而精巧的多视口裁剪和消隐处理引擎,与微内核rtCell紧密结合; 2. 真正的事件(或消息)驱动的多窗口(视口)技术,支持顶层窗口和透明窗口的显示和 裁剪处理; 3. 当前支持Label、Edit、Botton、Slider、Listbox、TreeView、ListView、Scrollbar和 Checkbox控件,其中的Edit控件支持剪切、复制和粘贴(ctrl+x,ctrl+c,ctrl+v); 4. 类 Windos 窗口,支持平移、缩放,光标切换、窗口系统按钮,及窗口和控件的过程回调; 5. 基于透明视口(或窗口)的裁剪和消隐处理,可生成任何非矩形(多态)窗口,本示例 中的三角形窗口就是基于透明视口来实现的; 7. 支持图形内存设备(GDC),有效避免窗口重绘时闪烁,易于实现视频及动画处理; 8. ListView支持标题栏平移和缩放,Scrollbar支持鼠标滚轮驱动; 9. 内存需求小,窗口和控件的缺省状态均不使用GDC(而是采用直接屏技术),所耗内存小, 因此实用性强,包括rtCell调度器、鼠标、键盘及图形驱动的库文件在DOS下仅70余K。 关于可文件Engine.lib和mcOutLib.obj: 1. 考虑到DOS内存的限制,库文件Engine.lib中的rtCell内核仅支持32个任务优先级(因为 优先级队列太占用内存),这样即使在640K内存下,也可创建上数百个内核及GUI对象,可满 足一定规模的应用程序要求; 2. 库文件mcOutLib.obj是目录giCell\mcOSLib下文件的编译结果,用于处理任务的浮点协 处理器(硬件)状态切换,任务浮点数状态初始化,内存分配,信息显示等操作(主要用于 内核),用户也可自己编译giCell\mcOSLib目录下的文件,注意:Borland C/C++ 3.1可能无 法识别其中的某些浮点数操作指令; 3. 文件MAIN.C是对Engine.lib使用的具体实例,在Borland C/C++ 3.1中编译时必须打开X 387/287选项和C函数参数传递约定,此文件还对任何使用透明窗口来生成非矩形窗口,以及 如何使用GDC生成动画进行了演示; 4. 注意其中的一些执行顺序:浮点数操作不得放到回调函数中执行,而只能在其它任务中 执行(可从回调函数中向其它任务发送消息来实现),否则程序将进行无限循环; 5. 因为浮点协处理器的任务状态切换机制使用了特权指令,所生成的可执行文件只能在纯 DOS实模式下或虚拟机X386/X387及后续机型上执行,而无法在Windows的DOS窗口中运行; 6. 由MAIN.C所生成的可执行文件在AMD机器DOS实模式、X86虚拟机qemu-0.9.0-windows以及 Bochs-2.1.1下均执行良好,注意:生成的可执行文件依然是16位实模式。 压缩文件中包含窗口及其子控件的源代码,演示文件MAIN.C和DateTime.c,以及一个专用于 Borland C/C++ 3.1(GUI.DSK, GUI.PRJ)的工程文件。能力所限,不足之处,敬请指正! 请将其中的“BUG”发送到邮件:taowentao_twt@163.com, taowentao_twt@sohu.com,多谢!
【文件预览】:
GUI.DSK
MAIN.C
gui.PIF
giCell
----Wins()
--------Window.c(31KB)
--------Control.c(14KB)
--------Edit.c(2KB)
--------Clipbord.c(2KB)
--------PureEdit.c(13KB)
--------Slider.c(12KB)
--------include()
--------Checkbox.c(5KB)
--------Botton.c(4KB)
--------ListView.c(18KB)
--------Scrolbar.c(18KB)
--------TreeView.c(17KB)
--------ListObj.c(10KB)
--------Listbox.c(3KB)
--------Label.c(4KB)
--------Wins.c(4KB)
----Engine()
--------Type32.h(4KB)
--------CType.h(2KB)
--------mcOutlib.obj(2KB)
--------mcCLib.H(30KB)
--------GRAPHICS.LIB(68KB)
--------mcOutLib.h(2KB)
--------Type16.h(4KB)
--------Engine.h(27KB)
--------Engine.lib(78KB)
--------Config.h(2KB)
--------cl32.h(1KB)
--------cl16.h(2KB)
--------README.TXT(5KB)
--------CCompile.h(2KB)
----mcOSLib()
--------mcOutMM.h(2KB)
--------mcOutMM.c(9KB)
--------mcOutLib.c(4KB)
GUI.PRJ
DateTime.c
mtName.c
README.TXT