解决一个两年前的 Bug

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

2 Responses to “解决一个两年前的 Bug”

  1. 珐琅说道:
    Unknown Unknown

    这两天武汉有点冷,注意身体。多喝点鸡汤,对感冒有好处。

  2. larry说道:
    Unknown Unknown

    谢谢关心。
    [emot]smile[/emot]只是一点点发烧,睡一晚就好了。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据