U-boot中的倒计时可中断操作

来源:互联网 发布:iphone去广告软件 编辑:程序博客网 时间:2024/06/10 17:34

在启动u-boot后,启动内核前会有个倒计时,在倒计时到时后,u-boot就是自动加载内核到内存,进去启动内核;但是在倒计时到之前通过(键盘输入)串口终端输入可以终止记时操作,进入u-boot命令行状态。

今天在阅读TI OMAP平台 的在u-boot中的充电管理代码后再次发现使用了“倒计时可中断”操作,于是摘取了实现这种“倒计时可中断”的实现代码。方便日后移植使用。

void time_record(int time){int abort = 0;int chargedelay = time;printf("Hit any key to stop : %2d ", chargedelay);if (tstc()) {/* we got a key press*/(void) getc();  /* consume input*/}while ((chargedelay > 0) && (!abort)) {int i;--chargedelay;/* delay 100 * 10ms */for (i=0; !abort && i<100; ++i) {if (tstc()) {/* we got a key press*/abort  = 1;/* don't auto boot*/chargedelay = 0;/* no more delay*/(void) getc();  /* consume input*/break;}udelay (10000);}printf ("\b\b\b%2d ", chargedelay);}if (!abort){/*倒计时被中断,在下面执行相应操作*/}else{/*倒计时到时,在下面执行相应操作*/}}

参数time单位为秒。

tstc():是标准u-boot控制台函数,用于判断是否有输入。

getc():是标准u-boot控制台函数,用于读取输入。

printf("\b\b\b%2d ",chargedelay):是格式化控制台显示chargedelay,即删除chargedelay原显示,重新显示,

原创粉丝点击