Jan Breuer
2013-03-06 9185712f1bf768269c19193fc72f8cda9654e122
Modified FIFO

- renamed functions to fifo_add and fifo_remove
- fifo is never full
- if it is full during fifo_add, last value is forgotten and new value
is added
5个文件已修改
57 ■■■■ 已修改文件
libscpi/inc/scpi/fifo.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/debug.c 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/error.c 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/src/fifo.c 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
libscpi/test/test_fifo.c 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
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;
}
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
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;
    }
    if(value) {
    *value = fifo->data[fifo->rd];
    }
    fifo->rd = (fifo->rd + 1) % (fifo->size + 1);
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);
}