From bf88db8484321046aee3af8d76a3fe82937b9e98 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Thu, 16 Sep 2010 00:50:43 +0000 Subject: [PATCH] Statically allocating buffers in Wire library (issue #351). --- libraries/Wire/Wire.cpp | 8 ++------ libraries/Wire/Wire.h | 4 ++-- libraries/Wire/utility/twi.c | 11 +++-------- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 0ee301203..849439bf7 100755 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -28,12 +28,12 @@ extern "C" { // Initialize Class Variables ////////////////////////////////////////////////// -uint8_t* TwoWire::rxBuffer = 0; +uint8_t TwoWire::rxBuffer[BUFFER_LENGTH]; uint8_t TwoWire::rxBufferIndex = 0; uint8_t TwoWire::rxBufferLength = 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::txBufferLength = 0; @@ -51,13 +51,9 @@ TwoWire::TwoWire() void TwoWire::begin(void) { - // init buffer for reads - rxBuffer = (uint8_t*) calloc(BUFFER_LENGTH, sizeof(uint8_t)); rxBufferIndex = 0; rxBufferLength = 0; - // init buffer for writes - txBuffer = (uint8_t*) calloc(BUFFER_LENGTH, sizeof(uint8_t)); txBufferIndex = 0; txBufferLength = 0; diff --git a/libraries/Wire/Wire.h b/libraries/Wire/Wire.h index 9e849d5e1..a6c29c493 100755 --- a/libraries/Wire/Wire.h +++ b/libraries/Wire/Wire.h @@ -27,12 +27,12 @@ class TwoWire { private: - static uint8_t* rxBuffer; + static uint8_t rxBuffer[]; static uint8_t rxBufferIndex; static uint8_t rxBufferLength; static uint8_t txAddress; - static uint8_t* txBuffer; + static uint8_t txBuffer[]; static uint8_t txBufferIndex; static uint8_t txBufferLength; diff --git a/libraries/Wire/utility/twi.c b/libraries/Wire/utility/twi.c index 2ad2a71fc..694e68a8f 100644 --- a/libraries/Wire/utility/twi.c +++ b/libraries/Wire/utility/twi.c @@ -40,15 +40,15 @@ static uint8_t twi_slarw; static void (*twi_onSlaveTransmit)(void); 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 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_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_error; @@ -88,11 +88,6 @@ void twi_init(void) // enable twi module, acks, and twi interrupt 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)); } /*