1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-01-30 19:52:13 +01:00

Statically allocating buffers in Wire library (issue #351).

This commit is contained in:
David A. Mellis 2010-09-16 00:50:43 +00:00
parent 27cfd22066
commit bf88db8484
3 changed files with 7 additions and 16 deletions

View File

@ -28,12 +28,12 @@ extern "C" {
// Initialize Class Variables ////////////////////////////////////////////////// // Initialize Class Variables //////////////////////////////////////////////////
uint8_t* TwoWire::rxBuffer = 0; uint8_t TwoWire::rxBuffer[BUFFER_LENGTH];
uint8_t TwoWire::rxBufferIndex = 0; uint8_t TwoWire::rxBufferIndex = 0;
uint8_t TwoWire::rxBufferLength = 0; uint8_t TwoWire::rxBufferLength = 0;
uint8_t TwoWire::txAddress = 0; uint8_t TwoWire::txAddress = 0;
uint8_t* TwoWire::txBuffer = 0; uint8_t TwoWire::txBuffer[BUFFER_LENGTH];
uint8_t TwoWire::txBufferIndex = 0; uint8_t TwoWire::txBufferIndex = 0;
uint8_t TwoWire::txBufferLength = 0; uint8_t TwoWire::txBufferLength = 0;
@ -51,13 +51,9 @@ TwoWire::TwoWire()
void TwoWire::begin(void) void TwoWire::begin(void)
{ {
// init buffer for reads
rxBuffer = (uint8_t*) calloc(BUFFER_LENGTH, sizeof(uint8_t));
rxBufferIndex = 0; rxBufferIndex = 0;
rxBufferLength = 0; rxBufferLength = 0;
// init buffer for writes
txBuffer = (uint8_t*) calloc(BUFFER_LENGTH, sizeof(uint8_t));
txBufferIndex = 0; txBufferIndex = 0;
txBufferLength = 0; txBufferLength = 0;

View File

@ -27,12 +27,12 @@
class TwoWire class TwoWire
{ {
private: private:
static uint8_t* rxBuffer; static uint8_t rxBuffer[];
static uint8_t rxBufferIndex; static uint8_t rxBufferIndex;
static uint8_t rxBufferLength; static uint8_t rxBufferLength;
static uint8_t txAddress; static uint8_t txAddress;
static uint8_t* txBuffer; static uint8_t txBuffer[];
static uint8_t txBufferIndex; static uint8_t txBufferIndex;
static uint8_t txBufferLength; static uint8_t txBufferLength;

View File

@ -40,15 +40,15 @@ static uint8_t twi_slarw;
static void (*twi_onSlaveTransmit)(void); static void (*twi_onSlaveTransmit)(void);
static void (*twi_onSlaveReceive)(uint8_t*, int); static void (*twi_onSlaveReceive)(uint8_t*, int);
static uint8_t* twi_masterBuffer; static uint8_t twi_masterBuffer[TWI_BUFFER_LENGTH];
static volatile uint8_t twi_masterBufferIndex; static volatile uint8_t twi_masterBufferIndex;
static uint8_t twi_masterBufferLength; static uint8_t twi_masterBufferLength;
static uint8_t* twi_txBuffer; static uint8_t twi_txBuffer[TWI_BUFFER_LENGTH];
static volatile uint8_t twi_txBufferIndex; static volatile uint8_t twi_txBufferIndex;
static volatile uint8_t twi_txBufferLength; static volatile uint8_t twi_txBufferLength;
static uint8_t* twi_rxBuffer; static uint8_t twi_rxBuffer[TWI_BUFFER_LENGTH];
static volatile uint8_t twi_rxBufferIndex; static volatile uint8_t twi_rxBufferIndex;
static volatile uint8_t twi_error; static volatile uint8_t twi_error;
@ -88,11 +88,6 @@ void twi_init(void)
// enable twi module, acks, and twi interrupt // enable twi module, acks, and twi interrupt
TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA); TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA);
// allocate buffers
twi_masterBuffer = (uint8_t*) calloc(TWI_BUFFER_LENGTH, sizeof(uint8_t));
twi_txBuffer = (uint8_t*) calloc(TWI_BUFFER_LENGTH, sizeof(uint8_t));
twi_rxBuffer = (uint8_t*) calloc(TWI_BUFFER_LENGTH, sizeof(uint8_t));
} }
/* /*