第五步:进一步完善域结构并根据域结构重新编写键盘驱动

    此次,对域结构进行了进一步完善,除了“子域”的概念没有出来外,域结构的最基本特性已经展现出来了。下面就对“域”的一些特点进行一下简单总结。然后利用“域”来重新实现键盘驱动程序。
一个域,包含以下几个基本要素:
    1.生命值
    2.(主动)动作函数      //action 函数
    3.(被动)动作函数      //on 事件(函数)
    4.子域                    //未实现

域结构的操作(相当于域结构的系统调用函数):
    1.运行域结构             //yu.c 中的run()函数
       (1)执行动作双向循环链表中的一个动作
       (2)执行.(被动)动作函数(on事件)列表里的所有函数
       (3)指向下一个(主动)动作
    2.加载(主动)动作函数  //向动作双向循环链表添加一个动作,见yu.c 中的AddAction(struct action_s *newAction)函数
    3.移除(主动)动作函数  //从动作双向循环链表移除一个动作,见yu.c 中的DelAction(struct action_s *delAction)函数
    4.注册一个on 事件     //可重复性的向on事件列表添加函数(p.s:(主动)动作函数具有唯一性)

域结构运行特点:
    动作周期:执行一遍run()函数,形成一个动作周期,在这个过程里,只有一个(主动)动作和以及执行此周期前的所有on 事件被执行,在此过程中,向on事件列表添加的函数,会在下一个动作周期执行。
    域周期:动作双向循环链表中所有的(主动)动作都被执行了一遍,形成一个域周期,在一个域周期内一个(主动)动作最多执行一遍,若在一个域周期内添加了新的(主动)动作,将会在周期结束时,或者说下各个域周期开始时被执行(若没有在此域周期内又被移除掉的话)。

    之所以要花费精力来将“域”的情况进行如上总结,是因为我以后将会完全利用域结构来实现这个操作系统,若不理解域的特性,就无法理解程序的内在逻辑。

    此次实现键盘驱动,我将键盘的字符输入功能和键盘作为控制器的控制功能分离开来,利用域结构的结构特点分别实现。主要实现的是将所有可显示字符的提取部分,控制部分,根据当前需要简单实现了几个。其他的控制功能,可以随时随意的添加,而不会对以实现部分有什么影响。

为了便于理解,先使用“域语言”伪代码描述一遍:

 
   

    除了键盘驱动程序以外,此次,还对显示器(视频)的端口进行了简单的操控,实现上下移动显示区域,以防止屏幕显示超出时,看不到新新的显示内容。
在下一步里,将进一步完善它,并争取实现一个简单的tty。

    下面是此次新添加或有过修改的代码。

    在print.c中添加了一个换行函数,函数代码如下

 

code:kernel.c(改)

 

code:yu.h(改)

 

code:yu.c(改)

 

code:keyboard.h(改)

 

code:keyboard.c(改)

 

code:console.h(新)

 

code:console.c(新)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值