main.c 无法识别来自 keypad.c 的变量

main.c isn't recognising variables from keypad.c

我一直在尝试在 Atmel Studio 中编写 atmega328p(这很有趣),但是当我尝试将我的键盘代码分离到它自己的 c 文件中时,我遇到了错误。

Error       'keypad' undeclared (first use in this function)    invisible_alarm C:\Users\kenkr\Documents\Atmel Studio.0\invisible_alarm\invisible_alarm\main.c    39

键盘在单独的文件中定义,我排除了一些问题:

我怀疑构建顺序搞砸了,但我不确定在 Atmel Studio 中在哪里设置构建顺序,但这只是一个猜测。我在下面放了我的文件样本。唯一的错误来自 main.c 引用 keypad.c.

// main.c
#define F_CPU 16000000
#define NULL 0

#include <util/delay.h>
#include <avr/io.h>
#include "lcd.h"
#include "keypad.h"

void example() {
    int header_example = KEY_1; // From keypad.h, no error
    uint16_t c_example = keypad; // from keypad.c, error
}
// ...
// keypad.h
#ifndef _KEYPAD_H_
#define _KEYPAD_H_

#define KEY_1 0
#define KEY_4 1
// ...

#endif
// keypad.c
#include <avr/io.h>
#include <util/delay.h>
#include "keypad.h"
#define NULL 0

uint16_t keypad = 0x0000;
// ...

需要在头文件中声明变量:

// keypad.h
#ifndef _KEYPAD_H_
#define _KEYPAD_H_

#include <stdint.h> // commonly needed for uint16_t

#define KEY_1 0
#define KEY_4 1
// ...

extern uint16_t keypad;

#endif