2013-02-22 76 views
0
void NS16550_putc(NS16550_t com_port, char c) 
    { 
     while ((serial_in(&com_port->lsr) & UART_LSR_THRE) == 0); 
    //write to the THR 
     serial_out(c, &com_port->thr); 
     if (c == '\n') 
    //why do we require to call this watch dog reset 
     WATCHDOG_RESET(); 
    } 

char NS16550_getc(NS16550_t com_port) 
    { 
     while ((serial_in(&com_port->lsr) & UART_LSR_DR) == 0) {  
    #ifdef CONFIG_USB_TTY  
     extern void usbtty_poll(void);  
     usbtty_poll();  
    #endif 
    //why do we require to call this watch dog reset 
     WATCHDOG_RESET();  
    } 
    //return the rbr value 
     return serial_in(&com_port->rbr); 
    } 

回答

0

我不知道這個代碼的情況下。

但最有可能是因爲你不想讓你的操作持續這麼長時間,看門狗超時(並重置您的設備......)

例如,

while ((serial_in(&com_port->lsr) & UART_LSR_DR) == 0) {  
    #ifdef CONFIG_USB_TTY  
     extern void usbtty_poll(void);  
     usbtty_poll();  
    #endif 
    //why do we require to call this watch dog reset 
     WATCHDOG_RESET();  
    } 

在上面的代碼,你在這個while循環中反覆驗證一些條件,現在這個循環可能會運行很長時間,如果你沒有重置你的看門狗定時器(或者踢你的看門狗),那麼看門狗最終可能會超時。

+0

但while循環中的每次條件滿足設備將被重置? – rohit 2013-02-27 05:00:06