解决一个两年前的 Bug
现在好像整天都在找 Bug。。。 主要是因为目前的工作基本是把以前我在 Lingix 中写的代码移植到 ANOS 中来。 所以今天就解决一个那时遗留下来的 Bug 当时的一个 ??? 注释: Lingix/driver/keyboard.c 的 kbd_getkeyqueue() 函数。 究其原因,是因为编译时使用了优化,一般优化和 inline 内嵌函数优化一起造成的。 而让优化器做出错误优化的原因是 keyboard.c 是中断服务程序。 中断服务程序中使用的变量会被随时(因为中断触发)而改变值。 而优化器认为这些值在已知程序段不会改变,直接优化掉了一些比较跳转操作。 这些关键的比较跳转没有了后,形成了一个死循环。 要解决这个问题,就应该使用 C 关键字 volatile 来声明这些变量,告诉编译器(优化器)这些变量会因为外部因素(中断调用时)而改变,对其优化有限制。 这样,优化器就不会优化掉那些比较跳转,而是老老实实的一一执行。 死循环也就不会产生。Bug 也随之而去。。。