移植过程中,我又在autoboot中出现问题
if (timeout > 0)
{
printf ("\nPress any key to stop auto-boot...\n");
/* Loop looking for a char, or timeout after specified seconds */
autoBootTime = tickGet () + sysClkRateGet () * timeout;
timeMarker = tickGet () + sysClkRateGet ();
timeLeft = timeout;
printf ("%2d\n", timeLeft);/*该处设为位置1*/
while ((tickGet () < autoBootTime) && (bytesRead == 0))
{
(void) ioctl (consoleFd, FIONREAD, (int) &bytesRead);
/*printf ("%d\n", tickGet ());*//*该处设为位置2,是我自己加的一句*/
if (tickGet () == timeMarker)/*该处设为位置3*/
{
timeMarker = tickGet () + sysClkRateGet ();
printf ("%2d\r left", --timeLeft);
}
}
}
现象是假如位置2的程序被注释掉的话,程序只打印出位置1的语句,此时timeleft=7,位置3的判断似乎永远不成立,程序死掉;假如位置2的打印语句不被注释,程序却可以正常运行,一直到Waiting for Target Server connection...。很奇怪的问题,我是个新手,就我的理解在没有我自己加的那句打印tickGet 语句时,tickGet 值不会变化,也就是进不去位置3判断语句,而加了打印语句,tickGet 值却变化了。而似乎tickGet 只跟系统时钟有关,跟打印没关系阿,求教各位大虾,我的程序可能是哪里出问题了,谢谢!