注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。
主要内容
RS232串行接口
课程中使用了PC机RS232接口进行输出,具体关于这部分的编程资料请见下方的【参考资料】。
RS232是一种早期PC机会提供的串行通信接口,其通过两根信号线:发送信号、接收信号,便能实现与外部的数据输入输出通信。
本课程仅仅是用来他做临时的调试使用,以便于将操作系统运行过程中的信息,能够输出到某个地方,方便及时查看。因此。具体的实现细节可忽略,直接将代码复制到你的工程中即可,没有必要搞得很清楚。大体的工作就两部分:写一系列寄存器初始化、查询设备不忙时发送数据。
从课程实现的效果来看,采用RS232接口后,使用log_printf打印的字符串信息,QEMU都能完整的显示在窗口中,并且能自动地对换行等字符进行转换处理显示。而如果此时不采用RS232而直接输出到屏幕上,则工作量会多很多,实现较为复杂。(有关屏幕上字符的显示,在后面的章节中会讲)
换行与回车
课程中提到了换行(\n)和回车(\r),这两个字符的区别总结如下:
- 换行(\n):将光标移到下一行,列号不变
- 回车(\n):将光标移到本行的开头
因此,如果需要将光标移到下一行开始,需要使用\r\n。
不过,不同的显示终端对于\n的解释不同。在windows中编程时,使用printf输出,其会将\n自动转换成\r\n,所以我们会发现printf(“abcd\nefg”)即能实现显示完abcd后,进入到下一行开头再显示efg。而在qemu窗口中,需要使用\r\n才能实现类似的效果。
参考资料
- osdev中关于rs232编程的相关资料:https://wiki.osdev.org/Serial_Ports