uboot-cmd按鍵退出

迷霧綠洲發表於2017-01-25

需求

實際應用中經常出現需要存在無條件迴圈的命令,比如對於flash eeprom等儲存器的可靠性測試,這種測試往往是執行命令如果正確就一直進行讀寫和比對,指導鍵盤輸出Ctrl+C再退出。
由於uboot單執行緒的,執行的命令如果自己沒有退出就會一直在無條件迴圈裡面一直執行,這樣就出現了對於存在無條件迴圈的命令需要接受鍵盤輸入的退出命令。

實現

存在無條件迴圈的cmd 中一般是這樣的:

int do_xxxx(cmd_tbl_t *cmdtp,int flag ,int argc,char *argv[]){
xxxxx
    unsigned data_in,data_out;
    unsigned address;
    while(1){
        for(int i;i<1000;i++){
            write_reg(address,data_in);
            data_out = read_reg(address);
            if(data_in  !=data_out)
                break;
        }
    }
}

這樣就明白如果進入這個cmd中如果資料比對一直正確就不能退出,但是這樣也就無法進入其他命令。
這裡可以通過呼叫series的介面進行鍵盤輸入檢測。

int do_xxxx(cmd_tbl_t *cmdtp,int flag ,int argc,char *argv[]){
xxxxx
    unsigned data_in,data_out;
    unsigned address;
    while(1){
        for(int i;i<1000;i++){
    if(serial_tstc()){//檢測串列埠裡面是否有輸入
    serial_getc();//獲取輸入,可以不要的,有輸入就退出,或者檢測輸入時ctrl+c 再退出
    break;
    }
                write_reg(address,data_in);
            data_out = read_reg(address);
            if(data_in  !=data_out)
                break;
        }
    }
}

相關文章