次を使用してシリアルポートに文字列を送信しようとしています:
#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() が存在するかどうかが何もしていないように見えるからです。何か案は?