我使用codewarrior创建了以下嵌入式C代码。我已修改它并切出很多来发布这个例子。三个文件:
MAIN.C:
#include <NormalState.h>
#include <Temperatures.h>
struct Temp *currentTemp = createTemp();
struct Temp *minTemp = createTemp();
struct Temp *maxTemp = createTemp();
minTemp->fehrenheit = 68;
maxTemp->fehrenheit = 72;
currentTemp->fehrenheit = 70;
int i = 0;
buffer = 3;
for(;;)
{
runNormalState();
if(i > 10000)
{
if(heat == FALSE)
{
currentTemp->fehrenheit--;
}
else
{
currentTemp->fehrenheit++;
}
i = 0;
}
i++;
}
Temperatures.h:
struct Temp{
float celcius;
float fehrenheit;
float kelvin;
};
struct Temp *createTemp()
{
return malloc(sizeof(struct Temp));
}
NormalState.h:
#include <Temperatures.h>
byte buffer;
bool heat, cool;
void runNormalState()
{
if(currentTemp->fehrenheit <= minTemp->fehrenheit - buffer)
{
heat = TRUE;
}
else if(currentTemp->fehrenheit >= maxTemp->fehrenheit + buffer)
{
cool = TRUE;
}
}
我写了一些测试,它们在70开始currentTemp->fehrenheit
并且大约每秒递减一次。 NormalState.h中的if / else语句检查是否需要打开热量。
buffer
为3. MinTemp->fehrenheit - buffer
为65.因此当currentTemp->fehrenheit
低于65时,热量应该等于TRUE。但是,价值永远不会改变。同样,如果我从if / else语句中删除buffer
minTemp->fehrenheit - buffer
,那么它只是minTemp->fehrenheit
,则总是将热量计算为TRUE。
我不能为我的生活弄清楚这里发生了什么。我可以通过测试说出我已经发现的东西:
currentTemp->fehrenheit
和minTemp->fehrenheit
的值。它们都等于我所期望的每个相应值在给定时间。Temp
整数,字节,双精度数或浮点数的数据成员,我会遇到同样的问题。我有一种感觉,这与我可能对指针或转换产生的某种基本误解有关。我也可能会遗漏一些非常基本的东西,但我不知道还能转向何处。这里的另一位工程师也无法弄明白。