我最近已经开始编程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);
非常感谢您的任何帮助。对不起,如果这些是初学者的问题。这些问题可能已经得到解答,但我没有遇到真正满足我理解的答案。
那么,在你的函数参数列表中,你不能像自由声明那样结合类型。即'uint8_t topPadState,bottomPadState'应该是'uint8_t topPadState,uint8_t bottomPadState'(假设你打算传递两个参数,尽管根据你的使用片段来判断,这不是一个安全的选择)。 – WhozCraig 2014-09-30 06:34:28
我想调用函数padStates,并让它返回包含两个状态的结构。每个状态都是1或0,因此输入uint_8。我以为我可以做一个单行声明,因为我'uint8_t topPadState,bottomPadState'? – 2014-09-30 13:55:30