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