我正在尝试在C中创建一个用于ATMEL 328pu的库。我已经在C中创建了源文件和头文件,但是当我尝试编译库时,它就会松开。我想我需要另一个包含类型的AVR库:
ATMEGA328中的i2c寄存器是哪一个。可以在下面看到错误消息的缩短版本,然后是.cpp文件中错误消息引用的部分。
错误讯息:
构建:在my_i2c中调试(编译器:GNU GCC编译器) Code_blocks / my_i2c / my_i2c / my_i2c.cpp | 39 |错误:使用未声明的标识符' TWCR' | 构建失败:19个错误,0个警告(0分钟,0秒(秒))
从.cpp文件中提取:
#include "my_i2c.h"
/////////////////////WRITE BIT////////////////////
void my_i2c :: i2cWriteBit (uint8_t i2cAdd, uint8_t i2cReg, uint8_t i2cBit, bool i2cBool) {
uint8_t writeBuff;
writeBuff = i2cRead(i2cAdd, i2cReg); //read uint8_t
i2cBool == true ? writeBuff |= 1 << i2cBit : writeBuff &= ~(1 << i2cBit);
i2cWrite (i2cAdd, i2cReg, writeBuff);
}
/////////////////////WRITE uint8_t////////////////////
void my_i2c :: i2cWrite (uint8_t i2cAdd, uint8_t i2cReg, uint8_t i2cData) {
/////START CONDITION////
TWCR = 0b10100100; //(TWINT)(TWSTA)(TWEN) - Set START condition
while (!(TWCR & 0b10000000)) { //Wait for TWI to set TWINT
}
我是否需要定义TWCR和TWDR,以便编译器了解这些功能?我怎么做到这一点,是否像我想要包括另一个图书馆一样?
答案 0 :(得分:1)
您无法引用未声明的标识符,这使得编译器无法弄清楚您的意思。
您应该添加
#include <avr/io.h>
到您图书馆的源代码。