orange's学习--第七章:键盘显示器处理程序总结

键盘显示器的处理过程分成了好几个模块,重要的2个缓冲区全局变量解耦了程序。

键盘扫描码缓冲区,让keyboard_handler将每次收到的扫描码放入这个缓冲区,然后建立一个新的任务专门用来解析它们并做相应处理。  PUBLIC void keyboard_handler(int irq)   把键盘扫描码不加区分的存储到了键盘扫描码缓冲区,PUBLIC void keyboard_read(TTY* p_tty)从键盘扫描码缓冲区解析了make code 和break code ,并且把键盘扫码码解析成了一个U32类型的整数来表示所有的按键情况,从而把拆分出来键盘中断处理程序和tty程序。

在task_tty ()中,通过循环来处理每一个TTY的读和写操作,读写操作全都放在了tty_do_read()和tty_do_write()两个函数中,这样就让task_tty ()很简洁,而且逻辑清晰。tty_do_read()读操作会调用keyboard_read(),tty_do_write()写操作会调用out_char (),它会将字符写入指定的CONSOLE。 为了让输入和输出分离,被keyboard_read(  )调用的in_process(  )不应该再直接回显字符,而应该将回显的任务交给TTY来完成,这样,我们就需要为每个TTY建立一块缓冲区,用以放置将被回显的字符。

tty缓冲区,解耦了tty的输入和输出,把输出拆分出来了单独的console.c。

orange's学习--第七章:键盘显示器处理程序总结_第1张图片

你可能感兴趣的:(orang's,于渊著)