From 9185712f1bf768269c19193fc72f8cda9654e122 Mon Sep 17 00:00:00 2001 From: Jan Breuer <jan.breuer@jaybee.cz> Date: 周三, 06 3月 2013 21:25:08 +0800 Subject: [PATCH] Modified FIFO --- libscpi/inc/scpi/fifo.h | 6 +++--- libscpi/src/error.c | 4 ++-- libscpi/src/debug.c | 3 ++- libscpi/src/fifo.c | 10 ++++++---- libscpi/test/test_fifo.c | 36 ++++++++++++++++++------------------ 5 files changed, 31 insertions(+), 28 deletions(-) diff --git a/libscpi/inc/scpi/fifo.h b/libscpi/inc/scpi/fifo.h index 1ba3a93..9429e9e 100644 --- a/libscpi/inc/scpi/fifo.h +++ b/libscpi/inc/scpi/fifo.h @@ -44,7 +44,7 @@ #endif -#define FIFO_SIZE 100 +#define FIFO_SIZE 16 struct _fifo_t { int16_t wr; @@ -56,8 +56,8 @@ void fifo_init(fifo_t * fifo); void fifo_clear(fifo_t * fifo); - bool_t fifo_push(fifo_t * fifo, int16_t value); - bool_t fifo_pop(fifo_t * fifo, int16_t * value); + bool_t fifo_add(fifo_t * fifo, int16_t value); + bool_t fifo_remove(fifo_t * fifo, int16_t * value); bool_t fifo_count(fifo_t * fifo, int16_t * value); #ifdef __cplusplus diff --git a/libscpi/src/debug.c b/libscpi/src/debug.c index bec35e0..1a9de52 100644 --- a/libscpi/src/debug.c +++ b/libscpi/src/debug.c @@ -35,6 +35,7 @@ */ #include <stdio.h> +#include <inttypes.h> #include "scpi/debug.h" /** @@ -47,7 +48,7 @@ printf("**DEBUG: %s (\"", context->paramlist.cmd->pattern); res = fwrite(context->paramlist.parameters, 1, context->paramlist.length, stdout); (void)res; - printf("\" - %ld\r\n", (uint32_t)context->paramlist.length); + printf("\" - %" PRIu32 "\r\n", (uint32_t)context->paramlist.length); return TRUE; } diff --git a/libscpi/src/error.c b/libscpi/src/error.c index 798a71c..493b623 100644 --- a/libscpi/src/error.c +++ b/libscpi/src/error.c @@ -81,7 +81,7 @@ //} // basic FIFO - fifo_pop((fifo_t *)context->error_queue, &result); + fifo_remove((fifo_t *)context->error_queue, &result); return result; } @@ -109,7 +109,7 @@ //xQueueSend((xQueueHandle)context->error_queue, &err, 0); // basic FIFO - fifo_push((fifo_t *)context->error_queue, err); + fifo_add((fifo_t *)context->error_queue, err); } /** * Push error to queue diff --git a/libscpi/src/fifo.c b/libscpi/src/fifo.c index 7c80c9f..cb9d385 100644 --- a/libscpi/src/fifo.c +++ b/libscpi/src/fifo.c @@ -12,10 +12,10 @@ fifo->rd = 0; } -bool_t fifo_push(fifo_t * fifo, int16_t value) { +bool_t fifo_add(fifo_t * fifo, int16_t value) { /* FIFO full? */ if (fifo->wr == ((fifo->rd + fifo->size) % (fifo->size + 1))) { - return FALSE; + fifo_remove(fifo, NULL); } fifo->data[fifo->wr] = value; @@ -24,13 +24,15 @@ return TRUE; } -bool_t fifo_pop(fifo_t * fifo, int16_t * value) { +bool_t fifo_remove(fifo_t * fifo, int16_t * value) { /* FIFO empty? */ if (fifo->wr == fifo->rd) { return FALSE; } - *value = fifo->data[fifo->rd]; + if(value) { + *value = fifo->data[fifo->rd]; + } fifo->rd = (fifo->rd + 1) % (fifo->size + 1); diff --git a/libscpi/test/test_fifo.c b/libscpi/test/test_fifo.c index fd6fa51..bfe7cad 100644 --- a/libscpi/test/test_fifo.c +++ b/libscpi/test/test_fifo.c @@ -38,15 +38,15 @@ TEST_FIFO_COUNT(0); - CU_ASSERT_TRUE(fifo_push(&fifo, 1)); + CU_ASSERT_TRUE(fifo_add(&fifo, 1)); TEST_FIFO_COUNT(1); - CU_ASSERT_TRUE(fifo_push(&fifo, 2)); + CU_ASSERT_TRUE(fifo_add(&fifo, 2)); TEST_FIFO_COUNT(2); - CU_ASSERT_TRUE(fifo_push(&fifo, 3)); + CU_ASSERT_TRUE(fifo_add(&fifo, 3)); TEST_FIFO_COUNT(3); - CU_ASSERT_TRUE(fifo_push(&fifo, 4)); + CU_ASSERT_TRUE(fifo_add(&fifo, 4)); TEST_FIFO_COUNT(4); - CU_ASSERT_FALSE(fifo_push(&fifo, 1)); + CU_ASSERT_TRUE(fifo_add(&fifo, 1)); TEST_FIFO_COUNT(4); CU_ASSERT_EQUAL(fifo.data[0], 1); @@ -54,30 +54,30 @@ CU_ASSERT_EQUAL(fifo.data[2], 3); CU_ASSERT_EQUAL(fifo.data[3], 4); - CU_ASSERT_TRUE(fifo_pop(&fifo, &value)); - CU_ASSERT_EQUAL(value, 1); - TEST_FIFO_COUNT(3); - - CU_ASSERT_TRUE(fifo_push(&fifo, 5)); - TEST_FIFO_COUNT(4); - - CU_ASSERT_TRUE(fifo_pop(&fifo, &value)); + CU_ASSERT_TRUE(fifo_remove(&fifo, &value)); CU_ASSERT_EQUAL(value, 2); TEST_FIFO_COUNT(3); - CU_ASSERT_TRUE(fifo_pop(&fifo, &value)); + CU_ASSERT_TRUE(fifo_add(&fifo, 5)); + TEST_FIFO_COUNT(4); + + CU_ASSERT_TRUE(fifo_remove(&fifo, &value)); CU_ASSERT_EQUAL(value, 3); + TEST_FIFO_COUNT(3); + + CU_ASSERT_TRUE(fifo_remove(&fifo, &value)); + CU_ASSERT_EQUAL(value, 4); TEST_FIFO_COUNT(2); - CU_ASSERT_TRUE(fifo_pop(&fifo, &value)); - CU_ASSERT_EQUAL(value, 4); + CU_ASSERT_TRUE(fifo_remove(&fifo, &value)); + CU_ASSERT_EQUAL(value, 1); TEST_FIFO_COUNT(1); - CU_ASSERT_TRUE(fifo_pop(&fifo, &value)); + CU_ASSERT_TRUE(fifo_remove(&fifo, &value)); CU_ASSERT_EQUAL(value, 5); TEST_FIFO_COUNT(0); - CU_ASSERT_FALSE(fifo_pop(&fifo, &value)); + CU_ASSERT_FALSE(fifo_remove(&fifo, &value)); TEST_FIFO_COUNT(0); } -- Gitblit v1.9.1