3

我正在为嵌入式软件课程做作业,但我遇到了最奇怪的问题。

使用下面的代码:

void decidePotato(float held)
{
    printf("Deciding Potato, held for %f seconds \n", held);
    if (held >= 1.99)
    {
        printf("Held for more than 1.99s \n", held);
        returnPotato();
    }
    printf("I evaluated the if statement above \n");

}

我得到以下输出:

Deciding Potato, held for 0.010000 seconds

我什至没有看到“我评估了上面的 if 语句”消息,所以程序以某种方式在评估该 if 语句时卡住了。它一直卡住,直到我重新编程电路板这怎么可能?

4

3 回答 3

2

I suggest to put a fflush() at the end of your function: even if with the new line you should force printing, it might be that your compiler has a "strange" implementation...

By the way: are you redirecting your output to a file? Because in that case this could apply.

Anyway, as Scotty Bauer noticed, you have to correct the printf within the if block: you probably also got a compiler warning for that.

Note from fflush manual:

If the stream argument is NULL, fflush() flushes all open output streams.

Normally you would do fflush(stdout).

于 2013-07-15T21:53:20.733 回答
0

如果你的程序真的卡住了,我怀疑你调用printf(). 然后您的程序尝试跳转到未定义的内存或取消引用垃圾指针并发生异常,并且它在默认异常处理程序中被锁定在无限循环中。 printf是嵌入式世界的奢侈品。您需要一个足够大的堆栈来处理它,尤其是您正在写入复杂的设备驱动程序或驱动程序占用了太多内存。

将堆栈大小更改为您可用的最大值,然后查看程序是否更改。

(在 printf() 中添加未使用的额外参数不是问题。这不是一个好主意,但它们只是被忽略了。

于 2013-07-15T22:24:10.740 回答
-1

不看returnPotato()是不可能知道的。可能是您在 returnPotato 并被阻塞在那里,并且 printf 没有刷新。

另请注意,您有

printf("Held for more than 1.99s \n", held);

而且您的格式字符串中没有 %f 可以放置。

于 2013-07-15T21:34:29.280 回答