diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 46bd0bb..ec5d6e5 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -17,7 +17,7 @@
 
 ## Submitting a bugs/feature request
 Have a bug to report or feature to request? Follow these steps:
-1. Search on the [FreeRTOS Community Support Forums](https://forums.freertos.org/) and [GitHub issue tracker](https://github.com/FreeRTOS/FreeRTOS/issues?utf8=%E2%9C%93&q=is%3Aissue) to be sure this hasn't been already reported or discussed. 
+1. Search on the [FreeRTOS Community Support Forums](https://forums.freertos.org/) and [GitHub issue tracker](https://github.com/FreeRTOS/FreeRTOS/issues?utf8=%E2%9C%93&q=is%3Aissue) to be sure this hasn't been already reported or discussed.
 2. If your search turns up empty, create a new topic in the [forums](https://forums.freertos.org/) and work with the community to help clarify issues or refine the idea. Include as many of the details listed below.
 3. Once the community has had time to discuss and digest, we welcome you to create an [issue](https://github.com/FreeRTOS/FreeRTOS/issues) to report bugs or suggest features.
 
@@ -43,8 +43,8 @@
 2. Modify the source; focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change.
 3. Follow the [coding style guide](https://www.FreeRTOS.org/FreeRTOS-Coding-Standard-and-Style-Guide.html).
 4. Commit to your fork using clear commit messages.
-5. Send us a pull request, answering any default questions in the pull request interface.    
-   NOTE: Please make sure the default option (Allow edits from maintainers) is left checked.    
+5. Send us a pull request, answering any default questions in the pull request interface.
+   NOTE: Please make sure the default option (Allow edits from maintainers) is left checked.
 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation.
 
 GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
index d1ad7d3..96f3595 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -24,7 +24,7 @@
 
 **To Reproduce**
 - Use project ... and configure with ...
-- Run on ... and could observe ... 
+- Run on ... and could observe ...
 
 **Expected behavior**
 A concise description of what you expected to happen.
diff --git a/.github/ISSUE_TEMPLATE/documentation-issue.md b/.github/ISSUE_TEMPLATE/documentation-issue.md
index 7f48e7a..e5c1a19 100644
--- a/.github/ISSUE_TEMPLATE/documentation-issue.md
+++ b/.github/ISSUE_TEMPLATE/documentation-issue.md
@@ -11,7 +11,7 @@
 Please describe the issue and expected clarification in concise language.
 
 **Reference**
-Please attach the URL at which you are experiencing the issue. 
+Please attach the URL at which you are experiencing the issue.
 
 **Screenshot**
 If applicable, please attach screenshot.
diff --git a/.github/uncrustify.cfg b/.github/uncrustify.cfg
new file mode 100644
index 0000000..0cb7d3f
--- /dev/null
+++ b/.github/uncrustify.cfg
@@ -0,0 +1,160 @@
+# Uncrustify-0.67
+input_tab_size                  = 4        # unsigned number
+output_tab_size                 = 4        # unsigned number
+sp_arith                        = force    # ignore/add/remove/force
+sp_assign                       = force    # ignore/add/remove/force
+sp_assign_default               = force    # ignore/add/remove/force
+sp_before_assign                = force    # ignore/add/remove/force
+sp_after_assign                 = force    # ignore/add/remove/force
+sp_enum_assign                  = force    # ignore/add/remove/force
+sp_enum_before_assign           = force    # ignore/add/remove/force
+sp_enum_after_assign            = force    # ignore/add/remove/force
+sp_pp_stringify                 = add      # ignore/add/remove/force
+sp_bool                         = force    # ignore/add/remove/force
+sp_compare                      = force    # ignore/add/remove/force
+sp_inside_paren                 = force    # ignore/add/remove/force
+sp_paren_paren                  = force    # ignore/add/remove/force
+sp_paren_brace                  = force    # ignore/add/remove/force
+sp_before_ptr_star              = force    # ignore/add/remove/force
+sp_before_unnamed_ptr_star      = force    # ignore/add/remove/force
+sp_between_ptr_star             = remove   # ignore/add/remove/force
+sp_after_ptr_star               = force    # ignore/add/remove/force
+sp_before_byref                 = force    # ignore/add/remove/force
+sp_after_byref                  = remove   # ignore/add/remove/force
+sp_after_byref_func             = remove   # ignore/add/remove/force
+sp_before_angle                 = remove   # ignore/add/remove/force
+sp_inside_angle                 = remove   # ignore/add/remove/force
+sp_after_angle                  = force    # ignore/add/remove/force
+sp_before_sparen                = remove   # ignore/add/remove/force
+sp_inside_sparen                = force    # ignore/add/remove/force
+sp_after_sparen                 = force    # ignore/add/remove/force
+sp_sparen_brace                 = force    # ignore/add/remove/force
+sp_before_semi_for              = remove   # ignore/add/remove/force
+sp_before_semi_for_empty        = add      # ignore/add/remove/force
+sp_after_semi_for_empty         = force    # ignore/add/remove/force
+sp_before_square                = remove   # ignore/add/remove/force
+sp_before_squares               = remove   # ignore/add/remove/force
+sp_inside_square                = force    # ignore/add/remove/force
+sp_after_comma                  = force    # ignore/add/remove/force
+sp_after_cast                   = force    # ignore/add/remove/force
+sp_inside_paren_cast            = force    # ignore/add/remove/force
+sp_sizeof_paren                 = remove   # ignore/add/remove/force
+sp_inside_braces_enum           = force    # ignore/add/remove/force
+sp_inside_braces_struct         = force    # ignore/add/remove/force
+sp_inside_braces                = force    # ignore/add/remove/force
+sp_inside_braces_empty          = remove   # ignore/add/remove/force
+sp_type_func                    = force    # ignore/add/remove/force
+sp_func_proto_paren             = remove   # ignore/add/remove/force
+sp_func_def_paren               = remove   # ignore/add/remove/force
+sp_inside_fparens               = remove   # ignore/add/remove/force
+sp_inside_fparen                = force    # ignore/add/remove/force
+sp_fparen_brace                 = add      # ignore/add/remove/force
+sp_func_call_paren              = remove   # ignore/add/remove/force
+sp_func_class_paren             = remove   # ignore/add/remove/force
+sp_return_paren                 = remove   # ignore/add/remove/force
+sp_attribute_paren              = remove   # ignore/add/remove/force
+sp_defined_paren                = remove   # ignore/add/remove/force
+sp_macro                        = force    # ignore/add/remove/force
+sp_macro_func                   = force    # ignore/add/remove/force
+sp_brace_typedef                = force    # ignore/add/remove/force
+sp_before_dc                    = remove   # ignore/add/remove/force
+sp_after_dc                     = remove   # ignore/add/remove/force
+sp_cond_colon                   = force    # ignore/add/remove/force
+sp_cond_question                = force    # ignore/add/remove/force
+sp_case_label                   = force    # ignore/add/remove/force
+sp_endif_cmt                    = force    # ignore/add/remove/force
+sp_before_tr_emb_cmt            = force    # ignore/add/remove/force
+sp_num_before_tr_emb_cmt        = 1        # unsigned number
+indent_columns                  = 4        # unsigned number
+indent_with_tabs                = 0        # unsigned number
+indent_align_string             = true     # false/true
+indent_class                    = true     # false/true
+indent_class_colon              = true     # false/true
+indent_member                   = 3        # unsigned number
+indent_switch_case              = 4        # unsigned number
+indent_case_brace               = 3        # number
+nl_assign_leave_one_liners      = true     # false/true
+nl_class_leave_one_liners       = true     # false/true
+nl_start_of_file                = remove   # ignore/add/remove/force
+nl_end_of_file                  = force    # ignore/add/remove/force
+nl_end_of_file_min              = 1        # unsigned number
+nl_assign_brace                 = add      # ignore/add/remove/force
+nl_func_var_def_blk             = 1        # unsigned number
+nl_fcall_brace                  = add      # ignore/add/remove/force
+nl_enum_brace                   = force    # ignore/add/remove/force
+nl_struct_brace                 = force    # ignore/add/remove/force
+nl_union_brace                  = force    # ignore/add/remove/force
+nl_if_brace                     = add      # ignore/add/remove/force
+nl_brace_else                   = add      # ignore/add/remove/force
+nl_else_brace                   = add      # ignore/add/remove/force
+nl_getset_brace                 = force    # ignore/add/remove/force
+nl_for_brace                    = add      # ignore/add/remove/force
+nl_while_brace                  = add      # ignore/add/remove/force
+nl_do_brace                     = add      # ignore/add/remove/force
+nl_switch_brace                 = add      # ignore/add/remove/force
+nl_multi_line_define            = true     # false/true
+nl_before_case                  = true     # false/true
+nl_after_case                   = true     # false/true
+nl_func_type_name               = remove   # ignore/add/remove/force
+nl_func_proto_type_name         = remove   # ignore/add/remove/force
+nl_func_paren                   = remove   # ignore/add/remove/force
+nl_func_def_paren               = remove   # ignore/add/remove/force
+nl_func_decl_start              = remove   # ignore/add/remove/force
+nl_func_def_start               = remove   # ignore/add/remove/force
+nl_func_decl_args               = add      # ignore/add/remove/force
+nl_func_def_args                = add      # ignore/add/remove/force
+nl_func_decl_end                = remove   # ignore/add/remove/force
+nl_func_def_end                 = remove   # ignore/add/remove/force
+nl_fdef_brace                   = add      # ignore/add/remove/force
+nl_after_semicolon              = true     # false/true
+nl_after_brace_open             = true     # false/true
+nl_after_brace_close            = true     # false/true
+nl_squeeze_ifdef                = true     # false/true
+nl_before_if                    = force    # ignore/add/remove/force
+nl_after_if                     = force    # ignore/add/remove/force
+nl_before_for                   = force    # ignore/add/remove/force
+nl_after_for                    = force    # ignore/add/remove/force
+nl_before_while                 = force    # ignore/add/remove/force
+nl_after_while                  = force    # ignore/add/remove/force
+nl_before_switch                = force    # ignore/add/remove/force
+nl_after_switch                 = force    # ignore/add/remove/force
+nl_before_do                    = force    # ignore/add/remove/force
+nl_after_do                     = force    # ignore/add/remove/force
+nl_max                          = 4        # unsigned number
+nl_after_func_proto_group       = 1        # unsigned number
+nl_after_func_body_class        = 2        # unsigned number
+nl_before_block_comment         = 2        # unsigned number
+eat_blanks_after_open_brace     = true     # false/true
+eat_blanks_before_close_brace   = true     # false/true
+nl_after_return                 = true     # false/true
+pos_bool                        = trail    # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+align_var_def_amp_style         = 1        # unsigned number
+align_var_def_thresh            = 16       # unsigned number
+align_assign_thresh             = 12       # unsigned number
+align_struct_init_span          = 3        # unsigned number
+align_typedef_gap               = 3        # unsigned number
+align_typedef_span              = 5        # unsigned number
+align_typedef_star_style        = 1        # unsigned number
+align_typedef_amp_style         = 1        # unsigned number
+align_right_cmt_span            = 3        # unsigned number
+align_nl_cont                   = true     # false/true
+align_pp_define_gap             = 4        # unsigned number
+align_pp_define_span            = 3        # unsigned number
+cmt_cpp_to_c                    = true     # false/true
+cmt_star_cont                   = true     # false/true
+mod_full_brace_do               = add      # ignore/add/remove/force
+mod_full_brace_for              = add      # ignore/add/remove/force
+mod_full_brace_if               = add      # ignore/add/remove/force
+mod_full_brace_while            = add      # ignore/add/remove/force
+mod_full_paren_if_bool          = true     # false/true
+mod_remove_extra_semicolon      = true     # false/true
+mod_add_long_ifdef_endif_comment = 10      # unsigned number
+mod_add_long_ifdef_else_comment = 10       # unsigned number
+mod_case_brace                  = remove   # ignore/add/remove/force
+mod_remove_empty_return         = true     # false/true
+pp_indent                       = force    # ignore/add/remove/force
+pp_indent_at_level              = true     # false/true
+pp_indent_count                 = 4        # unsigned number
+pp_space                        = remove   # ignore/add/remove/force
+pp_if_indent_code               = true     # false/true
+# option(s) with 'not default' value: 158
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 50c1b18..6e7f864 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -34,6 +34,27 @@
           else
             exit 1
           fi
+  formatting:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Install Uncrustify
+        run: sudo apt-get install uncrustify
+      - name: Run Uncrustify
+        run: |
+          uncrustify --version
+          find . \( -name portable \) -prune -false -o -iname "*.[hc]" -exec uncrustify --check -c .github/uncrustify.cfg {} +
+      - name: Check For Trailing Whitespace
+        run: |
+          set +e
+          grep --exclude="README.md" --exclude-dir="portable"  -rnI -e "[[:blank:]]$" .
+          if [ "$?" = "0" ]; then
+            echo "Files have trailing whitespace."
+            exit 1
+          else
+            exit 0
+          fi
+
   url-check:
     runs-on: ubuntu-latest
     steps:
diff --git a/include/FreeRTOS.h b/include/FreeRTOS.h
index ffb1f74..fc4d363 100644
--- a/include/FreeRTOS.h
+++ b/include/FreeRTOS.h
@@ -47,7 +47,7 @@
  *     contains the typedefs required to build FreeRTOS.  Read the instructions
  *     in FreeRTOS/source/stdint.readme for more information.
  */
-#include <stdint.h>     /* READ COMMENT ABOVE. */
+#include <stdint.h> /* READ COMMENT ABOVE. */
 
 /* *INDENT-OFF* */
 #ifdef __cplusplus
@@ -130,21 +130,23 @@
 
 #ifdef INCLUDE_xTaskDelayUntil
     #ifdef INCLUDE_vTaskDelayUntil
-        /* INCLUDE_vTaskDelayUntil was replaced by INCLUDE_xTaskDelayUntil.  Backward
-         * compatibility is maintained if only one or the other is defined, but
-         * there is a conflict if both are defined. */
+
+/* INCLUDE_vTaskDelayUntil was replaced by INCLUDE_xTaskDelayUntil.  Backward
+ * compatibility is maintained if only one or the other is defined, but
+ * there is a conflict if both are defined. */
         #error INCLUDE_vTaskDelayUntil and INCLUDE_xTaskDelayUntil are both defined.  INCLUDE_vTaskDelayUntil is no longer required and should be removed
     #endif
 #endif
 
 #ifndef INCLUDE_xTaskDelayUntil
     #ifdef INCLUDE_vTaskDelayUntil
-        /* If INCLUDE_vTaskDelayUntil is set but INCLUDE_xTaskDelayUntil is not then
-         * the project's FreeRTOSConfig.h probably pre-dates the introduction of
-         * xTaskDelayUntil and setting INCLUDE_xTaskDelayUntil to whatever
-         * INCLUDE_vTaskDelayUntil is set to will ensure backward compatibility.
-         */
-        #define INCLUDE_xTaskDelayUntil INCLUDE_vTaskDelayUntil
+
+/* If INCLUDE_vTaskDelayUntil is set but INCLUDE_xTaskDelayUntil is not then
+ * the project's FreeRTOSConfig.h probably pre-dates the introduction of
+ * xTaskDelayUntil and setting INCLUDE_xTaskDelayUntil to whatever
+ * INCLUDE_vTaskDelayUntil is set to will ensure backward compatibility.
+ */
+        #define INCLUDE_xTaskDelayUntil    INCLUDE_vTaskDelayUntil
     #endif
 #endif
 
@@ -906,6 +908,7 @@
 #endif
 
 #ifndef configRUN_TIME_COUNTER_TYPE
+
 /* Defaults to uint32_t for backward compatibility, but can be overridden in
  * FreeRTOSConfig.h if uint32_t is too restrictive. */
 
diff --git a/include/list.h b/include/list.h
index 72d6e75..b45a43e 100644
--- a/include/list.h
+++ b/include/list.h
@@ -307,23 +307,23 @@
  * \page listREMOVE_ITEM listREMOVE_ITEM
  * \ingroup LinkedList
  */
-#define listREMOVE_ITEM( pxItemToRemove )                                           \
-{                                                                                   \
-    /* The list item knows which list it is in.  Obtain the list from the list      \
-     * item. */                                                                     \
-    List_t * const pxList = ( pxItemToRemove )->pxContainer;                        \
-                                                                                    \
-    ( pxItemToRemove )->pxNext->pxPrevious = ( pxItemToRemove )->pxPrevious;        \
-    ( pxItemToRemove )->pxPrevious->pxNext = ( pxItemToRemove )->pxNext;            \
-    /* Make sure the index is left pointing to a valid item. */                     \
-    if( pxList->pxIndex == ( pxItemToRemove ) )                                     \
-    {                                                                               \
-        pxList->pxIndex = ( pxItemToRemove )->pxPrevious;                           \
-    }                                                                               \
-                                                                                    \
-    ( pxItemToRemove )->pxContainer = NULL;                                         \
-    ( pxList->uxNumberOfItems )--;                                                  \
-}
+#define listREMOVE_ITEM( pxItemToRemove ) \
+    {                                     \
+        /* The list item knows which list it is in.  Obtain the list from the list \
+         * item. */                                                              \
+        List_t * const pxList = ( pxItemToRemove )->pxContainer;                 \
+                                                                                 \
+        ( pxItemToRemove )->pxNext->pxPrevious = ( pxItemToRemove )->pxPrevious; \
+        ( pxItemToRemove )->pxPrevious->pxNext = ( pxItemToRemove )->pxNext;     \
+        /* Make sure the index is left pointing to a valid item. */              \
+        if( pxList->pxIndex == ( pxItemToRemove ) )                              \
+        {                                                                        \
+            pxList->pxIndex = ( pxItemToRemove )->pxPrevious;                    \
+        }                                                                        \
+                                                                                 \
+        ( pxItemToRemove )->pxContainer = NULL;                                  \
+        ( pxList->uxNumberOfItems )--;                                           \
+    }
 
 /*
  * Inline version of vListInsertEnd() to provide slight optimisation for
@@ -347,30 +347,30 @@
  * \page listINSERT_END listINSERT_END
  * \ingroup LinkedList
  */
-#define listINSERT_END( pxList, pxNewListItem )                                     \
-{                                                                                   \
-    ListItem_t * const pxIndex = ( pxList )->pxIndex;                               \
-                                                                                    \
-    /* Only effective when configASSERT() is also defined, these tests may catch    \
-     * the list data structures being overwritten in memory.  They will not catch   \
-     * data errors caused by incorrect configuration or use of FreeRTOS. */         \
-    listTEST_LIST_INTEGRITY( ( pxList ) );                                          \
-    listTEST_LIST_ITEM_INTEGRITY( ( pxNewListItem ) );                              \
-                                                                                    \
-    /* Insert a new list item into ( pxList ), but rather than sort the list,       \
-     * makes the new list item the last item to be removed by a call to             \
-     * listGET_OWNER_OF_NEXT_ENTRY(). */                                            \
-    ( pxNewListItem )->pxNext = pxIndex;                                            \
-    ( pxNewListItem )->pxPrevious = pxIndex->pxPrevious;                            \
-                                                                                    \
-    pxIndex->pxPrevious->pxNext = ( pxNewListItem );                                \
-    pxIndex->pxPrevious = ( pxNewListItem );                                        \
-                                                                                    \
-    /* Remember which list the item is in. */                                       \
-    ( pxNewListItem )->pxContainer = ( pxList );                                    \
-                                                                                    \
-    ( ( pxList )->uxNumberOfItems )++;                                              \
-}
+#define listINSERT_END( pxList, pxNewListItem )           \
+    {                                                     \
+        ListItem_t * const pxIndex = ( pxList )->pxIndex; \
+                                                          \
+        /* Only effective when configASSERT() is also defined, these tests may catch \
+         * the list data structures being overwritten in memory.  They will not catch \
+         * data errors caused by incorrect configuration or use of FreeRTOS. */ \
+        listTEST_LIST_INTEGRITY( ( pxList ) );                                  \
+        listTEST_LIST_ITEM_INTEGRITY( ( pxNewListItem ) );                      \
+                                                                                \
+        /* Insert a new list item into ( pxList ), but rather than sort the list, \
+         * makes the new list item the last item to be removed by a call to \
+         * listGET_OWNER_OF_NEXT_ENTRY(). */                 \
+        ( pxNewListItem )->pxNext = pxIndex;                 \
+        ( pxNewListItem )->pxPrevious = pxIndex->pxPrevious; \
+                                                             \
+        pxIndex->pxPrevious->pxNext = ( pxNewListItem );     \
+        pxIndex->pxPrevious = ( pxNewListItem );             \
+                                                             \
+        /* Remember which list the item is in. */            \
+        ( pxNewListItem )->pxContainer = ( pxList );         \
+                                                             \
+        ( ( pxList )->uxNumberOfItems )++;                   \
+    }
 
 /*
  * Access function to obtain the owner of the first entry in a list.  Lists
diff --git a/include/mpu_prototypes.h b/include/mpu_prototypes.h
index 4359ab6..01146ff 100644
--- a/include/mpu_prototypes.h
+++ b/include/mpu_prototypes.h
@@ -55,7 +55,7 @@
 void MPU_vTaskDelete( TaskHandle_t xTaskToDelete ) FREERTOS_SYSTEM_CALL;
 void MPU_vTaskDelay( const TickType_t xTicksToDelay ) FREERTOS_SYSTEM_CALL;
 BaseType_t MPU_xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,
-                          const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL;
+                                const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL;
 BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
 UBaseType_t MPU_uxTaskPriorityGet( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
 eTaskState MPU_eTaskGetState( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
diff --git a/include/portable.h b/include/portable.h
index 2d4718c..22bb9b0 100644
--- a/include/portable.h
+++ b/include/portable.h
@@ -65,12 +65,12 @@
     #define portBYTE_ALIGNMENT_MASK    ( 0x0001 )
 #elif portBYTE_ALIGNMENT == 1
     #define portBYTE_ALIGNMENT_MASK    ( 0x0000 )
-#else
+#else /* if portBYTE_ALIGNMENT == 32 */
     #error "Invalid portBYTE_ALIGNMENT definition"
-#endif
+#endif /* if portBYTE_ALIGNMENT == 32 */
 
 #ifndef portUSING_MPU_WRAPPERS
-    #define portUSING_MPU_WRAPPERS 0
+    #define portUSING_MPU_WRAPPERS    0
 #endif
 
 #ifndef portNUM_CONFIGURABLE_REGIONS
@@ -87,7 +87,7 @@
 
 #ifndef configSTACK_ALLOCATION_FROM_SEPARATE_HEAP
     /* Defaults to 0 for backward compatibility. */
-    #define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0
+    #define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP    0
 #endif
 
 /* *INDENT-OFF* */
@@ -141,13 +141,13 @@
 /* Used to pass information about the heap out of vPortGetHeapStats(). */
 typedef struct xHeapStats
 {
-    size_t xAvailableHeapSpaceInBytes;          /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
-    size_t xSizeOfLargestFreeBlockInBytes;      /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
-    size_t xSizeOfSmallestFreeBlockInBytes;     /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
-    size_t xNumberOfFreeBlocks;                 /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
-    size_t xMinimumEverFreeBytesRemaining;      /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
-    size_t xNumberOfSuccessfulAllocations;      /* The number of calls to pvPortMalloc() that have returned a valid memory block. */
-    size_t xNumberOfSuccessfulFrees;            /* The number of calls to vPortFree() that has successfully freed a block of memory. */
+    size_t xAvailableHeapSpaceInBytes;      /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
+    size_t xSizeOfLargestFreeBlockInBytes;  /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
+    size_t xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
+    size_t xNumberOfFreeBlocks;             /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
+    size_t xMinimumEverFreeBytesRemaining;  /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
+    size_t xNumberOfSuccessfulAllocations;  /* The number of calls to pvPortMalloc() that have returned a valid memory block. */
+    size_t xNumberOfSuccessfulFrees;        /* The number of calls to vPortFree() that has successfully freed a block of memory. */
 } HeapStats_t;
 
 /*
@@ -178,12 +178,12 @@
 size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION;
 size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION;
 
-#if( configSTACK_ALLOCATION_FROM_SEPARATE_HEAP == 1 )
-    void *pvPortMallocStack( size_t xSize ) PRIVILEGED_FUNCTION;
-    void vPortFreeStack( void *pv ) PRIVILEGED_FUNCTION;
+#if ( configSTACK_ALLOCATION_FROM_SEPARATE_HEAP == 1 )
+    void * pvPortMallocStack( size_t xSize ) PRIVILEGED_FUNCTION;
+    void vPortFreeStack( void * pv ) PRIVILEGED_FUNCTION;
 #else
-    #define pvPortMallocStack pvPortMalloc
-    #define vPortFreeStack vPortFree
+    #define pvPortMallocStack    pvPortMalloc
+    #define vPortFreeStack       vPortFree
 #endif
 
 /*
diff --git a/include/semphr.h b/include/semphr.h
index 56d9ed2..65084c5 100644
--- a/include/semphr.h
+++ b/include/semphr.h
@@ -1184,6 +1184,6 @@
  * semaphore is not available.
  *
  */
-#define uxSemaphoreGetCountFromISR( xSemaphore )                uxQueueMessagesWaitingFromISR( ( QueueHandle_t ) ( xSemaphore ) )
+#define uxSemaphoreGetCountFromISR( xSemaphore )         uxQueueMessagesWaitingFromISR( ( QueueHandle_t ) ( xSemaphore ) )
 
 #endif /* SEMAPHORE_H */
diff --git a/include/stack_macros.h b/include/stack_macros.h
index 39a26f9..6894a3e 100644
--- a/include/stack_macros.h
+++ b/include/stack_macros.h
@@ -50,7 +50,7 @@
  * use on the stack.
  */
 #ifndef portSTACK_LIMIT_PADDING
-    #define portSTACK_LIMIT_PADDING 0
+    #define portSTACK_LIMIT_PADDING    0
 #endif
 
 #if ( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH < 0 ) )
@@ -59,7 +59,7 @@
     #define taskCHECK_FOR_STACK_OVERFLOW()                                                            \
     {                                                                                                 \
         /* Is the currently saved stack pointer within the stack limit? */                            \
-        if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING)            \
+        if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING )           \
         {                                                                                             \
             vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
         }                                                                                             \
@@ -75,7 +75,7 @@
     {                                                                                                 \
                                                                                                       \
         /* Is the currently saved stack pointer within the stack limit? */                            \
-        if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING)       \
+        if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING )      \
         {                                                                                             \
             vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
         }                                                                                             \
diff --git a/include/task.h b/include/task.h
index b4fb071..a0b9c17 100644
--- a/include/task.h
+++ b/include/task.h
@@ -83,7 +83,7 @@
  * \defgroup TaskHandle_t TaskHandle_t
  * \ingroup Tasks
  */
-struct tskTaskControlBlock;     /* The old naming convention is used to prevent breaking kernel aware debuggers. */
+struct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */
 typedef struct tskTaskControlBlock * TaskHandle_t;
 
 /*
@@ -95,22 +95,22 @@
 /* Task states returned by eTaskGetState. */
 typedef enum
 {
-    eRunning = 0,     /* A task is querying the state of itself, so must be running. */
-    eReady,           /* The task being queried is in a ready or pending ready list. */
-    eBlocked,         /* The task being queried is in the Blocked state. */
-    eSuspended,       /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
-    eDeleted,         /* The task being queried has been deleted, but its TCB has not yet been freed. */
-    eInvalid          /* Used as an 'invalid state' value. */
+    eRunning = 0, /* A task is querying the state of itself, so must be running. */
+    eReady,       /* The task being queried is in a ready or pending ready list. */
+    eBlocked,     /* The task being queried is in the Blocked state. */
+    eSuspended,   /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
+    eDeleted,     /* The task being queried has been deleted, but its TCB has not yet been freed. */
+    eInvalid      /* Used as an 'invalid state' value. */
 } eTaskState;
 
 /* Actions that can be performed when vTaskNotify() is called. */
 typedef enum
 {
-    eNoAction = 0,                /* Notify the task without updating its notify value. */
-    eSetBits,                     /* Set bits in the task's notification value. */
-    eIncrement,                   /* Increment the task's notification value. */
-    eSetValueWithOverwrite,       /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */
-    eSetValueWithoutOverwrite     /* Set the task's notification value if the previous value has been read by the task. */
+    eNoAction = 0,            /* Notify the task without updating its notify value. */
+    eSetBits,                 /* Set bits in the task's notification value. */
+    eIncrement,               /* Increment the task's notification value. */
+    eSetValueWithOverwrite,   /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */
+    eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */
 } eNotifyAction;
 
 /*
@@ -138,7 +138,7 @@
 typedef struct xTASK_PARAMETERS
 {
     TaskFunction_t pvTaskCode;
-    const char * pcName;     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+    const char * pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
     configSTACK_DEPTH_TYPE usStackDepth;
     void * pvParameters;
     UBaseType_t uxPriority;
@@ -153,23 +153,23 @@
  * in the system. */
 typedef struct xTASK_STATUS
 {
-    TaskHandle_t xHandle;                            /* The handle of the task to which the rest of the information in the structure relates. */
-    const char * pcTaskName;                         /* A pointer to the task's name.  This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
-    UBaseType_t xTaskNumber;                         /* A number unique to the task. */
-    eTaskState eCurrentState;                        /* The state in which the task existed when the structure was populated. */
-    UBaseType_t uxCurrentPriority;                   /* The priority at which the task was running (may be inherited) when the structure was populated. */
-    UBaseType_t uxBasePriority;                      /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex.  Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */
-    configRUN_TIME_COUNTER_TYPE ulRunTimeCounter;    /* The total run time allocated to the task so far, as defined by the run time stats clock.  See https://www.FreeRTOS.org/rtos-run-time-stats.html.  Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */
-    StackType_t * pxStackBase;                       /* Points to the lowest address of the task's stack area. */
-    configSTACK_DEPTH_TYPE usStackHighWaterMark;     /* The minimum amount of stack space that has remained for the task since the task was created.  The closer this value is to zero the closer the task has come to overflowing its stack. */
+    TaskHandle_t xHandle;                         /* The handle of the task to which the rest of the information in the structure relates. */
+    const char * pcTaskName;                      /* A pointer to the task's name.  This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+    UBaseType_t xTaskNumber;                      /* A number unique to the task. */
+    eTaskState eCurrentState;                     /* The state in which the task existed when the structure was populated. */
+    UBaseType_t uxCurrentPriority;                /* The priority at which the task was running (may be inherited) when the structure was populated. */
+    UBaseType_t uxBasePriority;                   /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex.  Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */
+    configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock.  See https://www.FreeRTOS.org/rtos-run-time-stats.html.  Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */
+    StackType_t * pxStackBase;                    /* Points to the lowest address of the task's stack area. */
+    configSTACK_DEPTH_TYPE usStackHighWaterMark;  /* The minimum amount of stack space that has remained for the task since the task was created.  The closer this value is to zero the closer the task has come to overflowing its stack. */
 } TaskStatus_t;
 
 /* Possible return values for eTaskConfirmSleepModeStatus(). */
 typedef enum
 {
-    eAbortSleep = 0,           /* A task has been made ready or a context switch pended since portSUPPRESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
-    eStandardSleep,            /* Enter a sleep mode that will not last any longer than the expected idle time. */
-    eNoTasksWaitingTimeout     /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */
+    eAbortSleep = 0,       /* A task has been made ready or a context switch pended since portSUPPRESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
+    eStandardSleep,        /* Enter a sleep mode that will not last any longer than the expected idle time. */
+    eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */
 } eSleepModeStatus;
 
 /**
@@ -347,7 +347,7 @@
  */
 #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
     BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
-                            const char * const pcName,     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+                            const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                             const configSTACK_DEPTH_TYPE usStackDepth,
                             void * const pvParameters,
                             UBaseType_t uxPriority,
@@ -357,7 +357,7 @@
 /**
  * task. h
  * <pre>
-* TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
+ * TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
  *                               const char *pcName,
  *                               uint32_t ulStackDepth,
  *                               void *pvParameters,
@@ -464,7 +464,7 @@
  */
 #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
     TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
-                                    const char * const pcName,     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+                                    const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                                     const uint32_t ulStackDepth,
                                     void * const pvParameters,
                                     UBaseType_t uxPriority,
@@ -859,10 +859,10 @@
  * vTaskDelayUntil() is the older version of xTaskDelayUntil() and does not
  * return a value.
  */
-#define vTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement )       \
-{                                                                   \
-    ( void ) xTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement ); \
-}
+#define vTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement )           \
+    {                                                                   \
+        ( void ) xTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement ); \
+    }
 
 
 /**
@@ -1475,7 +1475,7 @@
  * \defgroup pcTaskGetName pcTaskGetName
  * \ingroup TaskUtils
  */
-char * pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION;     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+char * pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 
 /**
  * task. h
@@ -1491,7 +1491,7 @@
  * \defgroup pcTaskGetHandle pcTaskGetHandle
  * \ingroup TaskUtils
  */
-TaskHandle_t xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION;     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+TaskHandle_t xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 
 /**
  * task.h
@@ -1611,48 +1611,50 @@
 
 #if ( configCHECK_FOR_STACK_OVERFLOW > 0 )
 
-     /**
-      * task.h
-      * <pre>void vApplicationStackOverflowHook( TaskHandle_t xTask char *pcTaskName); </pre>
-      *
-      * The application stack overflow hook is called when a stack overflow is detected for a task.
-      *
-      * Details on stack overflow detection can be found here: https://www.FreeRTOS.org/Stacks-and-stack-overflow-checking.html
-      *
-      * @param xTask the task that just exceeded its stack boundaries.
-      * @param pcTaskName A character string containing the name of the offending task.
-      */
-     void vApplicationStackOverflowHook( TaskHandle_t xTask,
-                                               char * pcTaskName );
+/**
+ * task.h
+ * <pre>void vApplicationStackOverflowHook( TaskHandle_t xTask char *pcTaskName); </pre>
+ *
+ * The application stack overflow hook is called when a stack overflow is detected for a task.
+ *
+ * Details on stack overflow detection can be found here: https://www.FreeRTOS.org/Stacks-and-stack-overflow-checking.html
+ *
+ * @param xTask the task that just exceeded its stack boundaries.
+ * @param pcTaskName A character string containing the name of the offending task.
+ */
+    void vApplicationStackOverflowHook( TaskHandle_t xTask,
+                                        char * pcTaskName );
 
 #endif
 
-#if  (  configUSE_TICK_HOOK > 0 )
-    /**
-     *  task.h
-     *  <pre>void vApplicationTickHook( void ); </pre>
-     *
-     * This hook function is called in the system tick handler after any OS work is completed.
-     */
+#if  ( configUSE_TICK_HOOK > 0 )
+
+/**
+ *  task.h
+ *  <pre>void vApplicationTickHook( void ); </pre>
+ *
+ * This hook function is called in the system tick handler after any OS work is completed.
+ */
     void vApplicationTickHook( void ); /*lint !e526 Symbol not defined as it is an application callback. */
 
 #endif
 
 #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
-    /**
-     * task.h
-     * <pre>void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) </pre>
-     *
-     * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Idle Task TCB.  This function is required when
-     * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION
-     *
-     * @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer
-     * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
-     * @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
-     */
+
+/**
+ * task.h
+ * <pre>void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) </pre>
+ *
+ * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Idle Task TCB.  This function is required when
+ * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION
+ *
+ * @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer
+ * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task
+ * @param pulIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer
+ */
     void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
-                                               StackType_t ** ppxIdleTaskStackBuffer,
-                                               uint32_t * pulIdleTaskStackSize ); /*lint !e526 Symbol not defined as it is an application callback. */
+                                        StackType_t ** ppxIdleTaskStackBuffer,
+                                        uint32_t * pulIdleTaskStackSize ); /*lint !e526 Symbol not defined as it is an application callback. */
 #endif
 
 /**
@@ -1828,7 +1830,7 @@
  * \defgroup vTaskList vTaskList
  * \ingroup TaskUtils
  */
-void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION;     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 
 /**
  * task. h
@@ -1882,7 +1884,7 @@
  * \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats
  * \ingroup TaskUtils
  */
-void vTaskGetRunTimeStats( char * pcWriteBuffer ) PRIVILEGED_FUNCTION;     /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
+void vTaskGetRunTimeStats( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 
 /**
  * task. h
diff --git a/include/timers.h b/include/timers.h
index c63bfeb..f460bba 100644
--- a/include/timers.h
+++ b/include/timers.h
@@ -1328,20 +1328,20 @@
 
 #if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 
-    /**
-     * task.h
-     * <pre>void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer, StackType_t ** ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize ) </pre>
-     *
-     * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Timer Task TCB.  This function is required when
-     * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION
-     *
-     * @param ppxTimerTaskTCBBuffer   A handle to a statically allocated TCB buffer
-     * @param ppxTimerTaskStackBuffer A handle to a statically allocated Stack buffer for thie idle task
-     * @param pulTimerTaskStackSize   A pointer to the number of elements that will fit in the allocated stack buffer
-     */
+/**
+ * task.h
+ * <pre>void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer, StackType_t ** ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize ) </pre>
+ *
+ * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Timer Task TCB.  This function is required when
+ * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION
+ *
+ * @param ppxTimerTaskTCBBuffer   A handle to a statically allocated TCB buffer
+ * @param ppxTimerTaskStackBuffer A handle to a statically allocated Stack buffer for thie idle task
+ * @param pulTimerTaskStackSize   A pointer to the number of elements that will fit in the allocated stack buffer
+ */
     void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
-                                          StackType_t ** ppxTimerTaskStackBuffer,
-                                              uint32_t * pulTimerTaskStackSize );
+                                         StackType_t ** ppxTimerTaskStackBuffer,
+                                         uint32_t * pulTimerTaskStackSize );
 
 #endif
 
diff --git a/queue.c b/queue.c
index f5c2bf2..285e0fc 100644
--- a/queue.c
+++ b/queue.c
@@ -314,6 +314,7 @@
             vListInitialise( &( pxQueue->xTasksWaitingToSend ) );
             vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );
         }
+
         taskEXIT_CRITICAL();
     }
     else
@@ -345,12 +346,12 @@
 
         if( ( uxQueueLength > ( UBaseType_t ) 0 ) &&
             ( pxStaticQueue != NULL ) &&
+
             /* A queue storage area should be provided if the item size is not 0, and
              * should not be provided if the item size is 0. */
             ( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0 ) ) ) &&
             ( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0 ) ) ) )
         {
-
             #if ( configASSERT_DEFINED == 1 )
                 {
                     /* Sanity check that the size of the structure used to declare a
diff --git a/stream_buffer.c b/stream_buffer.c
index ab9e1cf..8a7a2e0 100644
--- a/stream_buffer.c
+++ b/stream_buffer.c
@@ -503,14 +503,15 @@
     configASSERT( pxStreamBuffer );
 
     /* The code below reads xTail and then xHead.  This is safe if the stream
-    buffer is updated once between the two reads - but not if the stream buffer
-    is updated more than once between the two reads - hence the loop. */
+     * buffer is updated once between the two reads - but not if the stream buffer
+     * is updated more than once between the two reads - hence the loop. */
     do
     {
         xOriginalTail = pxStreamBuffer->xTail;
         xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;
         xSpace -= pxStreamBuffer->xHead;
     } while( xOriginalTail != pxStreamBuffer->xTail );
+
     xSpace -= ( size_t ) 1;
 
     if( xSpace >= pxStreamBuffer->xLength )
@@ -885,8 +886,8 @@
             /* The number of bytes available is greater than the number of bytes
              * required to hold the length of the next message, so another message
              * is available. */
-             ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempReturn, sbBYTES_TO_STORE_MESSAGE_LENGTH, pxStreamBuffer->xTail );
-             xReturn = ( size_t ) xTempReturn;
+            ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempReturn, sbBYTES_TO_STORE_MESSAGE_LENGTH, pxStreamBuffer->xTail );
+            xReturn = ( size_t ) xTempReturn;
         }
         else
         {
@@ -1009,7 +1010,7 @@
     if( xCount != ( size_t ) 0 )
     {
         /* Read the actual data and update the tail to mark the data as officially consumed. */
-        pxStreamBuffer->xTail = prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) pvRxData, xCount, xNextTail); /*lint !e9079 Data storage area is implemented as uint8_t array for ease of sizing, indexing and alignment. */
+        pxStreamBuffer->xTail = prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) pvRxData, xCount, xNextTail ); /*lint !e9079 Data storage area is implemented as uint8_t array for ease of sizing, indexing and alignment. */
     }
 
     return xCount;
diff --git a/tasks.c b/tasks.c
index 5314fcc..91af833 100644
--- a/tasks.c
+++ b/tasks.c
@@ -297,6 +297,7 @@
     #endif
 
     #if ( configUSE_NEWLIB_REENTRANT == 1 )
+
         /* Allocate a Newlib reent structure that is specific to this task.
          * Note Newlib support has been included by popular demand, but is not
          * used by the FreeRTOS maintainers themselves.  FreeRTOS is not
@@ -916,6 +917,7 @@
 
     /* This is used as an array index so must ensure it's not too large. */
     configASSERT( uxPriority < configMAX_PRIORITIES );
+
     if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )
     {
         uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;
@@ -5277,28 +5279,28 @@
     {
         configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;
 
-            ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();
+        ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE();
 
-            /* For percentage calculations. */
-            ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;
+        /* For percentage calculations. */
+        ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;
 
-            /* Avoid divide by zero errors. */
-            if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
-            {
-                ulReturn = xIdleTaskHandle->ulRunTimeCounter / ulTotalTime;
-            }
-            else
-            {
-                ulReturn = 0;
-            }
+        /* Avoid divide by zero errors. */
+        if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )
+        {
+            ulReturn = xIdleTaskHandle->ulRunTimeCounter / ulTotalTime;
+        }
+        else
+        {
+            ulReturn = 0;
+        }
 
         return ulReturn;
     }
 
-#endif
+#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */
 /*-----------------------------------------------------------*/
 
-    static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
+static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,
                                             const BaseType_t xCanBlockIndefinitely )
 {
     TickType_t xTimeToWake;
diff --git a/timers.c b/timers.c
index b3e89aa..46e6d48 100644
--- a/timers.c
+++ b/timers.c
@@ -57,8 +57,8 @@
 #if ( configUSE_TIMERS == 1 )
 
 /* Misc definitions. */
-    #define tmrNO_DELAY                      ( ( TickType_t ) 0U )
-    #define tmrMAX_TIME_BEFORE_OVERFLOW      ( ( TickType_t ) -1 )
+    #define tmrNO_DELAY                    ( ( TickType_t ) 0U )
+    #define tmrMAX_TIME_BEFORE_OVERFLOW    ( ( TickType_t ) -1 )
 
 /* The name assigned to the timer service task.  This can be overridden by
  * defining trmTIMER_SERVICE_TASK_NAME in FreeRTOSConfig.h. */
@@ -363,11 +363,11 @@
         configASSERT( ( xTimerPeriodInTicks > 0 ) );
 
         /* Ensure the infrastructure used by the timer service task has been
-            * created/initialised. */
+         * created/initialised. */
         prvCheckForValidListAndQueue();
 
         /* Initialise the timer structure members using the function
-            * parameters. */
+         * parameters. */
         pxNewTimer->pcTimerName = pcTimerName;
         pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;
         pxNewTimer->pvTimerID = pvTimerID;
@@ -521,7 +521,7 @@
         /* Insert the timer into the appropriate list for the next expiry time.
          * If the next expiry time has already passed, advance the expiry time,
          * call the callback function, and try again. */
-        while ( prvInsertTimerInActiveList( pxTimer, ( xExpiredTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xExpiredTime ) != pdFALSE )
+        while( prvInsertTimerInActiveList( pxTimer, ( xExpiredTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xExpiredTime ) != pdFALSE )
         {
             /* Advance the expiry time. */
             xExpiredTime += pxTimer->xTimerPeriodInTicks;
@@ -540,6 +540,7 @@
 
         /* Remove the timer from the list of active timers.  A check has already
          * been performed to ensure the list is not empty. */
+
         ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );
 
         /* If the timer is an auto-reload timer then calculate the next
