问题比较C中的结构

时间:2015-03-25 22:23:38

标签: c struct codewarrior

我使用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。

我不能为我的生活弄清楚这里发生了什么。我可以通过测试说出我已经发现的东西:

  • 不会跳过if / else语句。它只是没有被评估。
  • 我检查了currentTemp->fehrenheitminTemp->fehrenheit的值。它们都等于我所期望的每个相应值在给定时间。
  • 它与作为浮点数的结构数据成员无关。如果我创建了Temp整数,字节,双精度数或浮点数的数据成员,我会遇到同样的问题。

我有一种感觉,这与我可能对指针或转换产生的某种基本误解有关。我也可能会遗漏一些非常基本的东西,但我不知道还能转向何处。这里的另一位工程师也无法弄明白。

0 个答案:

没有答案