diff --git a/include/queue.h b/include/queue.h
index 6ccc371..262ad06 100644
--- a/include/queue.h
+++ b/include/queue.h
@@ -79,12 +79,12 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * QueueHandle_t xQueueCreate(
  *                            UBaseType_t uxQueueLength,
  *                            UBaseType_t uxItemSize
  *                        );
- * </pre>
+ * @endcode
  *
  * Creates a new queue instance, and returns a handle by which the new queue
  * can be referenced.
@@ -113,7 +113,7 @@
  * returned.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -141,7 +141,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueCreate xQueueCreate
  * \ingroup QueueManagement
  */
@@ -151,14 +151,14 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * QueueHandle_t xQueueCreateStatic(
  *                            UBaseType_t uxQueueLength,
  *                            UBaseType_t uxItemSize,
  *                            uint8_t *pucQueueStorage,
  *                            StaticQueue_t *pxQueueBuffer
  *                        );
- * </pre>
+ * @endcode
  *
  * Creates a new queue instance, and returns a handle by which the new queue
  * can be referenced.
@@ -195,7 +195,7 @@
  * returned.  If pxQueueBuffer is NULL then NULL is returned.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -227,7 +227,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueCreateStatic xQueueCreateStatic
  * \ingroup QueueManagement
  */
@@ -237,13 +237,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueSendToToFront(
  *                                 QueueHandle_t    xQueue,
  *                                 const void       *pvItemToQueue,
  *                                 TickType_t       xTicksToWait
  *                             );
- * </pre>
+ * @endcode
  *
  * Post an item to the front of a queue.  The item is queued by copy, not by
  * reference.  This function must not be called from an interrupt service
@@ -266,7 +266,7 @@
  * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -309,7 +309,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueSend xQueueSend
  * \ingroup QueueManagement
  */
@@ -318,13 +318,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueSendToBack(
  *                                 QueueHandle_t    xQueue,
  *                                 const void       *pvItemToQueue,
  *                                 TickType_t       xTicksToWait
  *                             );
- * </pre>
+ * @endcode
  *
  * This is a macro that calls xQueueGenericSend().
  *
@@ -349,7 +349,7 @@
  * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -392,7 +392,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueSend xQueueSend
  * \ingroup QueueManagement
  */
@@ -401,13 +401,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueSend(
  *                            QueueHandle_t xQueue,
  *                            const void * pvItemToQueue,
  *                            TickType_t xTicksToWait
  *                       );
- * </pre>
+ * @endcode
  *
  * This is a macro that calls xQueueGenericSend().  It is included for
  * backward compatibility with versions of FreeRTOS.org that did not
@@ -434,7 +434,7 @@
  * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -477,7 +477,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueSend xQueueSend
  * \ingroup QueueManagement
  */
@@ -486,12 +486,12 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueOverwrite(
  *                            QueueHandle_t xQueue,
  *                            const void * pvItemToQueue
  *                       );
- * </pre>
+ * @endcode
  *
  * Only for use with queues that have a length of one - so the queue is either
  * empty or full.
@@ -515,7 +515,7 @@
  * to the queue even when the queue is already full.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  *
  * void vFunction( void *pvParameters )
  * {
@@ -561,7 +561,7 @@
  *
  *  // ...
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueOverwrite xQueueOverwrite
  * \ingroup QueueManagement
  */
@@ -571,14 +571,14 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueGenericSend(
  *                                  QueueHandle_t xQueue,
  *                                  const void * pvItemToQueue,
  *                                  TickType_t xTicksToWait
  *                                  BaseType_t xCopyPosition
  *                              );
- * </pre>
+ * @endcode
  *
  * It is preferred that the macros xQueueSend(), xQueueSendToFront() and
  * xQueueSendToBack() are used in place of calling this function directly.
@@ -607,7 +607,7 @@
  * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -650,7 +650,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueSend xQueueSend
  * \ingroup QueueManagement
  */
@@ -661,13 +661,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueuePeek(
  *                           QueueHandle_t xQueue,
  *                           void * const pvBuffer,
  *                           TickType_t xTicksToWait
  *                       );
- * </pre>
+ * @endcode
  *
  * Receive an item from a queue without removing the item from the queue.
  * The item is received by copy so a buffer of adequate size must be
@@ -698,7 +698,7 @@
  * otherwise pdFALSE.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -748,7 +748,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueuePeek xQueuePeek
  * \ingroup QueueManagement
  */
@@ -758,12 +758,12 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueuePeekFromISR(
  *                                  QueueHandle_t xQueue,
  *                                  void *pvBuffer,
  *                              );
- * </pre>
+ * @endcode
  *
  * A version of xQueuePeek() that can be called from an interrupt service
  * routine (ISR).
@@ -793,13 +793,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueReceive(
  *                               QueueHandle_t xQueue,
  *                               void *pvBuffer,
  *                               TickType_t xTicksToWait
  *                          );
- * </pre>
+ * @endcode
  *
  * Receive an item from a queue.  The item is received by copy so a buffer of
  * adequate size must be provided.  The number of bytes copied into the buffer
@@ -827,7 +827,7 @@
  * otherwise pdFALSE.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  * struct AMessage
  * {
  *  char ucMessageID;
@@ -877,7 +877,7 @@
  *
  *  // ... Rest of task code.
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueReceive xQueueReceive
  * \ingroup QueueManagement
  */
@@ -887,9 +887,9 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );
- * </pre>
+ * @endcode
  *
  * Return the number of messages stored in a queue.
  *
@@ -904,9 +904,9 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );
- * </pre>
+ * @endcode
  *
  * Return the number of free spaces available in a queue.  This is equal to the
  * number of items that can be sent to the queue before the queue becomes full
@@ -923,9 +923,9 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * void vQueueDelete( QueueHandle_t xQueue );
- * </pre>
+ * @endcode
  *
  * Delete a queue - freeing all the memory allocated for storing of items
  * placed on the queue.
@@ -939,13 +939,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueSendToFrontFromISR(
  *                                       QueueHandle_t xQueue,
  *                                       const void *pvItemToQueue,
  *                                       BaseType_t *pxHigherPriorityTaskWoken
  *                                    );
- * </pre>
+ * @endcode
  *
  * This is a macro that calls xQueueGenericSendFromISR().
  *
@@ -974,7 +974,7 @@
  *
  * Example usage for buffered IO (where the ISR can obtain more than one value
  * per call):
- * <pre>
+ * @code{c}
  * void vBufferISR( void )
  * {
  * char cIn;
@@ -1000,7 +1000,7 @@
  *      taskYIELD ();
  *  }
  * }
- * </pre>
+ * @endcode
  *
  * \defgroup xQueueSendFromISR xQueueSendFromISR
  * \ingroup QueueManagement
@@ -1011,13 +1011,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueSendToBackFromISR(
  *                                       QueueHandle_t xQueue,
  *                                       const void *pvItemToQueue,
  *                                       BaseType_t *pxHigherPriorityTaskWoken
  *                                    );
- * </pre>
+ * @endcode
  *
  * This is a macro that calls xQueueGenericSendFromISR().
  *
@@ -1046,7 +1046,7 @@
  *
  * Example usage for buffered IO (where the ISR can obtain more than one value
  * per call):
- * <pre>
+ * @code{c}
  * void vBufferISR( void )
  * {
  * char cIn;
@@ -1072,7 +1072,7 @@
  *      taskYIELD ();
  *  }
  * }
- * </pre>
+ * @endcode
  *
  * \defgroup xQueueSendFromISR xQueueSendFromISR
  * \ingroup QueueManagement
@@ -1082,13 +1082,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueOverwriteFromISR(
  *                            QueueHandle_t xQueue,
  *                            const void * pvItemToQueue,
  *                            BaseType_t *pxHigherPriorityTaskWoken
  *                       );
- * </pre>
+ * @endcode
  *
  * A version of xQueueOverwrite() that can be used in an interrupt service
  * routine (ISR).
@@ -1119,7 +1119,7 @@
  * the queue is already full.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  *
  * QueueHandle_t xQueue;
  *
@@ -1161,7 +1161,7 @@
  *      portYIELD_FROM_ISR(); // or portEND_SWITCHING_ISR() depending on the port.
  *  }
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR
  * \ingroup QueueManagement
  */
@@ -1170,13 +1170,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueSendFromISR(
  *                                   QueueHandle_t xQueue,
  *                                   const void *pvItemToQueue,
  *                                   BaseType_t *pxHigherPriorityTaskWoken
  *                              );
- * </pre>
+ * @endcode
  *
  * This is a macro that calls xQueueGenericSendFromISR().  It is included
  * for backward compatibility with versions of FreeRTOS.org that did not
@@ -1208,7 +1208,7 @@
  *
  * Example usage for buffered IO (where the ISR can obtain more than one value
  * per call):
- * <pre>
+ * @code{c}
  * void vBufferISR( void )
  * {
  * char cIn;
@@ -1235,7 +1235,7 @@
  *      portYIELD_FROM_ISR ();
  *  }
  * }
- * </pre>
+ * @endcode
  *
  * \defgroup xQueueSendFromISR xQueueSendFromISR
  * \ingroup QueueManagement
@@ -1245,14 +1245,14 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueGenericSendFromISR(
  *                                         QueueHandle_t    xQueue,
  *                                         const    void    *pvItemToQueue,
  *                                         BaseType_t  *pxHigherPriorityTaskWoken,
  *                                         BaseType_t  xCopyPosition
  *                                     );
- * </pre>
+ * @endcode
  *
  * It is preferred that the macros xQueueSendFromISR(),
  * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place
@@ -1288,7 +1288,7 @@
  *
  * Example usage for buffered IO (where the ISR can obtain more than one value
  * per call):
- * <pre>
+ * @code{c}
  * void vBufferISR( void )
  * {
  * char cIn;
@@ -1315,7 +1315,7 @@
  *      portYIELD_FROM_ISR();
  *  }
  * }
- * </pre>
+ * @endcode
  *
  * \defgroup xQueueSendFromISR xQueueSendFromISR
  * \ingroup QueueManagement
@@ -1329,13 +1329,13 @@
 
 /**
  * queue. h
- * <pre>
+ * @code{c}
  * BaseType_t xQueueReceiveFromISR(
  *                                     QueueHandle_t    xQueue,
  *                                     void             *pvBuffer,
  *                                     BaseType_t       *pxTaskWoken
  *                                 );
- * </pre>
+ * @endcode
  *
  * Receive an item from a queue.  It is safe to use this function from within an
  * interrupt service routine.
@@ -1355,7 +1355,7 @@
  * otherwise pdFALSE.
  *
  * Example usage:
- * <pre>
+ * @code{c}
  *
  * QueueHandle_t xQueue;
  *
@@ -1410,7 +1410,7 @@
  *      taskYIELD ();
  *  }
  * }
- * </pre>
+ * @endcode
  * \defgroup xQueueReceiveFromISR xQueueReceiveFromISR
  * \ingroup QueueManagement
  */
