将C代码放在另一个文件中

时间:2012-02-12 11:33:55

标签: c avr avr-gcc

我正在编程AVR微控制器,以及WINAVR Suite中的程序员记事本。

我正在尝试分离我的代码,但是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"

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

int mine_function( char, char, int);

...

extern int global_variable;

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

另外,请使用extern variables内容和一些有关如何use them的文章。

而不是每个.c文件都应该:

#include "yours.h"

如果你遇到麻烦,因为你最终会得到很多.h个文件而且你会多次包含同样的东西(会导致错误,之前在那里定义过),那么很容易入侵{{{ 1}}:

yours.h

答案 2 :(得分:1)

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

(链接器是另一回事。)

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

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