需求
实际应用中经常出现需要存在无条件循环的命令,比如对于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;
}
}
}