Skip to content

Commit 05657f7

Browse files
implement xQueueOverwrite
1 parent abf8aa2 commit 05657f7

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

cpputest-for-freertos-lib/src/cpputest_for_freertos_queue.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,11 @@ extern "C" BaseType_t xQueueGenericSend(QueueHandle_t queue,
108108
{
109109
(void)ticks;
110110
configASSERT(queue != nullptr);
111+
configASSERT(!((itemToQueue == nullptr) && (queue->itemSize != 0U)));
112+
configASSERT(!((copyPosition == queueOVERWRITE) && (queue->queueLength != 1)));
111113

112-
if (queue->queue.size() >= queue->queueLength)
114+
if ((copyPosition != queueOVERWRITE) &&
115+
(queue->queue.size() >= queue->queueLength))
113116
{
114117
return errQUEUE_FULL;
115118
}
@@ -126,6 +129,11 @@ extern "C" BaseType_t xQueueGenericSend(QueueHandle_t queue,
126129
{
127130
queue->queue.push_front(msg);
128131
}
132+
else if (copyPosition == queueOVERWRITE)
133+
{
134+
queue->queue.pop_front();
135+
queue->queue.push_front(msg);
136+
}
129137
else
130138
{
131139
configASSERT(true == false);

cpputest-for-freertos-lib/tests/cpputest_for_freertos_queue_tests.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,23 @@ TEST(QueueTests, can_create_a_static_queue)
174174
mQueueUnderTest = xQueueCreateStatic(2, sizeof(TestEventT), queueStorageArea, &staticQueue);
175175
CHECK_TRUE(mQueueUnderTest != nullptr);
176176
}
177+
178+
TEST(QueueTests, can_use_queue_overwrite)
179+
{
180+
const TestEventT firstEvent = { 23, 43 };
181+
const TestEventT overwriteEvent = { 123, 143 };
182+
183+
CreateUnderTest(1, sizeof(TestEventT));
184+
185+
auto rtn = xQueueSendToBack(mQueueUnderTest, &firstEvent, portMAX_DELAY);
186+
CHECK_EQUAL(pdTRUE, rtn);
187+
188+
rtn = xQueueOverwrite(mQueueUnderTest, &overwriteEvent);
189+
CHECK_EQUAL(pdPASS, rtn);
190+
191+
TestEventT retrieved;
192+
rtn = xQueueReceive(mQueueUnderTest, &retrieved, portMAX_DELAY);
193+
CHECK_EQUAL(pdTRUE, rtn);
194+
CHECK_EQUAL(overwriteEvent.valueA, retrieved.valueA);
195+
CHECK_EQUAL(overwriteEvent.valueB, retrieved.valueB);
196+
}

0 commit comments

Comments
 (0)