// A co-routine that posts a character to a queue then blocks for a fixed
 // period.  The character is incremented each time.
 static void vSendingCoRoutine( CoRoutineHandle_t xHandle,
                                UBaseType_t uxIndex )
 {
 // cChar holds its value while this co-routine is blocked and must therefore
 // be declared static.
 static char cCharToTx = 'a';
 BaseType_t xResult;
     // All co-routines must start with a call to crSTART().
     crSTART( xHandle );
     for( ;; )
     {
         // Send the next character to the queue.
         crQUEUE_SEND( xHandle,
                       xCoRoutineQueue,
                       &cCharToTx,
                       NO_DELAY,
                       &xResult );
         if( xResult == pdPASS )
         {
             // The character was successfully posted to the queue.
         }
         else
         {
             // Could not post the character to the queue.
         }
         // Enable the UART Tx interrupt to cause an interrupt in this
         // hypothetical UART.  The interrupt will obtain the character
         // from the queue and send it.
         ENABLE_RX_INTERRUPT();
         // Increment to the next character then block for a fixed period.
         // cCharToTx will maintain its value across the delay as it is
         // declared static.
         cCharToTx++;
         if( cCharToTx > 'x' )
         {
             cCharToTx = 'a';
         }
         crDELAY( 100 );
     }
     // All co-routines must end with a call to crEND().
     crEND();
 }
 // An ISR that uses a queue to receive characters to send on a UART.
 void vUART_ISR( void )
 {
 char cCharToTx;
 BaseType_t xCRWokenByPost = pdFALSE;
     while( UART_TX_REG_EMPTY() )
     {
         // Are there any characters in the queue waiting to be sent?
         // xCRWokenByPost will automatically be set to pdTRUE if a co-routine
         // is woken by the post - ensuring that only a single co-routine is
         // woken no matter how many times we go around this loop.
         if( crQUEUE_RECEIVE_FROM_ISR( xQueue, &cCharToTx, &xCRWokenByPost ) )
         {
             SEND_CHARACTER( cCharToTx );
         }
     }
 }
						 
						 Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.  
							
						 | 
		
			
			 
 Latest News 
			NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS. Meet Richard Barry and learn about running FreeRTOS on RISC-V at FOSDEM 2019 Version 10.1.1 of the FreeRTOS kernel is available for immediate download. MIT licensed. View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS. Careers 
			FreeRTOS and other embedded software careers at AWS. FreeRTOS Partners 
			
			 
			 
			 
			 
			 
			 
			
			 
			 
  | 
	|||||||||||||||||||||||||