引用结构中的变量

时间:2014-09-30 06:30:09

标签: c avr atmel atmelstudio

我最近开始编程AVR微控制器,以此来提高我的C编程能力。现在我试图检查两个按钮的状态,我正在main.c文件的开头做。我将这些放入一个单独的C文件中,并尝试调用此函数。

我有两个问题:

第一个与头文件和.c文件有关。我已经阅读了几个如何编写头文件并链接它们的例子,但这对我来说似乎是违反直觉的。头文件调用与其对应的c文件中的函数,并且相应的c文件和主文件都包括头文件。头文件如何调用.c文件中的函数,但该文件必须包含头文件?

第二个问题是关于引用结构中的变量。我按照一个例子制作了一个结构,但我不确定如何在main.c文件中调用它。我的代码如下:

这是我的头文件:

//Check_Touch_Inputs.h

#ifndef Check_Touch_Inputs_H_
#define Check_Touch_Inputs_H_

int Check_Touch_Inputs(uint8_t topPadState, bottomPadState);

#endif

这是我对应的C档:

//Check_Touch_Inputs.c

#include <avr/io.h>
#include "Check_Touch_Inputs.h"

struct touchPads{
    uint8_t topPadState, bottomPadState;
}

struct touch    Pads padStates(){
    struct touchPads result;

    if (PINC & 1<<PC1)
    {
        result.topPadState = 1;
    }
    else
    {
        result.topPadState = 0;
    }

    if (PINC & 1<<PC3)
    {
        result.bottomPadState = 1;
    }
    else
    {
        result.bottomPadState = 0;
    }

    return result;
}

最后,这是我尝试在主文件中返回按钮状态。这是错误的,我知道并失败了:

    uint8_t topPadState = Check_Touch_Inputs(topPadState);
    uint8_t bottomPadState = Check_Touch_Inputs(bottomPadState);

非常感谢您的帮助。对不起,如果这些是初学者问题。这些问题可能已经得到解答,但我没有遇到真正满足我理解的答案。

1 个答案:

答案 0 :(得分:0)

首先,您认为.h和.c文件之间存在差异的概念是不正确的。

编写的程序i C由许多文本文件组成,这些文件单独编译为 object 文件。 对象文件由实现各个功能的代码和全局符号表组成。

为了链接到一个函数(符号),你必须拥有它的 prototype 。由于历史原因, prototypes 在.h文件中定义,可编译文本放在.c文件中。您通常在相应的.c文件中包含.h,以检查您的实现是否与您的原型匹配。

你的秒问题:你必须定义你的结构:

struct touchPads{ uint8_t topPadState, bottomPadState; }

<。>在.h文件中,以便在main中定义该类型的变量。