-1

我正在编写 AVR 微控制器,并在 WINAVR 套件的程序员记事本中。

我正在尝试分离我的代码,但是 sepeaet .c 文件我无法使用 AVR 预定义变量。(AVR 提供的变量指向某些 BIT)

例如,此代码将在我的 main.c 文件中运行。但不在另一个 random.c 文件中:

 UBRR0H = (unsigned char)(ubrr>>8);

它给出了错误:

random.c:6: error: 'UBRR0H' undeclared (first use in this function)

在我的 main.c 文件中,它只有以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <string.h>
#include <avr/interrupt.h>
#include "lcd.h"
#include "random.h"
4

3 回答 3

2

您必须包含在您的项目中,并在编译器命令行中使用选项avr/io.h指定 mcu 。gcc-mmcu=

于 2012-02-12T12:18:45.930 回答
1

如果您在任何编译单元(.c 文件)中使用“库”定义,则需要在该单元(文件)中包含正确的标头。我猜你在 random.c 文件中缺少#include 等。将它放在 main.c 中不会帮助编译器在编译 random.c 时。:)

(链接器是另一回事。)

找出定义在哪里的一种方法是简单地 grep 编译器和 libc 源(包含)目录并查找名称。这不一定会告诉你你要做什么才能得到它。我怀疑这是一个特定于芯片的寄存器名称,它出现在特定芯片的包含文件中,并在通过 io.h 时被加载,具体取决于编译器开关。

如果它在使用不同的芯片时丢失,请检查数据表以确保寄存器/外设存在于您的特定芯片中,并检查包含文件的确切拼写。可能存在差异。

于 2012-02-24T12:40:23.273 回答
1

您必须创建文件yours.h,如您放置的位置或您的函数定义和宏定义:

#define UBRR0H (unsigned char)(ubrr>>8);

int mine_function( char, char, int);

...

extern int global_variable;

不确定 UBRR0H 是宏变量还是外部变量

另外使用一些关于外部变量的东西和一些关于如何使用它们的文章。

而不是在你的每个.c文件中,你应该:

#include "yours.h"

如果你遇到麻烦,因为你最终会得到很多.h文件并且你会多次包含相同的东西(会导致错误,之前在那里定义过),那么很容易破解,在yours.h

#ifndef _H_YOURS_INCLUDED_
#define _H_YOURS_INCLUDED_ 1

// Your real content

#endif /* _H_YOURS_INCLUDED_ */
于 2012-02-12T11:47:06.963 回答