AVR-GCC头文件中未声明的标识符

时间:2018-04-16 21:12:35

标签: c gcc avr

我创建了以下头文件,其中包含要在我的代码中使用的AVR引脚的定义。

#define LED_PORT        PORTB
#define LED_PIN         PINB
#define LED_DDR         DDRB

#define LED0            PB0

我遇到两个我无法解决的失败。

1)我在这个头文件中有两个问题,如下所示:

enter image description here

2)我实现的USART.h文件中USART头文件中创建的函数也未被识别

enter image description here

我实际上不明白为什么会这样。因为代码显然已经实现了头文件。

#ifndef F_CPU
#define F_CPU 1000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include "pinDefinition.h"
#include "USART.h"


int main(void) {
  char serialCharacter;
  LED_DDR = 0xff;
  initUSART();
  printString("Hello World!\r\n");

  while (1) {
    serialCharacter = receiveByte();
    transmitByte(serialCharacter);
    LED_PORT = serialCharacter;
  }

  return (0);
}

我使用的编译器是AVR-GCC。

此外,当我直接包含USART.c时,一切正常。我不明白为什么头文件不起作用。

我创建了一个运行编译器/链接器的脚本:

#!/bin/bash
avr-gcc -g -Os -mmcu=atmega328p -c code.c util.c USART.c
avr-gcc -g -mmcu=atmega328p -o code.elf code.o
avr-objcopy -j .text -j .data -O ihex code.elf code.hex
avr-size --format=avr --mcu=atmega328p code.elf

这会返回上述错误。

USART.h如下所示:

/* These are defined for convenience */
#define   USART_HAS_DATA   bit_is_set(UCSR0A, RXC0)
#define   USART_READY      bit_is_set(UCSR0A, UDRE0)

#include <stdint.h>

void initUSART(void);
void transmitByte(uint8_t data);
uint8_t receiveByte(void);
void printString(const char myString[]);
void readString(char myString[], uint8_t maxLength);
void printByte(uint8_t byte);
void printWord(uint16_t word);
void printBinaryByte(uint8_t byte);
char nibbleToHex(uint8_t nibble);
char nibbleToHexCharacter(uint8_t nibble);
void printHexByte(uint8_t byte);
uint8_t getNumber(void);

我真的需要一些帮助,因为我现在试图解决这个问题三天,并阅读了很多不同的来源(我正在用C语言将我的绳索连在一起所以请注意).C

0 个答案:

没有答案