我正在编程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"
答案 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时被加载,具体取决于编译器开关。
如果在使用其他芯片时丢失,请检查数据表以确保您的特定芯片中存在寄存器/外设,并检查包含文件的确切拼写。可能存在差异。