标题:[原创] RockOS.TASK v0.3 版发布
取消只看楼主
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
回复 16楼 jig
恩,可以像 ucos 那样,将与硬件相关的代码独立出来,交给用户实现,方便移植,后面我会进一步改进。
2009-08-07 09:44
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
其实多任务涉及的问题包括,代码的重入,任务堆栈,任务切换,任务队列,任务调度等。
首先要明确的就是,一个任务就是一个任务函数,在自己的堆栈上的一次执行的过程。其中每个任务都是要有自己的堆栈的,这一点相当关键。任务有了自己的堆栈,才有了自己的私有数据。
任务切换需要做得就是保存当前任务运行的环境,即全部的处理器寄存器到当前任务的堆栈。然后切换堆栈到需要调度的任务堆栈上,再从新堆栈上恢复全部的处理器寄存器,也就是从堆栈上弹出全部寄存器。
而任务队列和任务调度,基本上就是纯算法的东西了。
2009-08-07 09:50
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
TC 中的 interrupt 类型的函数,会自动保存和恢复大部分的寄存器,大家可以分析 ttc -S 出来的汇编代码,因此在时钟中断处理程序中,几乎就不用手动的保存寄存器,只需要在函数返回之前切换一个 SS 和 SP 两个寄存器就可以了。
interuupt 触发时会导致 flag, cs, ip 压栈,进入 TC 的 interuupt 类型的函数,编译器会自动保存  ax, bx, cx, dx, es, ds, si, di, bp ,函数返回时会从堆栈上弹出这些寄存器。所以在时钟时钟中断中只要修改 SS 和 SP 就可以完成任务切换。

另外一个重要的地方,就是如何创建一个任务,创建一个任务,其实就需要对其堆栈进行初始化,包括压入初始的寄存器,返回地址等等。另外理解 tc 编译器在对 c 语言函数调用的处理,包括参数压栈和出栈的方式。当然还需要理解 tc 中的内存模式,对tc 的变量和函数的影响。总之就这样了。

[ 本帖最后由 RockCarry 于 2009-8-7 10:08 编辑 ]
2009-08-07 10:05
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
最近重新看了 RGE 的代码,发现错误和不足的地方太多了。毕竟已经有快一年没有维护这个了。
研究了一段多媒体之后,几乎没有进展,又打算回到 RGE 上来。接下来我会改进 RGE 的几个核心对象的架构,会更加的重视速度上的优化,dos 下多任务的实现也会加入,还有就是在多媒体研究上的一些成果

下一个版本的计划如下:
    加入 DOS 下多任务系统
    改进 BMP, BMPDRV, MEMDRV 等基础对象的架构
    优化 pagemem 读写的速度
    改进 draw2d 的架构,优化速度
    改进 blt 功能模块(以前的速度真是太慢了)
    采用新的架构编写 wavedev 模块
    加入 JPEGCodec(这个可是优化版本速度很快的哦)
    规范 PCXCodec,GIFCodec,JPEGCodec 的接口
    PCXCodec, GIFCodec 的优化
    mouse,keyboard 等输入设备模块也会采用新的架构重写

主要是想加入 JPEGCodec 和 DOS 的多任务系统,架构的调整和速度上的优化,然后就是设备驱动架构的改进。由于多任务系统的引入,使得我们几乎可以像 WinCE 那样处理中断。

长远的计划还是很多的,比如 DOS 下的共享库,GUI,MIDI,MPEG 等等,但是技术上都还不成熟。
也有朋友建议我将代码放到开源社区(比如 sourceforge),但是我个人没有这方面的经验,而且目前代码还不稳定,架构上还没有完全确定,所以暂时等等。

总之,我一开始就说了,我会一直继续的,并且开放全部代码,当然都是在 dos 平台。选用 dos 有很多原因。
关于 dos 和 tc 还要说一点,他们都只是工具而已,大家要有正确的态度和认识。其实我选用 tc 一方面是因为以前打下的基础,另外一个原因就是很多程序不方便发布 VC 版的代码。

我也并不是只会编写 dos 程序,只会用 TC,我对开发工具和平台没有偏见,毕竟工具只是工具。现在 RGE 中的一些模块,比如 GIF, JPEG 等其实都是在 VC 环境下编写调试完成,然后再移植到 TC 下。因为 windows 上的程序版本,限于种种原因,我不能直接公布代码。

有时我也觉得自己很无能,都工作好几年了,除了公司的一些项目,自己也没有什么强有力的作品,自己的业余时间也被琐碎的事情荒废。我很希望自己能够执著的追求着技术,但是不行了。很多事情还要做,总之自己尽力了,生活的快乐就可以了。

[ 本帖最后由 RockCarry 于 2009-8-18 16:27 编辑 ]
2009-08-18 16:25
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
另外一个计划就是模拟器,虚拟机,编译器,汇编相关的。
我的想法是先实现 6502 的模拟,然后是 NES,然后设计一个类似 BASIC 或 C 的编译器,当然还有 6502 的汇编器。
本来是打算自己设计一个指令集,处理器,编译器,然后搭建虚拟机,后来想想,自己也在研究 NES 的模拟器,干脆就利用 6502 就可以了。
2009-08-18 16:33
RockCarry
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:662
专家分:58
注 册:2005-8-5
得分:0 
更新到 0.3 版,公布全部源代码。
2009-08-19 16:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-280589-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.143240 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved