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
键盘在单独的文件中定义,我排除了一些问题:
- 我没有忘记 h 文件(使用 keypad.h 中定义的符号有效)
- 编译器没有忽略 keypad.c(keypad.c 中的错误出现在编译输出中)
- 我没有忘记将 .c/.h 文件添加到项目中(它们出现在解决方案资源管理器中)
我怀疑构建顺序搞砸了,但我不确定在 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
我一直在尝试在 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
键盘在单独的文件中定义,我排除了一些问题:
- 我没有忘记 h 文件(使用 keypad.h 中定义的符号有效)
- 编译器没有忽略 keypad.c(keypad.c 中的错误出现在编译输出中)
- 我没有忘记将 .c/.h 文件添加到项目中(它们出现在解决方案资源管理器中)
我怀疑构建顺序搞砸了,但我不确定在 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