Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion inc/bluetooth/MicroBitBLEManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ class MicroBitBLEManager : MicroBitComponent
* Default to Application Mode
* This variable will be set to MICROBIT_MODE_PAIRING if pairingMode() is executed.
*/
uint8_t currentMode = MICROBIT_MODE_APPLICATION;
uint8_t currentMode;

};

Expand Down
8 changes: 4 additions & 4 deletions inc/bluetooth/MicroBitPartialFlashingService.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,13 @@ class MicroBitPartialFlashingService
void flashData(uint8_t *data);

// Ensure packets are in order
uint8_t packetCount = 0;
uint8_t blockPacketCount = 0;
uint8_t packetCount;
uint8_t blockPacketCount;

// Keep track of blocks of data
uint32_t block[16];
uint8_t blockNum = 0;
uint32_t offset = 0;
uint8_t blockNum;
uint32_t offset;

};

Expand Down
24 changes: 24 additions & 0 deletions inc/core/MicroBitHeapAllocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ DEALINGS IN THE SOFTWARE.
#define MICROBIT_HEAP_ALLOCTOR_H

#include "MicroBitConfig.h"
#include <new>

// The maximum number of heap segments that can be created.
#define MICROBIT_MAXIMUM_HEAPS 2
Expand Down Expand Up @@ -85,4 +86,27 @@ struct HeapDefinition
int microbit_create_heap(uint32_t start, uint32_t end);
void microbit_heap_print();

/**
* Attempt to allocate a given amount of memory from any of our configured heap areas.
*
* @param size The amount of memory, in bytes, to allocate.
*
* @return A pointer to the allocated memory, or NULL if insufficient memory is available.
*/
void *_microbit_malloc(size_t size);
void* _microbit_calloc (size_t num, size_t size);
void* _microbit_realloc (void* ptr, size_t size);

/**
* Release a given area of memory from the heap.
*
* @param mem The memory area to release.
*/
void _microbit_free(void *mem);

#define malloc _microbit_malloc
#define free _microbit_free
#define calloc _microbit_calloc
#define realloc _microbit_realloc

#endif
2 changes: 1 addition & 1 deletion inc/drivers/MicroBitMemoryMap.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class MicroBitMemoryMap
Region memoryMap[NUMBER_OF_REGIONS];
};

uint8_t regionCount = 0;
uint8_t regionCount;

public:

Expand Down
12 changes: 6 additions & 6 deletions inc/drivers/MicroBitQuadratureDecoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,13 @@ DEALINGS IN THE SOFTWARE.
class MicroBitQuadratureDecoder : public MicroBitComponent
{
protected:
int64_t position = 0; // Absolute position
int64_t position; // Absolute position
MicroBitPin& phaseA, // Phase A input for decoding
phaseB; // Phase B input for decoding
MicroBitPin* LED; // LED output to assert while decoding
uint32_t samplePeriod = 128; // Minimum sampling period allowed
uint16_t faults = 0; // Double-transition counter
uint8_t LEDDelay = 0; // power-up time for LED, in microseconds
uint32_t samplePeriod; // Minimum sampling period allowed
uint16_t faults; // Double-transition counter
uint8_t LEDDelay; // power-up time for LED, in microseconds
uint8_t flags;

public:
Expand Down Expand Up @@ -172,9 +172,9 @@ class MicroBitQuadratureDecoder : public MicroBitComponent
*
* Ensures that stop() gets called if necessary.
*/
virtual ~MicroBitQuadratureDecoder() override;
virtual ~MicroBitQuadratureDecoder();

virtual void systemTick() override;
virtual void systemTick();
};

#endif
2 changes: 2 additions & 0 deletions source/bluetooth/MicroBitBLEManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ static void securitySetupCompletedCallback(Gap::Handle_t handle, SecurityManager
*/
MicroBitBLEManager::MicroBitBLEManager(MicroBitStorage &_storage) : storage(&_storage)
{
currentMode = MICROBIT_MODE_APPLICATION;
manager = this;
this->ble = NULL;
this->pairingStatus = 0;
Expand All @@ -242,6 +243,7 @@ MicroBitBLEManager::MicroBitBLEManager(MicroBitStorage &_storage) : storage(&_st
*/
MicroBitBLEManager::MicroBitBLEManager() : storage(NULL)
{
currentMode = MICROBIT_MODE_APPLICATION;
manager = this;
this->ble = NULL;
this->pairingStatus = 0;
Expand Down
5 changes: 5 additions & 0 deletions source/bluetooth/MicroBitPartialFlashingService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ DEALINGS IN THE SOFTWARE.
MicroBitPartialFlashingService::MicroBitPartialFlashingService(BLEDevice &_ble, EventModel &_messageBus) :
ble(_ble), messageBus(_messageBus)
{
packetCount = 0;
blockPacketCount = 0;
blockNum = 0;
offset = 0;

// Set up partial flashing characteristic
uint8_t initCharacteristicValue = 0x00;
GattCharacteristic partialFlashCharacteristic(MicroBitPartialFlashingServiceCharacteristicUUID, &initCharacteristicValue, sizeof(initCharacteristicValue),
Expand Down
22 changes: 14 additions & 8 deletions source/bluetooth/MicroBitUARTService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,9 @@ int MicroBitUARTService::send(const uint8_t *buf, int length, MicroBitSerialMode

int size = txBufferedSize();

uint8_t temp[size];
uint8_t *temp = new uint8_t[size];

memclr(&temp, size);
memclr(temp, size);

circularCopy(txBuffer, txBufferSize, temp, txBufferTail, txBufferHead);

Expand All @@ -297,6 +297,8 @@ int MicroBitUARTService::send(const uint8_t *buf, int length, MicroBitSerialMode
break;

ble.gattServer().areUpdatesEnabled(*txCharacteristic, &updatesEnabled);

delete[] temp;
}

return bytesWritten;
Expand Down Expand Up @@ -398,16 +400,18 @@ int MicroBitUARTService::read(uint8_t *buf, int len, MicroBitSerialMode mode)
*/
ManagedString MicroBitUARTService::read(int len, MicroBitSerialMode mode)
{
uint8_t buf[len + 1];
uint8_t *buf = new uint8_t[len + 1];

memclr(&buf, len + 1);
memclr(buf, len + 1);

int ret = read(buf, len, mode);

if(ret < 1)
return ManagedString();

return ManagedString((const char *)buf);
ManagedString string((const char *)buf);
delete[] buf;
return string;
}

/**
Expand Down Expand Up @@ -467,16 +471,18 @@ ManagedString MicroBitUARTService::readUntil(ManagedString delimeters, MicroBitS
//calculate our local buffer size
int localBuffSize = (preservedTail > foundIndex) ? (rxBufferSize - preservedTail) + foundIndex : foundIndex - preservedTail;

uint8_t localBuff[localBuffSize + 1];
uint8_t *localBuff = new uint8_t[localBuffSize + 1];

memclr(&localBuff, localBuffSize + 1);
memclr(localBuff, localBuffSize + 1);

circularCopy(rxBuffer, rxBufferSize, localBuff, preservedTail, foundIndex);

//plus one for the character we listened for...
rxBufferTail = (rxBufferTail + localBuffSize + 1) % rxBufferSize;

return ManagedString((char *)localBuff, localBuffSize);
ManagedString string((char *)localBuff, localBuffSize);
delete[] localBuff;
return string;
}

return ManagedString();
Expand Down
18 changes: 12 additions & 6 deletions source/core/MicroBitHeapAllocator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,13 @@ DEALINGS IN THE SOFTWARE.
// A list of all active heap regions, and their dimensions in memory.
HeapDefinition heap[MICROBIT_MAXIMUM_HEAPS] = { };
uint8_t heap_count = 0;
extern "C" int __end__;
#if defined __CC_ARM || defined __ARMCC_VERSION
#define HEAP_START Image$$RW_IRAM1$$ZI$$Limit
#else
#define HEAP_START __end__
#endif

extern "C" int HEAP_START;

#if CONFIG_ENABLED(MICROBIT_DBG) && CONFIG_ENABLED(MICROBIT_HEAP_DBG)
// Diplays a usage summary about a given heap...
Expand Down Expand Up @@ -271,7 +277,7 @@ void *microbit_malloc(size_t size, HeapDefinition &heap)
*
* @return A pointer to the allocated memory, or NULL if insufficient memory is available.
*/
void *malloc(size_t size)
void *_microbit_malloc(size_t size)
{
static uint8_t initialised = 0;
void *p;
Expand All @@ -280,7 +286,7 @@ void *malloc(size_t size)
{
heap_count = 0;

if(microbit_create_heap((uint32_t)(&__end__), (uint32_t)(MICROBIT_HEAP_END)) == MICROBIT_INVALID_PARAMETER)
if(microbit_create_heap((uint32_t)(&HEAP_START), (uint32_t)(MICROBIT_HEAP_END)) == MICROBIT_INVALID_PARAMETER)
microbit_panic(MICROBIT_HEAP_ERROR);

initialised = 1;
Expand Down Expand Up @@ -319,7 +325,7 @@ void *malloc(size_t size)
*
* @param mem The memory area to release.
*/
void free(void *mem)
void _microbit_free(void *mem)
{
uint32_t *memory = (uint32_t *)mem;
uint32_t *cb = memory-1;
Expand Down Expand Up @@ -351,7 +357,7 @@ void free(void *mem)
microbit_panic(MICROBIT_HEAP_ERROR);
}

void* calloc (size_t num, size_t size)
void* _microbit_calloc (size_t num, size_t size)
{
void *mem = malloc(num*size);

Expand All @@ -361,7 +367,7 @@ void* calloc (size_t num, size_t size)
return mem;
}

void* realloc (void* ptr, size_t size)
void* _microbit_realloc (void* ptr, size_t size)
{
void *mem = malloc(size);

Expand Down
4 changes: 2 additions & 2 deletions source/drivers/MicroBitCompassCalibrator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,8 @@ CompassCalibration MicroBitCompassCalibrator::spherify(Sample3D centre, Sample3D
Sample3D MicroBitCompassCalibrator::approximateCentre(Sample3D *data, int samples)
{
Sample3D c,t;
Sample3D centre = { 0,0,0 };
Sample3D best = { 0,0,0 };
Sample3D centre;
Sample3D best;

float score;

Expand Down
6 changes: 4 additions & 2 deletions source/drivers/MicroBitFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ int MicroBitFile::read(char *buffer, int size)
*/
ManagedString MicroBitFile::read(int size)
{
char buff[size + 1];
char *buff = new char[size + 1];

buff[size] = 0;

Expand All @@ -169,7 +169,9 @@ ManagedString MicroBitFile::read(int size)
if(ret < 0)
return ManagedString();

return ManagedString(buff,ret);
ManagedString string(buff,ret);
delete[] buff;
return string;
}

/**
Expand Down
1 change: 1 addition & 0 deletions source/drivers/MicroBitMemoryMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ DEALINGS IN THE SOFTWARE.
*/
MicroBitMemoryMap::MicroBitMemoryMap()
{
regionCount = 0;
// Assumes PXT Built program
// SD
pushRegion(Region(0x00, 0x00, 0x18000, 0x00)); // Soft Device
Expand Down
11 changes: 11 additions & 0 deletions source/drivers/MicroBitQuadratureDecoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ DEALINGS IN THE SOFTWARE.
#include "ErrorNo.h"
#include "MicroBitQuadratureDecoder.h"

#ifndef UINT16_MAX
#define UINT16_MAX 0xFFFF
#endif

/**
* Constructor.
* Create a software abstraction of the quadrature decoder.
Expand All @@ -46,11 +50,18 @@ DEALINGS IN THE SOFTWARE.
MicroBitQuadratureDecoder::MicroBitQuadratureDecoder(MicroBitPin& phaseA_, MicroBitPin& phaseB_, MicroBitPin& LED_, uint8_t LEDDelay_, uint8_t flags_)
: phaseA(phaseA_), phaseB(phaseB_), LED(&LED_), LEDDelay(LEDDelay_), flags(flags_)
{
position = 0;
samplePeriod = 128;
faults = 0;
}

MicroBitQuadratureDecoder::MicroBitQuadratureDecoder(MicroBitPin& phaseA_, MicroBitPin& phaseB_, uint8_t flags_)
: phaseA(phaseA_), phaseB(phaseB_), LED(NULL), flags(flags_)
{
position = 0;
samplePeriod = 128;
faults = 0;
LEDDelay = 0;
}

/**
Expand Down
16 changes: 10 additions & 6 deletions source/drivers/MicroBitSerial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -585,16 +585,18 @@ int MicroBitSerial::read(MicroBitSerialMode mode)
*/
ManagedString MicroBitSerial::read(int size, MicroBitSerialMode mode)
{
uint8_t buff[size + 1];
uint8_t *buff = new uint8_t[size + 1];

memclr(&buff, size + 1);
memclr(buff, size + 1);

int returnedSize = read((uint8_t *)buff, size, mode);

if(returnedSize <= 0)
return ManagedString();

return ManagedString((char *)buff, returnedSize);
ManagedString string((char *)buff, returnedSize);
delete[] buff;
return string;
}

/**
Expand Down Expand Up @@ -778,9 +780,9 @@ ManagedString MicroBitSerial::readUntil(ManagedString delimeters, MicroBitSerial
//calculate our local buffer size
int localBuffSize = (preservedTail > foundIndex) ? (rxBuffSize - preservedTail) + foundIndex : foundIndex - preservedTail;

uint8_t localBuff[localBuffSize + 1];
uint8_t *localBuff = new uint8_t[localBuffSize + 1];

memclr(&localBuff, localBuffSize + 1);
memclr(localBuff, localBuffSize + 1);

circularCopy(rxBuff, rxBuffSize, localBuff, preservedTail, foundIndex);

Expand All @@ -789,7 +791,9 @@ ManagedString MicroBitSerial::readUntil(ManagedString delimeters, MicroBitSerial

unlockRx();

return ManagedString((char *)localBuff, localBuffSize);
ManagedString string((char *)localBuff, localBuffSize);
delete[] localBuff;
return string;
}

unlockRx();
Expand Down
Loading