прерывание юсарта:
Код
{
static signed portBASE_TYPE xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR( xBinarySemaphoreUSART0RXvect, &xHigherPriorityTaskWoken );
if( xHigherPriorityTaskWoken != pdFALSE )
{
taskYIELD();
}
}
static signed portBASE_TYPE xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR( xBinarySemaphoreUSART0RXvect, &xHigherPriorityTaskWoken );
if( xHigherPriorityTaskWoken != pdFALSE )
{
taskYIELD();
}
}
"отложенный" обработчик RX юсарта:
Код
static void prvUSART0RXvectTask( void *pvParameters )
{
( void ) pvParameters;
uint8_t cChar;
for(;; )
{
xSemaphoreTake( xBinarySemaphoreUSART0RXvect, portMAX_DELAY );
if ( UCSR0A & ((1<<FE0)|(1<<DOR0)|(1<<UPE0)) )
cChar = 0xFF;
else
cChar = UDR0;
xQueueSendToBack( xRxedChars[0], &cChar, xNoBlock );
}
}
{
( void ) pvParameters;
uint8_t cChar;
for(;; )
{
xSemaphoreTake( xBinarySemaphoreUSART0RXvect, portMAX_DELAY );
if ( UCSR0A & ((1<<FE0)|(1<<DOR0)|(1<<UPE0)) )
cChar = 0xFF;
else
cChar = UDR0;
xQueueSendToBack( xRxedChars[0], &cChar, xNoBlock );
}
}
и само "эхо":
Код
static void prvUSARTEchoTask0( void *pvParameters )
{
uint8_t cChar;
( void ) pvParameters;
for(;; )
{
if ( pdTRUE == xSerialGetChar ( mainUSART0, &cChar, portMAX_DELAY ) )
xSerialPutChar( mainUSART0, cChar, xNoBlock );
}
}
{
uint8_t cChar;
( void ) pvParameters;
for(;; )
{
if ( pdTRUE == xSerialGetChar ( mainUSART0, &cChar, portMAX_DELAY ) )
xSerialPutChar( mainUSART0, cChar, xNoBlock );
}
}