首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相同的字符正在无限循环中显示。

相同的字符正在无限循环中显示。
EN

Stack Overflow用户
提问于 2017-10-06 15:13:08
回答 1查看 268关注 0票数 1

我正在学习这篇教程:

http://wiki.osdev.org/Keyboard

Bones

我正在尝试增加键盘支持,但是如果我按一个字符(例如'A' ),程序会一直显示数千个'A',直到我按下另一个键--例如‘1’(它也会显示数千个'1',直到我按下另一个键,等等)。我想一个一个地放置字符,我的意思是,如果'A'一旦显示一次就按下,它仍然允许我添加另一个字符。

代码语言:javascript
复制
//Places single char onto the screen
void term_putc(char c);


//Provides the scancode from kb controller
char getScancode(){
char c=0;
do {
if(inb(0x60) != c)
{
c=inb(0x60);
if(c>0)
return c;
}
}while(1);}

//transfroms scancodes to chars
char getchar();

//shows the character on the screen
void kb_print(){ 
char chara = getchar(); // Pressed key value
term_putc(chara);
}

现在我在呼唤主要功能

代码语言:javascript
复制
void kernel_main(){
term_init();

while(1){
    kb_print();
}
}

整个代码:

代码语言:javascript
复制
https://pastebin.com/CMNvZN3P

谢谢你的回答!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-08 18:34:14

我想我找到了第二好的解决方案。我使用了这个功能:

代码语言:javascript
复制
// Sends a 8/16/32-bit value on a I/O location
static inline void outb(uint16_t port, uint8_t val){
  asm volatile ( "outb %0, %1" : : "a"(val), "Nd"(port) );

安放

代码语言:javascript
复制
outb(0x60, 0x0); 

在……里面

代码语言:javascript
复制
char getScancode(){

  char c=0;
  outb(0x60, 0x0);
  do{
    if(inb(0x60) != c){
      c=inb(0x60);
      if(c>0)
      return c;
    }
  }while(1);
}

由于某些原因,端口0x60在按键后不为空。(如果应该的话)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46608895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档