Skip to content

Commit 7c4831f

Browse files
committed
Merge pull request #1044 from porkybrain/master
Changed CircBuffer to take its size as a template parameters for efficientcy.
2 parents ee76292 + 75732d7 commit 7c4831f

File tree

3 files changed

+7
-17
lines changed

3 files changed

+7
-17
lines changed

libraries/USBDevice/USBMSD/USBMSD.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ bool USBMSD::connect(bool blocking) {
135135
}
136136

137137
void USBMSD::disconnect() {
138+
USBDevice::disconnect();
138139
//De-allocate MSD page size:
139140
free(page);
140141
page = NULL;
141-
USBDevice::disconnect();
142142
}
143143

144144
void USBMSD::reset() {

libraries/USBDevice/USBSerial/CircBuffer.h

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,10 @@
1919
#ifndef CIRCBUFFER_H
2020
#define CIRCBUFFER_H
2121

22-
template <class T>
22+
template <class T, int Size>
2323
class CircBuffer {
2424
public:
25-
CircBuffer(int length) {
26-
write = 0;
27-
read = 0;
28-
size = length + 1;
29-
buf = (T *)malloc(size * sizeof(T));
30-
};
31-
32-
~CircBuffer() {
33-
free(buf);
34-
}
35-
25+
CircBuffer():write(0), read(0){}
3626
bool isFull() {
3727
return ((write + 1) % size == read);
3828
};
@@ -66,8 +56,8 @@ class CircBuffer {
6656
private:
6757
volatile uint16_t write;
6858
volatile uint16_t read;
69-
uint16_t size;
70-
T * buf;
59+
static const int size = Size+1; //a modern optimizer should be able to remove this so it uses no ram.
60+
T buf[Size];
7161
};
7262

7363
#endif

libraries/USBDevice/USBSerial/USBSerial.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class USBSerial: public USBCDC, public Stream {
5656
* @param connect_blocking define if the connection must be blocked if USB not plugged in
5757
*
5858
*/
59-
USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001, bool connect_blocking = true): USBCDC(vendor_id, product_id, product_release, connect_blocking), buf(128){
59+
USBSerial(uint16_t vendor_id = 0x1f00, uint16_t product_id = 0x2012, uint16_t product_release = 0x0001, bool connect_blocking = true): USBCDC(vendor_id, product_id, product_release, connect_blocking){
6060
settingsChangedCallback = 0;
6161
};
6262

@@ -154,7 +154,7 @@ class USBSerial: public USBCDC, public Stream {
154154

155155
private:
156156
FunctionPointer rx;
157-
CircBuffer<uint8_t> buf;
157+
CircBuffer<uint8_t,128> buf;
158158
void (*settingsChangedCallback)(int baud, int bits, int parity, int stop);
159159
};
160160

0 commit comments

Comments
 (0)