沧海一粟

驶向大海,乘风破浪

 

探究getch()

    首先理清楚键盘是如何工作的。键盘作为一个智能设备,键盘内有一片Intel 8048(或8049)单片机(处理器)对整个键盘上的字符键、功能键、控制键和组合键进行管理,可将其看做是一个功能简单的但是独立的计算机。

    我描述一下键盘的工作流程,单片机不断的扫描整个键盘,一旦有键被按下,单片机发送一个硬件中断请求给主机,并将扫描到的键的扫描码以串行方式发送给主机。主机响应键盘中断请求,调用INT 90H,将扫描码读入并转化为ascii码,存入缓冲区。

   

    推测getch()的工作原理,到一个指定的系统缓冲区读入一个ascii码,若为空值,则等待,否则返回读取到的ascii码值。

    由于不懂底层编程,我就写点伪码吧,表达一下思路。

  

int getch()
{
    int result = 0;
    while (true)//不断尝试获取一个非空标志
    {
        result = GetAsciiFromBuffer();//伪码
        if (0!=result)//若取到一个非空ascii值,立即返回其值

        {
            return result;
        }
    }
}

    关于探究getchar()和getch()的底层实现的东西就先告一段落吧。

    PS:以上所有言论都是个人的想法,若要使用,不一定经得起推敲。

posted on 2011-10-24 18:53 孺子牛 阅读(186) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

统计

常用链接

留言簿(1)

随笔分类

文章档案(4)

最新随笔

搜索

积分与排名

最新随笔

最新评论