[英]Referencing variables in a structure
最近,我開始對AVR微控制器進行編程,以提高我的C編程能力。 現在,我正在嘗試檢查兩個按鈕的狀態,這是在main.c文件開頭執行的操作。 我將它們放在單獨的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);
非常感謝您的幫助。 抱歉,這些是初學者的問題。 這些問題可能已經回答了,但是我沒有遇到真正令我滿意的答案。
首先,您認為.h和.c文件之間存在差異的想法是不正確的。
用C編寫的程序由許多文本文件組成,這些文本文件分別編譯為目標文件。 目標文件由實現單獨功能的代碼和全局符號表組成。
為了鏈接到一個函數(符號),您必須擁有它的prototype 。 出於歷史原因, 原型在.h文件中定義,而可編譯的文本位於.c文件中。 通常,您在相應的.c文件中包含.h,以檢查您的實現與原型是否匹配。
您的秒數問題:您將必須定義結構:
struct touchPads{ uint8_t topPadState, bottomPadState; }
在.h文件中,以便在main中定義該類型的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.