Skip to content

Commit 08e5a56

Browse files
authored
Merge pull request #3 from bcmi-labs/raw_queue_elements
[RFC] Use raw queue elements
2 parents 9f65218 + 5bd66e7 commit 08e5a56

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

Diff for: Arduino_Threads.h

+14-7
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,25 @@ class Shared // template definition
33
{
44
public:
55
Shared() {
6-
queue = new rtos::Queue<Shared<T>, 16>;
76
}
8-
operator T() const {
9-
osEvent evt = queue->get();
7+
operator T() {
8+
osEvent evt = queue.get();
109
if (evt.status == osEventMessage) {
11-
Shared<T> *x = (Shared<T>*)evt.value.p;
12-
return x->val;
10+
T x = *((T*)evt.value.p);
11+
delete (T*)evt.value.p;
12+
return x;
1313
}
14+
return val;
1415
}
1516
T& operator= (const T& other) {
17+
if (queue.full()) {
18+
// invokes operator T() to discard oldest element and free its memory
19+
T discard = *this;
20+
}
1621
val = other;
17-
queue->put(this);
22+
T* obj = new T(val);
23+
queue.put(obj);
24+
return (*obj);
1825
}
1926
T& peek() {
2027
return val;
@@ -24,7 +31,7 @@ class Shared // template definition
2431
}
2532
private:
2633
T val;
27-
rtos::Queue<Shared<T>, 16> *queue;
34+
rtos::Queue<T, 16> queue;
2835
};
2936

3037
#define CONCAT2(x,y) x##y

Diff for: examples/Enqueue_test/Enqueue.inot

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
void setup() {
2+
// put your setup code here, to run once:
3+
4+
}
5+
6+
int i = 0;
7+
8+
void loop() {
9+
// Continuously pump counter
10+
delay(100);
11+
i++;
12+
counter = i;
13+
}

Diff for: examples/Enqueue_test/Enqueue_test.ino

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
void setup() {
2+
// put your setup code here, to run once:
3+
Serial.begin(115200);
4+
while (!Serial) {}
5+
Enqueue.start();
6+
Serial.println("start");
7+
}
8+
9+
void loop() {
10+
// put your main code here, to run repeatedly:
11+
delay(1000);
12+
for (int i = 0; i < 10; i++) {
13+
Serial.println(counter);
14+
}
15+
}

Diff for: examples/Enqueue_test/SharedVariables.h

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Shared<int> counter;

0 commit comments

Comments
 (0)