Added descriptions and code simplified

This commit is contained in:
TexZK 2015-07-08 21:57:53 +02:00
parent 567cfe388f
commit 5270aa500f
4 changed files with 41 additions and 32 deletions

View File

@ -474,8 +474,6 @@ static void dma2d_test(void) {
/* Command line related. */
/*===========================================================================*/
#define RTT2MS(ticks) ((ticks) / (STM32_HCLK / 1000UL))
#if HAL_USE_SERIAL_USB
/* Virtual serial port over USB.*/
SerialUSBDriver SDU1;

View File

@ -66,33 +66,37 @@ static char buffer_a, buffer_b, buffer_c;
static const char text[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n";
/*
* Reads from the front buffer.
/**
* @brief Reads from the front buffer.
*
* @return Buffered character from @p text or special symbol.
* @retval '.' No new front buffer within timeout.
*/
static char read_front(void) {
const char *front;
msg_t error;
char c;
/* Wait until a new front buffer gets available with prepared data */
chSysLock();
error = tribufWaitReadyTimeoutS(&tribuf_handler, reader_timeout);
if (error == MSG_TIMEOUT) {
chSysUnlock();
return (reader_timeout == TIME_IMMEDIATE) ? '.' : '@';
error = tribufWaitReadyTimeout(&tribuf_handler, reader_timeout);
if (error == MSG_OK) {
/* Retrieve the new front buffer */
tribufSwapFront(&tribuf_handler);
front = (const char *)tribufGetFront(&tribuf_handler);
/* Read data from the new front buffer */
c = front[0];
} else {
c = '.'; /* Timeout placeholder */
}
chSysUnlock();
/* Retrieve the new front buffer */
tribufSwapFront(&tribuf_handler);
front = (const char *)tribufGetFront(&tribuf_handler);
/* Read data from the new front buffer */
return front[0];
return c;
}
/*
* Overwrites the back buffer with the provided character.
* @brief Overwrites the back buffer with the provided character.
*
* @param[in] c Character to store into the current back buffer.
*/
static void write_back(char c) {
@ -123,9 +127,11 @@ static THD_FUNCTION(reader_thread, arg) {
old_priority = chThdGetPriorityX();
for (;;) {
/* Read from the fron buffer and print the retrieved character */
c = read_front();
chprintf(chout, "%c", c);
/* Change priority, suspend or delay */
osalSysLock();
palTogglePad(GPIOG, GPIOG_LED3_GREEN);
if (old_priority != reader_priority) {
@ -160,9 +166,11 @@ static THD_FUNCTION(writer_thread, arg) {
for (;;) {
for (i = 0; i < sizeof(text); ++i) {
/* Write the next character on the current back buffer */
c = text[i];
write_back(c);
/* Change priority, suspend or delay */
osalSysLock();
palTogglePad(GPIOG, GPIOG_LED4_RED);
if (old_priority != writer_priority) {

View File

@ -8,20 +8,23 @@ The demo runs on an ST STM32F429I-Discovery board.
** The Demo **
A simple command shell is activated on virtual serial port SD1.
TODO
This demo shows how to use a triple buffer handler, with one writer thread and
one reader thread.
The writer thread puts a character into the current back buffer, thus swapping
the back buffer with the orphan buffer for a new write. The writer then sleeps
for a specified delay in milliseconds.
The reader thread gets waits (if there is a timeout) until the orphan buffer
contains available data, becoming the new front buffer. The character is read
from the new front buffer and printed. The reader then sleeps for a specified
delay in milliseconds.
A simple command shell is activated on virtual serial port SD1 or SDU1.
Via command line it is possible to start, stop, set the delay, and set the
thread priority of the reader and writer threads.
The reader can also be assigned a wait timeout in milliseconds, with special
cases of "*" for infinite timeout, and "-" (or 0 ms) for none.
** Build Procedure **
The demo has been tested by using the free Codesourcery GCC-based toolchain
and YAGARTO. just modify the TRGT line in the makefile in order to use
The demo has been tested by using the free GNU Tools ARM Embedded toolchain
and ChibiStudio. Just modify the TRGT line in the makefile in order to use
different GCC toolchains.
** Notes **
Some files used by the demo are not part of ChibiOS/RT but are copyright of
ST Microelectronics and are licensed under a different license.
Also note that not all the files present in the ST library are distributed
with ChibiOS/RT, you can find the whole library on the ST web site:
http://www.st.com

View File

@ -38,10 +38,10 @@
* @{
*/
#if !defined(TRIBUF_USE_WAIT) || defined(__DOXYGEN__)
/**
* @brief Triple buffers use blocking functions.
*/
#if !defined(TRIBUF_USE_WAIT) || defined(__DOXYGEN__)
#define TRIBUF_USE_WAIT TRUE
#endif