0

我正在尝试使用以下方式将字符串发送到串行端口:

#define UART    0x03f8
...
#define UART_LSR_THRE 0x20
...
void UART_send(unsigned char *data){
     int i = 0, k = strlen(data);
     printk("UART_send invoked, data is %s and k is %d\n", data, k);
     while(i < k){
       while( !(inb(UART + UART_LSR_THRE)) ){
             printk("called\n");
             schedule();
       }
       if(i < k){
             outb(data[i++], (UART + UART_TX));
       }
    }
}

例如,在尝试编写 ABCDEF 时,有时它会跳过字母或多次打印它们。我的猜测是我没有正确验证 THRE 的状态,因为它不仅是错误的结果,while() 是否存在似乎没有做任何事情。有任何想法吗?

4

0 回答 0