![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-14 22:44 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 实时微内核:最新图形模式多窗口演示 |
| 可打印版本 12,711 / 39 |
| 第1楼 taowentao | 发表于 2005-08-15 18:04 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
实时微内核:最新图形模式多窗口演示 rtCell ― 实时微内核(可用GCC 3.xx、visual C++ 及 watcom C++ 编译)
该内核借鉴了minix、windows NT、linux的部分原理,具有下列功能: 1.完全抢占的多任务实时微内核,任务调度、等待与唤醒操作均具有良好的确定性(与任务数目无关) 独立的内核栈,中断和系统调用均切换到内核栈执行; 2.256个优先级,254个可用优先级1~254, 0为最高优先级(系统保留),255为空闲优先级; 3.不同优先级可完全抢占,同优先级之间可按先进先出直到阻塞,或时间片轮转方式执行, 可在任务对象创建时选择其执行方式; 4.在一系统(定时器服务)任务中实现内核定时器,用于超时等待内核对象、周期性定时器、任 务延迟;此(定时器服务)任务的优先级由其客户任务的最高优先级驱动,随之动态改变,以 消除优先级隐式反转现象; 5.任何内核对象用一整数ID标识,而非指针,从而可避免用户任务空指针的副作用,内核对 象总数不超过32768(即32K); 6.提供任务(Task)、互斥信号量(Mutex)、计数信号量(Semaphore)、位域标志(Flag)、 周期性定时器(Timer)、优先级消息(Message)和环形队列消息(Ring buffer)内核对象; 7.互斥信号量同时提供优先级继承和优先级置顶协议,在创建时设置,且总是按优先级等待; 8.其它对象的等待方式有,优先级等待和先进先出等待(节省内存),在创建时设置; 9.内核数据的同步,除在任务切换,及任务和内核之间切换堆栈时暂时关中断外,其它地 方均以延迟过程调用机制(DPC)执行; 10.系统调用以陷阱指令(x86中int指令)实现,易于扩展到具有“内存保护”的分级模式; 11.在内核中提供一个简单的堆内存分配机制,用于内核对象的动态内存分配; 12.在内核中实现了中断的进出接口,支持中断嵌套,计数信号量(Semaphore)、位域标志(Flag)、 优先级消息(Message)和环形队列消息(Ring buffer)的唤醒操作可在中断中执行,用户处理中断 时只需编写标准的C函数,而不必关心有关中断底层处理的细节。 32位内核,在 windows 2000,mingwin 4.0(gcc 3.xx)和 visual C++ 5.0/6.0 下编译通过; 16位内核,在 windows 2000,Open watcom C/C++ 1.3 下编译通过。 rtCell_vc5_sources.rar ,rtCell_vc5.rar 是32位实时微内核rtCell32的库文件等源代码(串行通信、磁盘及fat16文件操作),请用visual C++ 5.0/6.0编译。 watcom_C16.rar 是16位实时微内核rtCell的DOS库文件等源代码(仅适用于open watcom c/c++); bochs.rar 中为 rtCell 在“虚拟机软件 bochs ”中的硬盘引导启动演示; 该演示中用 freedos boot loader 从 fat16 格式文件系统加载到 0x600 处执行。 16位rtCell编译后有 50 k 左右,包括静态分配的 4k 内核栈和4 k 有余的其它内核数据; 32位rtCell编译后有 87 k 左右,包括静态分配的 8k 内核栈和4 k 有余的其它内核数据。 32位 rtCell 在 P4 、1.7G、256 M 内存的“联想机器”上, 进行了连续10天的稳定性、可靠性测试。 E-mail:taowentao_twt@163.com 点击超连接下载文件: 附件 2: rtCell_vc5.rar (2005-12-16 05:38 PM, 127.07 K) http://www.cn-dos.net/forum/attachment.php?aid=623&checkid=69e88&download=1 附件 3: bochs.rar (2005-12-19 10:00 AM, 849.1 K) http://www.cn-dos.net/forum/attachment.php?aid=655&checkid=c4727&download=1 附件 4: rtCell_vc5_sources.rar (2005-12-19 10:04 AM, 127.07 K) http://www.cn-dos.net/forum/attachment.php?aid=656&checkid=69e88&download=1 下面是16位dos实模式鼠标(ps2普通串口鼠标)、键盘应用演示及其可用库文件; demo.exe 在纯dos下鼠标(ps2)、键盘应用演示,注意:在(win98/2k/xp的)dos窗口不能使用鼠标; KERNEL.SYS用于 free dos 的 free loader 加载启动的鼠标、键盘演示; rtCell16.lib 是实时微内核rtCell的16位库文件(仅适用于open watcom c/c++); rtPC_input.obj是鼠标(ps2)、键盘输入obj文件,进行相应的I/O操作,其源代码请到 FreeDOS-32 release 0.0.5下查阅; sys_demo.bat及EXEFLAT.EXE用于将demo.exe生成KERNEL.SYS,以便用于 free dos 的 free loader 加载启动。 真正的多任务、多(文本模式)窗口演示: 中断驱动的鼠标、键盘,事件驱动的多窗口,真正的多任务,完全抢占的实时微内核; 红色标题为活动窗口,蓝色标题为非活动窗口,非活动窗口可后台动态刷新; 其中一个窗口显示任务状态,另外两个窗口显示当前时间及“窗口”二字,桌面显示键盘输入; 可用鼠标移动、激活窗口、(窗口右下角)改变窗口大小。 “ctrl + z”键切换到任务状态窗口。 附件 1: qemu_0.8_domo.rar内是在虚拟机上的演示,解压缩,执行rtCell.bat后,鼠标点击窗口; 下载连接: http://www.cn-dos.net/forum/attachment.php?aid=807&checkid=972c0&download=1 附件 2: dos_demo.rar (demo.exe及demo_.exe)用于在纯dos(windows上无鼠标)下,用串行鼠标演示。 下载连接: http://www.cn-dos.net/forum/attachment.php?aid=854&checkid=12353&download=1 最新图形模式多窗口演示 giCell 真正的图形模式多窗口 - 全部源代码(C 语言)不到六千行,具有下列功能: 1. 完善而精巧的多视口裁剪和消隐处理,与实时微内核rtCell紧密结合; 2. 真正的事件(或消息)驱动的多窗口技术,且支持顶层窗口和透明窗口; 3. 当前支持Label、Edit、Botton、Slider和Checkbox控件,其中的Edit控件支持剪切、复制和粘贴; 4. 支持窗口的平移、缩放,和窗口系统按钮,及窗口和控件的过程回调; 5. 内存需求小(不到64K),窗口和控件所耗内存很小,因此实用性强,包括rtCell、鼠标、键盘及图形驱动,在DOS下也仅 100 多 K 字节。 演示方法:解压缩gui_Test.rar,在windows下(双击)执行gui_Test.bat, 或在纯dos下直接执行bc_gui.exe(在windows的dos窗口中无鼠标)。 注意:本演示中由于包含一个说明性位图而使得bc_gui.exe比较大。 下载地址:http://zhenlove.com.cn/cndos/fileup/files/gui_Test.rar [ Last edited by taowentao on 2006-10-5 at 22:24 ] |
|
| 第2楼 johnsonlam | 发表于 2005-08-17 10:37 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
|
taowentao 兄 :
有 沒 有 弄 好 的 boot disk ? 太 低 階 了 , 看 不 懂 ... 沒 有 程 序 怎 樣 測 試 ? 謝 謝 ! |
|
| 第3楼 johnsonlam | 发表于 2005-08-17 11:20 |
| 银牌会员 发帖 497 积分 1,410 来自 九龍,香港 | |
|
taowentao 兄 :
有 沒 有 弄 好 的 boot disk ? 太 低 階 了 , 看 不 懂 ... 沒 有 程 序 怎 樣 測 試 ? 謝 謝 ! |
|
| 第4楼 taowentao | 发表于 2005-08-22 12:12 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
文件太大 文件太大,不能上传;怎么压缩,文件大小都过兆.
你去"http://www.h7.dion.ne.jp/~qemu-win/"下载带freedos映象盘的模拟器,用我做的kernel.sys替换其中的kernel.sys即可,但只能做演示; 要加入自己的功能,必须自己编译,并用tools\下的exeflat重新处理,然后替换. 现在rtCell可以可用中断方式处理硬盘读写(比忙等待要高效,有的dos系统用忙等待处理硬盘读写),可以读取fat16文件系统,等我整理好了,就传过来. 将rtCell_img.rar和Qemu.rar解压缩到同一个文件夹中(不要包含任何子目录),双击(执行)rtCell.bat(执行x86虚拟机),可看到rtCell在虚拟机中的执行.其中一个任务在读取并显示rtCell.img根目录中的bochsrc.txt文件 [ Last edited by taowentao on 2005-8-23 at 16:10 ] |
|
| 第5楼 taowentao | 发表于 2005-08-23 16:12 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
rtCell在虚拟机中的执行 将rtCell_img.rar和Qemu.rar解压缩到同一个文件夹中(不要包含任何子目录),双击(执行)rtCell.bat(执行x86虚拟机),可看到rtCell在虚拟机中的执行.其中一个任务在读取并显示rtCell.img根目录中的bochsrc.txt文件
[ Last edited by taowentao on 2005-8-23 at 16:17 ] |
|
| 第6楼 taowentao | 发表于 2005-08-26 10:49 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
fat16根目录文件读写 rtDisk.c 用于磁盘读写,以中断方式执行;改变自"TINOS build 206",将其忙等待变为非忙等待,
将其中断的耗时部分操作放到任务中完成; rtFat16.C用于fat16根目录文件读写,改变自http://www.ifi.unizh.ch/ailab/embedded/multitaskers/embedpc.zip 将其bios中断调用变为 rtDisk.c 的磁盘读写; ********************************************** ***** 注意: 执行文件写操作有问题,尚未解决 **** ********************************************** rtKB\rtKB.C 用于键盘读操作,改变自"TINOS build 206",将其"键盘中断的耗时部分操作"放到任务中完成; 使用此三文件并不说明它们的使用价值,也不保证其可靠性;仅用于说明rtCell的用法,验证rtCell的性能,以考察rtCell的稳定性. cstrt086.asm 是本人对open watcom c/c++ 1.3 启动文件的修改,使程序的启动地址 cstart 变为 0000:0000,使程 序的重定位更容易,这样可用 EXEFLAT.EXE(仅用于 16位 dos 实模式) 生成可执行映象文件; sys_demo.bat 是一批处理文件,将 demo.exe 变为可由 freedos boot loader 从硬盘引导的KERNEL.SYS demo.exe 可用于dos实模式下运行; KERNEL.SYS 用于替换 freedos 的 KERNEL.SYS(可将freedos 的 KERNEL.SYS更名), 以实现 freedos boot loader 的硬盘引导; 分别按下键5,6时,显示5,6处二任务被分别删除, 分别按下键a,b,c, A,B, C时,显示5,6处二任务, 及rtDisk任务被分别挂起,恢复执行, 分别按下键t, T时,定时器中断被禁止,使能; osKeyBorad是根任务,启动后用于创建其它任务,同时做键盘处理; 详细信息参看源代码:MAIN_rrsh.c,可执行文件是demo.exe; ******************************************************* ***此二文件最好用虚拟机或模拟器执行,以免破坏硬盘数据*** ******************************************************* 中断设置函数做如下更改: typedef void _cdecl (* PISR)(void *); /* 设置中断处理过程: * pISRAddr 说明中断处理函数地址, * wdIndex 说明中断向量号, * ppISRArg 存放中断处理函数参数的指针(中断处理函数的参数是一指针,ppISRArg是指 * 针的指针,即*ppISRArg为中断处理函数参数),同时*ppISRArg返回旧中断处理函数地址; * 若中断处理函数无参数,而要*ppISRArg返回旧中断处理函数地址,应将ppISRArg指向一 * 指针,且令*ppISRArg = NULL; 若中断处理函数即无参数,又不要*ppISRArg返回旧中断处 * 理函数地址,则令ppISRArg = NULL即可. */ extern CWORD _cdecl SetVector(PISR pISRAddr, WORD wdIndex, void **ppISRArg); 总之, 此程序演示"微内核操作系统"的思想: 中断用于收集数据,任务用于处理数据;即可保证中断的响应能力,又 保证关键数据处理优先执行;从而有利于保证整个系统的实时性;当然, rtCell 本身是实时内核是保证实时性的基础. 那位朋友有问题,有新想法,或者发现错误,请联系:taowentao_twt@163.com 使用此演示,c:盘根目录下应有一 bochsrc.txt 文件,否则出错! [ Last edited by taowentao on 2005-8-26 at 10:57 ] |
|
| 第7楼 taowentao | 发表于 2005-08-28 10:41 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
关于fat16根目录文件读写 rtDisk.c 用于磁盘读写,以中断方式执行;源代码只有400余行;
rtFat16.C用于fat16根目录文件读写, 源代码只有620余行; 非常适合嵌入式系统的文件读写操作. |
|
| 第8楼 taowentao | 发表于 2005-08-28 10:59 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
为什么? 为什么? 为什么? 在 <<中國DOS聯盟論壇>> 里我看到很多国人高手,为什么没人愿意合作,共同开发一个国人自己的多任务dos系统?
就算仅仅作个启动盘也行啊 ?! 现在fat16根目录文件读写已基本可用,期待高手们加盟,将之完善! |
|
| 第9楼 taowentao | 发表于 2005-08-30 08:25 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
关于磁盘读写 rtDisk.c 用于磁盘读写;
它不调用任何bios中断; 而是基于微内核rtCell的功能,以中断方式执行,直接操作硬件端口; 完全脱离bios. rtCell_demo.rar 中包含此文件. [ Last edited by taowentao on 2005-8-30 at 08:26 ] |
|
| 第10楼 taowentao | 发表于 2005-08-31 09:34 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
关于磁盘及文件读写 若你觉得rtDisk.c 用于磁盘读写时速度比较慢,你可加入DMA操作,不过你要自己处理DMA中断等一系列操作.
另外,文件读写应防止多任务同时操作时破坏数据的一致性: 可加个保护锁;也可以客户/服务器模式执行文件读写,可带来极大的灵活性(如多用户读写权限分级等),但也带来了性能损失. |
|
| 第11楼 taowentao | 发表于 2005-09-10 10:37 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
有没有? 有没有那位朋友愿意合作,写一个(或改写一下)fat,ntfs文件读写等操作?可以基于server/client模式,也可直接的函数调用形式.
期待有兴趣者加盟合作!!! 谢谢!!! |
|
| 第12楼 taowentao | 发表于 2005-09-28 11:22 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
32位内核rtCell rtCell已经移植到32位保护模式,下面的硬盘映象文件可用。请用 qemu 模拟器运行。依然是用freedos boot loader加载。支持4G内存。
[ Last edited by taowentao on 2005-9-28 at 11:30 ] |
|
| 第13楼 taowentao | 发表于 2005-10-06 15:21 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
32位内核rtCell32的库文件 注意:前 5M(0~4M)内存已由实时微内核保留,请勿动用;
用户任务可自由分配使用 5M(5~4000M) 以后内存。 makefile、lk16_32.exe、make.bat、start16.sys、kernel.o、 mcCLib.h、compile.h、TypeDef.h 是编译脚本、连接工具及库文件,请勿更改; 编译(执行makefile)后执行make.bat,将生成的kernel.sys拷贝到根目录, 由freedos boot loader加载,即可进入32位实时微内核rtCell32。 void _cdecl rtShell(void); 是用于初始化用户任务的外壳任务, 用户务必提供此函数;此外壳任务的初始化优先级为1,且无参数。 而rtShell.c 是编译脚本makefile编译的唯一的用户文件,请在其中提供函数: void _cdecl rtShell(void); 以上文件在mingwin 4.0(gcc 3.23/3.42)下编译通过。 [ Last edited by taowentao on 2005-10-6 at 15:29 ] |
|
| 第14楼 taowentao | 发表于 2005-10-07 13:59 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
内核rtCell 16位的rtCell中Mutex的置顶协议中有bug,
32位的内核rtCell32中已经修复了此bug; 因此,请不要使用16位的rtCell中置顶协议的Mutex。 另外,32位的内核rtCell32的头文件有更改; |
|
| 第15楼 taowentao | 发表于 2005-10-08 15:31 |
| 高级用户 发帖 111 积分 739 来自 辽宁沈阳 | |
|
任务切换保存和恢复钩子函数 加入了任务切换保存和恢复钩子函数,可用于保存协处理器状态。附件中有虚拟演示程序和库文件。
[ Last edited by taowentao on 2005-10-8 at 15:36 ] |
|
| 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |