为ATMEL328创建c库

时间:2016-09-28 08:30:13

标签: c static-libraries avr atmega atmel

我正在尝试在C中创建一个用于ATMEL 328pu的库。我已经在C中创建了源文件和头文件,但是当我尝试编译库时,它就会松开。我想我需要另一个包含类型的AVR库:

  • TWDR
  • TWCR

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,以便编译器了解这些功能?我怎么做到这一点,是否像我想要包括另一个图书馆一样?

1 个答案:

答案 0 :(得分:1)

您无法引用未声明的标识符,这使得编译器无法弄清楚您的意思。

您应该添加

#include <avr/io.h>

到您图书馆的源代码。