我创建了以下头文件,其中包含要在我的代码中使用的AVR引脚的定义。
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED_DDR DDRB
#define LED0 PB0
我遇到两个我无法解决的失败。
1)我在这个头文件中有两个问题,如下所示:
2)我实现的USART.h文件中USART头文件中创建的函数也未被识别
我实际上不明白为什么会这样。因为代码显然已经实现了头文件。
#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