在启动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原显示,重新显示,