From f1f16202873064cdb76e738fba8bfbb5f2ee530d Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Tue, 2 Oct 2018 12:58:00 +0000 Subject: Revision of pipes. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12315 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- demos/STM32/RT-STM32L476-DISCOVERY/main.c | 2 +- os/lib/include/chpipes.h | 45 +++--- os/lib/src/chpipes.c | 100 ++++++++----- test/oslib/configuration.xml | 95 ++++++------- test/oslib/source/test/oslib_test_sequence_002.c | 172 +++++++++++------------ 5 files changed, 212 insertions(+), 202 deletions(-) diff --git a/demos/STM32/RT-STM32L476-DISCOVERY/main.c b/demos/STM32/RT-STM32L476-DISCOVERY/main.c index e8381a231..4741341a7 100644 --- a/demos/STM32/RT-STM32L476-DISCOVERY/main.c +++ b/demos/STM32/RT-STM32L476-DISCOVERY/main.c @@ -70,7 +70,7 @@ int main(void) { */ while (true) { if (palReadLine(LINE_JOY_CENTER)) { - test_execute((BaseSequentialStream *)&SD2, &rt_test_suite); +// test_execute((BaseSequentialStream *)&SD2, &rt_test_suite); test_execute((BaseSequentialStream *)&SD2, &oslib_test_suite); } chThdSleepMilliseconds(500); diff --git a/os/lib/include/chpipes.h b/os/lib/include/chpipes.h index a09b3c72a..8bf26c62b 100644 --- a/os/lib/include/chpipes.h +++ b/os/lib/include/chpipes.h @@ -58,12 +58,16 @@ typedef struct { uint8_t *rdptr; /**< @brief Read pointer. */ size_t cnt; /**< @brief Bytes in the pipe. */ bool reset; /**< @brief True if in reset state. */ - threads_queue_t qw; /**< @brief Queued writers. */ - threads_queue_t qr; /**< @brief Queued readers. */ + thread_reference_t wtr; /**< @brief Waiting writer. */ + thread_reference_t rtr; /**< @brief Waiting reader. */ #if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__) - mutex_t mtx; /**< @brief Heap access mutex. */ + mutex_t cmtx; /**< @brief Common access mutex. */ + mutex_t wmtx; /**< @brief Write access mutex. */ + mutex_t rmtx; /**< @brief Read access mutex. */ #else - semaphore_t sem; /**< @brief Heap access semaphore. */ + semaphore_t csem; /**< @brief Common access semaphore.*/ + semaphore_t wsem; /**< @brief Write access semaphore. */ + semaphore_t rsem; /**< @brief Read access semaphore. */ #endif } pipe_t; @@ -88,9 +92,11 @@ typedef struct { (uint8_t *)(buffer), \ (size_t)0, \ false, \ - _THREADS_QUEUE_DATA(name.qw), \ - _THREADS_QUEUE_DATA(name.qr), \ - _MUTEX_DATA(name.mtx), \ + NULL, \ + NULL, \ + _MUTEX_DATA(name.cmtx), \ + _MUTEX_DATA(name.wmtx), \ + _MUTEX_DATA(name.rmtx), \ } #else /* CH_CFG_USE_MUTEXES == FALSE */ #define _PIPE_DATA(name, buffer, size) { \ @@ -100,9 +106,11 @@ typedef struct { (uint8_t *)(buffer), \ (size_t)0, \ false, \ - _THREADS_QUEUE_DATA(name.qw), \ - _THREADS_QUEUE_DATA(name.qr), \ - _SEMAPHORE_DATA(name.sem, (cnt_t)1), \ + NULL, \ + NULL, \ + _SEMAPHORE_DATA(name.csem, (cnt_t)1), \ + _SEMAPHORE_DATA(name.wsem, (cnt_t)1), \ + _SEMAPHORE_DATA(name.rsem, (cnt_t)1), \ } #endif /* CH_CFG_USE_MUTEXES == FALSE */ @@ -181,23 +189,6 @@ static inline size_t chPipeGetFreeCount(const pipe_t *pp) { return chPipeGetSize(pp) - chPipeGetUsedCount(pp); } -/** - * @brief Returns the next byte in the queue without removing it. - * @pre A byte must be present in the queue for this function to work - * or it would return garbage. The correct way to use this macro is - * to use @p chPipeGetFullCountI() and then use this macro, all within - * a lock state. - * - * @param[in] pp the pointer to an initialized @p pipe_t object - * @return The next byte in queue. - * - * @api - */ -static inline uint8_t chPipePeek(const pipe_t *pp) { - - return *pp->rdptr; -} - /** * @brief Terminates the reset state. * diff --git a/os/lib/src/chpipes.c b/os/lib/src/chpipes.c index 6ce029205..c18a21597 100644 --- a/os/lib/src/chpipes.c +++ b/os/lib/src/chpipes.c @@ -51,11 +51,25 @@ * Defaults on the best synchronization mechanism available. */ #if (CH_CFG_USE_MUTEXES == TRUE) || defined(__DOXYGEN__) -#define P_LOCK(p) chMtxLock(&(p)->mtx) -#define P_UNLOCK(p) chMtxUnlock(&(p)->mtx) +#define PC_INIT(p) chMtxObjectInit(&(p)->cmtx) +#define PC_LOCK(p) chMtxLock(&(p)->cmtx) +#define PC_UNLOCK(p) chMtxUnlock(&(p)->cmtx) +#define PW_INIT(p) chMtxObjectInit(&(p)->wmtx) +#define PW_LOCK(p) chMtxLock(&(p)->wmtx) +#define PW_UNLOCK(p) chMtxUnlock(&(p)->wmtx) +#define PR_INIT(p) chMtxObjectInit(&(p)->rmtx) +#define PR_LOCK(p) chMtxLock(&(p)->rmtx) +#define PR_UNLOCK(p) chMtxUnlock(&(p)->rmtx) #else -#define P_LOCK(p) (void) chSemWait(&(p)->sem) -#define P_UNLOCK(p) chSemSignal(&(p)->sem) +#define PC_INIT(p) chMtxObjectInit(&(p)->csem, (cnt_t)1) +#define PC_LOCK(p) (void) chSemWait(&(p)->csem) +#define PC_UNLOCK(p) chSemSignal(&(p)->csem) +#define PW_INIT(p) chMtxObjectInit(&(p)->wsem, (cnt_t)1) +#define PW_LOCK(p) (void) chSemWait(&(p)->wsem) +#define PW_UNLOCK(p) chSemSignal(&(p)->wsem) +#define PR_INIT(p) chMtxObjectInit(&(p)->rsem, (cnt_t)1) +#define PR_LOCK(p) (void) chSemWait(&(p)->rsem) +#define PR_UNLOCK(p) chSemSignal(&(p)->rsem) #endif /*===========================================================================*/ @@ -91,15 +105,19 @@ static size_t pipe_write(pipe_t *pp, const uint8_t *bp, size_t n) { size_t s1, s2; + PC_LOCK(pp); + /* Number of bytes that can be written in a single atomic operation.*/ if (n > chPipeGetFreeCount(pp)) { n = chPipeGetFreeCount(pp); } + pp->cnt += n; /* Number of bytes before buffer limit.*/ /*lint -save -e9033 [10.8] Checked to be safe.*/ s1 = (size_t)(pp->top - pp->wrptr); /*lint -restore*/ + if (n < s1) { memcpy((void *)pp->wrptr, (const void *)bp, n); pp->wrptr += n; @@ -116,7 +134,8 @@ static size_t pipe_write(pipe_t *pp, const uint8_t *bp, size_t n) { pp->wrptr = pp->buffer; } - pp->cnt += n; + PC_UNLOCK(pp); + return n; } @@ -137,15 +156,19 @@ static size_t pipe_write(pipe_t *pp, const uint8_t *bp, size_t n) { static size_t pipe_read(pipe_t *pp, uint8_t *bp, size_t n) { size_t s1, s2; + PC_LOCK(pp); + /* Number of bytes that can be read in a single atomic operation.*/ if (n > chPipeGetUsedCount(pp)) { n = chPipeGetUsedCount(pp); } + pp->cnt -= n; /* Number of bytes before buffer limit.*/ /*lint -save -e9033 [10.8] Checked to be safe.*/ s1 = (size_t)(pp->top - pp->rdptr); /*lint -restore*/ + if (n < s1) { memcpy((void *)bp, (void *)pp->rdptr, n); pp->rdptr += n; @@ -162,7 +185,8 @@ static size_t pipe_read(pipe_t *pp, uint8_t *bp, size_t n) { pp->rdptr = pp->buffer; } - pp->cnt -= n; + PC_UNLOCK(pp); + return n; } @@ -190,8 +214,11 @@ void chPipeObjectInit(pipe_t *pp, uint8_t *buf, size_t n) { pp->top = &buf[n]; pp->cnt = (size_t)0; pp->reset = false; - chThdQueueObjectInit(&pp->qw); - chThdQueueObjectInit(&pp->qr); + pp->wtr = NULL; + pp->rtr = NULL; + PC_INIT(pp); + PW_INIT(pp); + PR_INIT(pp); } /** @@ -210,17 +237,20 @@ void chPipeReset(pipe_t *pp) { chDbgCheck(pp != NULL); - P_LOCK(pp); - chSysLock(); + PC_LOCK(pp); + pp->wrptr = pp->buffer; pp->rdptr = pp->buffer; pp->cnt = (size_t)0; pp->reset = true; - chThdDequeueAllI(&pp->qw, MSG_RESET); - chThdDequeueAllI(&pp->qr, MSG_RESET); + + chSysLock(); + chThdResumeI(&pp->wtr, MSG_RESET); + chThdResumeI(&pp->rtr, MSG_RESET); chSchRescheduleS(); chSysUnlock(); - P_UNLOCK(pp); + + PC_UNLOCK(pp); } /** @@ -232,16 +262,16 @@ void chPipeReset(pipe_t *pp) { * * @param[in] pp the pointer to an initialized @p pipe_t object * @param[in] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred, the - * value 0 is reserved + * @param[in] n the number of bytes to be written, the value 0 is + * reserved * @param[in] timeout the number of ticks before the operation timeouts, * the following special values are allowed: * - @a TIME_IMMEDIATE immediate timeout. * - @a TIME_INFINITE no timeout. * . - * @return The number of bytes effectively transferred. - * @retval MSG_RESET if the mailbox has been reset. - * @retval MSG_TIMEOUT if the operation has timed out. + * @return The number of bytes effectively transferred. A number + * lower than @p n means that a timeout occurred or the + * pipe went in reset state. * * @api */ @@ -253,10 +283,10 @@ size_t chPipeWriteTimeout(pipe_t *pp, const uint8_t *bp, /* If the pipe is in reset state then returns immediately.*/ if (pp->reset) { - return MSG_RESET; + return (size_t)0; } - P_LOCK(pp); + PW_LOCK(pp); while (n > 0U) { size_t done; @@ -266,7 +296,7 @@ size_t chPipeWriteTimeout(pipe_t *pp, const uint8_t *bp, msg_t msg; chSysLock(); - msg = chThdEnqueueTimeoutS(&pp->qw, timeout); + msg = chThdSuspendTimeoutS(&pp->wtr, timeout); chSysUnlock(); /* Anything except MSG_OK causes the operation to stop.*/ @@ -277,10 +307,13 @@ size_t chPipeWriteTimeout(pipe_t *pp, const uint8_t *bp, else { n -= done; bp += done; + + /* Resuming the reader, if present.*/ + chThdResume(&pp->rtr, MSG_OK); } } - P_UNLOCK(pp); + PW_UNLOCK(pp); return max - n; } @@ -293,17 +326,17 @@ size_t chPipeWriteTimeout(pipe_t *pp, const uint8_t *bp, * been reset. * * @param[in] pp the pointer to an initialized @p pipe_t object - * @param[out] bp pointer to the data buffer - * @param[in] n the maximum amount of data to be transferred, the - * value 0 is reserved + * @param[out] bp pointer to the data buffer + * @param[in] n the number of bytes to be read, the value 0 is + * reserved * @param[in] timeout the number of ticks before the operation timeouts, * the following special values are allowed: * - @a TIME_IMMEDIATE immediate timeout. * - @a TIME_INFINITE no timeout. * . - * @return The number of bytes effectively transferred. - * @retval MSG_RESET if the mailbox has been reset. - * @retval MSG_TIMEOUT if the operation has timed out. + * @return The number of bytes effectively transferred. A number + * lower than @p n means that a timeout occurred or the + * pipe went in reset state. * * @api */ @@ -315,10 +348,10 @@ size_t chPipeReadTimeout(pipe_t *pp, uint8_t *bp, /* If the pipe is in reset state then returns immediately.*/ if (pp->reset) { - return MSG_RESET; + return (size_t)0; } - P_LOCK(pp); + PR_LOCK(pp); while (n > 0U) { size_t done; @@ -328,7 +361,7 @@ size_t chPipeReadTimeout(pipe_t *pp, uint8_t *bp, msg_t msg; chSysLock(); - msg = chThdEnqueueTimeoutS(&pp->qr, timeout); + msg = chThdSuspendTimeoutS(&pp->rtr, timeout); chSysUnlock(); /* Anything except MSG_OK causes the operation to stop.*/ @@ -339,10 +372,13 @@ size_t chPipeReadTimeout(pipe_t *pp, uint8_t *bp, else { n -= done; bp += done; + + /* Resuming the writer, if present.*/ + chThdResume(&pp->wtr, MSG_OK); } } - P_UNLOCK(pp); + PR_UNLOCK(pp); return max - n; } diff --git a/test/oslib/configuration.xml b/test/oslib/configuration.xml index a828b51d0..bf35034d8 100644 --- a/test/oslib/configuration.xml +++ b/test/oslib/configuration.xml @@ -477,17 +477,6 @@ static const uint8_t pipe_pattern[] = "0123456789ABCDEF";]]> - - - - - - - - - - - Resetting pipe. @@ -512,10 +501,10 @@ test_assert((pipe1.rdptr == pipe1.buffer) && - - - - - - - - - - - - - - Test Steps - * - [2.1.1]. - * - [2.1.2] Resetting pipe. - * - [2.1.3] Writing data, must fail. - * - [2.1.4] Reading data, must fail. - * - [2.1.5] Reactivating pipe. - * - [2.1.6] Filling whole pipe. - * - [2.1.7] Emptying pipe. - * - [2.1.8] Small write. - * - [2.1.9] Filling remaining space. - * - [2.1.10] Small Read. - * - [2.1.11] Reading remaining data. - * - [2.1.12] Small Write. - * - [2.1.13] Small Read. - * - [2.1.14] Write wrapping buffer boundary. - * - [2.1.15] Read wrapping buffer boundary. + * - [2.1.1] Resetting pipe. + * - [2.1.2] Writing data, must fail. + * - [2.1.3] Reading data, must fail. + * - [2.1.4] Reactivating pipe. + * - [2.1.5] Filling whole pipe. + * - [2.1.6] Emptying pipe. + * - [2.1.7] Small write. + * - [2.1.8] Filling remaining space. + * - [2.1.9] Small Read. + * - [2.1.10] Reading remaining data. + * - [2.1.11] Small Write. + * - [2.1.12] Small Read. + * - [2.1.13] Write wrapping buffer boundary. + * - [2.1.14] Read wrapping buffer boundary. * . */ @@ -92,13 +91,8 @@ static void oslib_test_002_001_setup(void) { static void oslib_test_002_001_execute(void) { - /* [2.1.1].*/ + /* [2.1.1] Resetting pipe.*/ test_set_step(1); - { - } - - /* [2.1.2] Resetting pipe.*/ - test_set_step(2); { chPipeReset(&pipe1); @@ -108,35 +102,35 @@ static void oslib_test_002_001_execute(void) { "invalid pipe state"); } - /* [2.1.3] Writing data, must fail.*/ - test_set_step(3); + /* [2.1.2] Writing data, must fail.*/ + test_set_step(2); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == MSG_RESET, "not reset"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == 0, "not reset"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == 0), "invalid pipe state"); } - /* [2.1.4] Reading data, must fail.*/ - test_set_step(4); + /* [2.1.3] Reading data, must fail.*/ + test_set_step(3); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == MSG_RESET, "not reset"); + n = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == 0, "not reset"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == 0), "invalid pipe state"); } - /* [2.1.5] Reactivating pipe.*/ - test_set_step(5); + /* [2.1.4] Reactivating pipe.*/ + test_set_step(4); { chPipeResume(&pipe1); test_assert((pipe1.rdptr == pipe1.buffer) && @@ -145,27 +139,27 @@ static void oslib_test_002_001_execute(void) { "invalid pipe state"); } - /* [2.1.6] Filling whole pipe.*/ - test_set_step(6); + /* [2.1.5] Filling whole pipe.*/ + test_set_step(5); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE, "wrong size"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE, "wrong size"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == PIPE_SIZE), "invalid pipe state"); } - /* [2.1.7] Emptying pipe.*/ - test_set_step(7); + /* [2.1.6] Emptying pipe.*/ + test_set_step(6); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE, "wrong size"); + n = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE, "wrong size"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == 0), @@ -173,40 +167,40 @@ static void oslib_test_002_001_execute(void) { test_assert(memcmp(pipe_pattern, buf, PIPE_SIZE) == 0, "content mismatch"); } - /* [2.1.8] Small write.*/ - test_set_step(8); + /* [2.1.7] Small write.*/ + test_set_step(7); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, 4, TIME_IMMEDIATE); - test_assert(msg == 4, "wrong size"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, 4, TIME_IMMEDIATE); + test_assert(n == 4, "wrong size"); test_assert((pipe1.rdptr != pipe1.wrptr) && (pipe1.rdptr == pipe1.buffer) && (pipe1.cnt == 4), "invalid pipe state"); } - /* [2.1.9] Filling remaining space.*/ - test_set_step(9); + /* [2.1.8] Filling remaining space.*/ + test_set_step(8); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE - 4, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE - 4, "wrong size"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE - 4, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE - 4, "wrong size"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == PIPE_SIZE), "invalid pipe state"); } - /* [2.1.10] Small Read.*/ - test_set_step(10); + /* [2.1.9] Small Read.*/ + test_set_step(9); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, 4, TIME_IMMEDIATE); - test_assert(msg == 4, "wrong size"); + n = chPipeReadTimeout(&pipe1, buf, 4, TIME_IMMEDIATE); + test_assert(n == 4, "wrong size"); test_assert((pipe1.rdptr != pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == PIPE_SIZE - 4), @@ -214,14 +208,14 @@ static void oslib_test_002_001_execute(void) { test_assert(memcmp(pipe_pattern, buf, 4) == 0, "content mismatch"); } - /* [2.1.11] Reading remaining data.*/ - test_set_step(11); + /* [2.1.10] Reading remaining data.*/ + test_set_step(10); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE - 4, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE - 4, "wrong size"); + n = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE - 4, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE - 4, "wrong size"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == 0), @@ -229,27 +223,27 @@ static void oslib_test_002_001_execute(void) { test_assert(memcmp(pipe_pattern, buf, PIPE_SIZE - 4) == 0, "content mismatch"); } - /* [2.1.12] Small Write.*/ - test_set_step(12); + /* [2.1.11] Small Write.*/ + test_set_step(11); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, 5, TIME_IMMEDIATE); - test_assert(msg == 5, "wrong size"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, 5, TIME_IMMEDIATE); + test_assert(n == 5, "wrong size"); test_assert((pipe1.rdptr != pipe1.wrptr) && (pipe1.rdptr == pipe1.buffer) && (pipe1.cnt == 5), "invalid pipe state"); } - /* [2.1.13] Small Read.*/ - test_set_step(13); + /* [2.1.12] Small Read.*/ + test_set_step(12); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, 5, TIME_IMMEDIATE); - test_assert(msg == 5, "wrong size"); + n = chPipeReadTimeout(&pipe1, buf, 5, TIME_IMMEDIATE); + test_assert(n == 5, "wrong size"); test_assert((pipe1.rdptr == pipe1.wrptr) && (pipe1.wrptr != pipe1.buffer) && (pipe1.cnt == 0), @@ -257,27 +251,27 @@ static void oslib_test_002_001_execute(void) { test_assert(memcmp(pipe_pattern, buf, 5) == 0, "content mismatch"); } - /* [2.1.14] Write wrapping buffer boundary.*/ - test_set_step(14); + /* [2.1.13] Write wrapping buffer boundary.*/ + test_set_step(13); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE, "wrong size"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE, "wrong size"); test_assert((pipe1.rdptr == pipe1.wrptr) && (pipe1.wrptr != pipe1.buffer) && (pipe1.cnt == PIPE_SIZE), "invalid pipe state"); } - /* [2.1.15] Read wrapping buffer boundary.*/ - test_set_step(15); + /* [2.1.14] Read wrapping buffer boundary.*/ + test_set_step(14); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE, "wrong size"); + n = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE, "wrong size"); test_assert((pipe1.rdptr == pipe1.wrptr) && (pipe1.wrptr != pipe1.buffer) && (pipe1.cnt == 0), @@ -314,11 +308,11 @@ static void oslib_test_002_002_execute(void) { /* [2.2.1] Reading while pipe is empty.*/ test_set_step(1); { - msg_t msg; + size_t n; uint8_t buf[PIPE_SIZE]; - msg = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == 0, "wrong size"); + n = chPipeReadTimeout(&pipe1, buf, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == 0, "wrong size"); test_assert((pipe1.rdptr == pipe1.buffer) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == 0), @@ -328,10 +322,10 @@ static void oslib_test_002_002_execute(void) { /* [2.2.2] Writing a string larger than pipe buffer.*/ test_set_step(2); { - msg_t msg; + size_t n; - msg = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); - test_assert(msg == PIPE_SIZE / 2, "wrong size"); + n = chPipeWriteTimeout(&pipe1, pipe_pattern, PIPE_SIZE, TIME_IMMEDIATE); + test_assert(n == PIPE_SIZE / 2, "wrong size"); test_assert((pipe1.rdptr == pipe1.wrptr) && (pipe1.wrptr == pipe1.buffer) && (pipe1.cnt == PIPE_SIZE / 2), -- cgit v1.2.3