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