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