微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

main.c无法识别keyboard.c中的变量

如何解决main.c无法识别keyboard.c中的变量

我一直试图在Atmel Studio中对atmega328p进行编程(这很有趣),但是当我尝试将键盘代码分成自己的c文件时,出现错误

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

键盘是在单独的文件中定义的,但我已经排除了以下几点:

  • 我没有忘记h文件(使用在 keypad.h 中定义的符号有效)
  • 编译器不会忽略keyboard.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;
// ...

Atmel Studio Solution Explorer

解决方法

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

// 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。