我正在尝试使用以下方式将字符串发送到串行端口:
#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() 是否存在似乎没有做任何事情。有任何想法吗?