diff --git a/portable/CodeWarrior/ColdFire_V1/port.c b/portable/CodeWarrior/ColdFire_V1/port.c
index dd6d794..d983138 100644
--- a/portable/CodeWarrior/ColdFire_V1/port.c
+++ b/portable/CodeWarrior/ColdFire_V1/port.c
@@ -31,38 +31,35 @@
 #include "task.h"
 
 
-#define portINITIAL_FORMAT_VECTOR      ( ( StackType_t ) 0x4000 )
+#define portINITIAL_FORMAT_VECTOR       ( ( StackType_t ) 0x4000 )
 
 /* Supervisor mode set. */
-#define portINITIAL_STATUS_REGISTER    ( ( StackType_t ) 0x2000 )
+#define portINITIAL_STATUS_REGISTER     ( ( StackType_t ) 0x2000)
 
 /* The clock prescale into the timer peripheral. */
-#define portPRESCALE_VALUE             ( ( uint8_t ) 10 )
+#define portPRESCALE_VALUE              ( ( uint8_t ) 10 )
 
 /* The clock frequency into the RTC. */
-#define portRTC_CLOCK_HZ               ( ( uint32_t ) 1000 )
+#define portRTC_CLOCK_HZ                ( ( uint32_t ) 1000 )
 
 asm void interrupt VectorNumber_VL1swi vPortYieldISR( void );
 static void prvSetupTimerInterrupt( void );
 
 /* Used to keep track of the number of nested calls to taskENTER_CRITICAL().  This
- * will be set to 0 prior to the first task being started. */
+will be set to 0 prior to the first task being started. */
 static uint32_t ulCriticalNesting = 0x9999UL;
 
 /*-----------------------------------------------------------*/
 
-StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
-                                     TaskFunction_t pxCode,
-                                     void * pvParameters )
+StackType_t *pxPortInitialiseStack( StackType_t * pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
 {
-    uint32_t ulOriginalA5;
 
-    __asm {
-        MOVE.L A5, ulOriginalA5
-    };
+uint32_t ulOriginalA5;
+
+    __asm{ MOVE.L A5, ulOriginalA5 };
 
 
-    *pxTopOfStack = ( StackType_t ) 0xDEADBEEF;
+    *pxTopOfStack = (StackType_t) 0xDEADBEEF;
     pxTopOfStack--;
 
     /* Exception stack frame starts with the return address. */
@@ -73,7 +70,7 @@
     pxTopOfStack--;
 
     *pxTopOfStack = ( StackType_t ) 0x0; /*FP*/
-    pxTopOfStack -= 14;                  /* A5 to D0. */
+    pxTopOfStack -= 14; /* A5 to D0. */
 
     /* Parameter in A0. */
     *( pxTopOfStack + 8 ) = ( StackType_t ) pvParameters;
@@ -87,7 +84,7 @@
 
 BaseType_t xPortStartScheduler( void )
 {
-    extern void vPortStartFirstTask( void );
+extern void vPortStartFirstTask( void );
 
     ulCriticalNesting = 0UL;
 
@@ -110,7 +107,7 @@
     RTCMOD = portRTC_CLOCK_HZ / configTICK_RATE_HZ;
 
     /* Enable the RTC to generate interrupts - interrupts are already disabled
-     * when this code executes. */
+    when this code executes. */
     RTCSC_RTIE = 1;
 }
 /*-----------------------------------------------------------*/
@@ -126,20 +123,19 @@
     if( ulCriticalNesting == 0UL )
     {
         /* Guard against context switches being pended simultaneously with a
-         * critical section being entered. */
+        critical section being entered. */
         do
         {
             portDISABLE_INTERRUPTS();
-
             if( INTC_FRC == 0UL )
             {
                 break;
             }
 
             portENABLE_INTERRUPTS();
+
         } while( 1 );
     }
-
     ulCriticalNesting++;
 }
 /*-----------------------------------------------------------*/
@@ -147,7 +143,6 @@
 void vPortExitCritical( void )
 {
     ulCriticalNesting--;
-
     if( ulCriticalNesting == 0 )
     {
         portENABLE_INTERRUPTS();
@@ -157,7 +152,7 @@
 
 void vPortYieldHandler( void )
 {
-    uint32_t ulSavedInterruptMask;
+uint32_t ulSavedInterruptMask;
 
     ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
     {
@@ -171,7 +166,7 @@
 
 void interrupt VectorNumber_Vrtc vPortTickISR( void )
 {
-    uint32_t ulSavedInterruptMask;
+uint32_t ulSavedInterruptMask;
 
     /* Clear the interrupt. */
     RTCSC |= RTCSC_RTIF_MASK;
diff --git a/portable/CodeWarrior/ColdFire_V1/portmacro.h b/portable/CodeWarrior/ColdFire_V1/portmacro.h
index d726378..a98093d 100644
--- a/portable/CodeWarrior/ColdFire_V1/portmacro.h
+++ b/portable/CodeWarrior/ColdFire_V1/portmacro.h
@@ -46,34 +46,34 @@
  */
 
 /* Type definitions. */
-#define portCHAR          char
-#define portFLOAT         float
-#define portDOUBLE        double
-#define portLONG          long
-#define portSHORT         short
-#define portSTACK_TYPE    uint32_t
-#define portBASE_TYPE     long
+#define portCHAR        char
+#define portFLOAT       float
+#define portDOUBLE      double
+#define portLONG        long
+#define portSHORT       short
+#define portSTACK_TYPE  uint32_t
+#define portBASE_TYPE   long
 
-typedef portSTACK_TYPE   StackType_t;
-typedef long             BaseType_t;
-typedef unsigned long    UBaseType_t;
+typedef portSTACK_TYPE StackType_t;
+typedef long BaseType_t;
+typedef unsigned long UBaseType_t;
 
 
-#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
-    typedef uint16_t     TickType_t;
-    #define portMAX_DELAY    ( TickType_t ) 0xffff
+#if( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
+    typedef uint16_t TickType_t;
+    #define portMAX_DELAY ( TickType_t ) 0xffff
 #elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
-    typedef uint32_t     TickType_t;
-    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
+    typedef uint32_t TickType_t;
+    #define portMAX_DELAY ( TickType_t )    ( 0xFFFFFFFFUL )
 #else
     #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
 #endif
 /*-----------------------------------------------------------*/
 
 /* Hardware specifics. */
-#define portBYTE_ALIGNMENT    4
-#define portSTACK_GROWTH      -1
-#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
+#define portBYTE_ALIGNMENT          4
+#define portSTACK_GROWTH            -1
+#define portTICK_PERIOD_MS          ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 /*-----------------------------------------------------------*/
 
 uint32_t ulPortSetIPL( uint32_t );
@@ -83,29 +83,30 @@
 
 extern void vPortEnterCritical( void );
 extern void vPortExitCritical( void );
-#define portENTER_CRITICAL()    vPortEnterCritical()
-#define portEXIT_CRITICAL()     vPortExitCritical()
+#define portENTER_CRITICAL()        vPortEnterCritical()
+#define portEXIT_CRITICAL()         vPortExitCritical()
 
 extern UBaseType_t uxPortSetInterruptMaskFromISR( void );
 extern void vPortClearInterruptMaskFromISR( UBaseType_t );
-#define portSET_INTERRUPT_MASK_FROM_ISR()                             ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister )    ulPortSetIPL( uxSavedStatusRegister )
+#define portSET_INTERRUPT_MASK_FROM_ISR()   ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister ) ulPortSetIPL( uxSavedStatusRegister )
 
 /*-----------------------------------------------------------*/
 
 /* Task utilities. */
-#define portNOP()      asm volatile ( "nop" )
+#define portNOP()   asm volatile ( "nop" )
 
 /* Context switches are requested using the force register. */
-#define portYIELD()    INTC_SFRC = 0x3E; portNOP(); portNOP(); portNOP(); portNOP(); portNOP()
+#define portYIELD() INTC_SFRC = 0x3E; portNOP(); portNOP(); portNOP(); portNOP(); portNOP()
 
 /*-----------------------------------------------------------*/
 
 /* Task function macros as described on the FreeRTOS.org WEB site. */
-#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters ) __attribute__( ( noreturn ) )
-#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) __attribute__((noreturn))
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
 /*-----------------------------------------------------------*/
 
+
 #define portEND_SWITCHING_ISR( xSwitchRequired ) \
     do                                           \
     {                                            \
diff --git a/portable/CodeWarrior/ColdFire_V2/port.c b/portable/CodeWarrior/ColdFire_V2/port.c
index a7a78a7..5bca650 100644
--- a/portable/CodeWarrior/ColdFire_V2/port.c
+++ b/portable/CodeWarrior/ColdFire_V2/port.c
@@ -31,41 +31,39 @@
 #include "task.h"
 
 
-#define portINITIAL_FORMAT_VECTOR      ( ( StackType_t ) 0x4000 )
+#define portINITIAL_FORMAT_VECTOR       ( ( StackType_t ) 0x4000 )
 
 /* Supervisor mode set. */
-#define portINITIAL_STATUS_REGISTER    ( ( StackType_t ) 0x2000 )
+#define portINITIAL_STATUS_REGISTER     ( ( StackType_t ) 0x2000)
 
 /* Used to keep track of the number of nested calls to taskENTER_CRITICAL().  This
- * will be set to 0 prior to the first task being started. */
+will be set to 0 prior to the first task being started. */
 static uint32_t ulCriticalNesting = 0x9999UL;
 
 
-#define portSAVE_CONTEXT()         \
-    lea.l( -60, % sp ), % sp;      \
-    movem.l % d0 - % fp, ( % sp ); \
-    move.l pxCurrentTCB, % a0;     \
-    move.l % sp, ( % a0 );
+#define portSAVE_CONTEXT()              \
+    lea.l       (-60, %sp), %sp;        \
+    movem.l     %d0-%fp, (%sp);         \
+    move.l      pxCurrentTCB, %a0;      \
+    move.l      %sp, (%a0);
 
-#define portRESTORE_CONTEXT()     \
-    move.l pxCurrentTCB, % a0;    \
-    move.l( % a0 ), % sp;         \
-    movem.l( % sp ), % d0 - % fp; \
-    lea.l % sp@( 60 ), % sp;      \
+#define portRESTORE_CONTEXT()           \
+    move.l      pxCurrentTCB, %a0;      \
+    move.l      (%a0), %sp;             \
+    movem.l     (%sp), %d0-%fp;         \
+    lea.l       %sp@(60), %sp;          \
     rte
 
 
 
 /*-----------------------------------------------------------*/
 
-StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
-                                     TaskFunction_t pxCode,
-                                     void * pvParameters )
+StackType_t *pxPortInitialiseStack( StackType_t * pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
 {
     *pxTopOfStack = ( StackType_t ) pvParameters;
     pxTopOfStack--;
 
-    *pxTopOfStack = ( StackType_t ) 0xDEADBEEF;
+    *pxTopOfStack = (StackType_t) 0xDEADBEEF;
     pxTopOfStack--;
 
     /* Exception stack frame starts with the return address. */
@@ -76,7 +74,7 @@
     pxTopOfStack--;
 
     *pxTopOfStack = ( StackType_t ) 0x0; /*FP*/
-    pxTopOfStack -= 14;                  /* A5 to D0. */
+    pxTopOfStack -= 14; /* A5 to D0. */
 
     return pxTopOfStack;
 }
@@ -84,7 +82,7 @@
 
 BaseType_t xPortStartScheduler( void )
 {
-    extern void vPortStartFirstTask( void );
+extern void vPortStartFirstTask( void );
 
     ulCriticalNesting = 0UL;
 
@@ -109,20 +107,19 @@
     if( ulCriticalNesting == 0UL )
     {
         /* Guard against context switches being pended simultaneously with a
-         * critical section being entered. */
+        critical section being entered. */
         do
         {
             portDISABLE_INTERRUPTS();
-
             if( MCF_INTC0_INTFRCH == 0UL )
             {
                 break;
             }
 
             portENABLE_INTERRUPTS();
+
         } while( 1 );
     }
-
     ulCriticalNesting++;
 }
 /*-----------------------------------------------------------*/
@@ -130,7 +127,6 @@
 void vPortExitCritical( void )
 {
     ulCriticalNesting--;
-
     if( ulCriticalNesting == 0 )
     {
         portENABLE_INTERRUPTS();
@@ -140,12 +136,12 @@
 
 void vPortYieldHandler( void )
 {
-    uint32_t ulSavedInterruptMask;
+uint32_t ulSavedInterruptMask;
 
     ulSavedInterruptMask = portSET_INTERRUPT_MASK_FROM_ISR();
-    /* Note this will clear all forced interrupts - this is done for speed. */
-    MCF_INTC0_INTFRCL = 0;
-    vTaskSwitchContext();
+        /* Note this will clear all forced interrupts - this is done for speed. */
+        MCF_INTC0_INTFRCL = 0;
+        vTaskSwitchContext();
     portCLEAR_INTERRUPT_MASK_FROM_ISR( ulSavedInterruptMask );
 }
 /*-----------------------------------------------------------*/
diff --git a/portable/CodeWarrior/ColdFire_V2/portmacro.h b/portable/CodeWarrior/ColdFire_V2/portmacro.h
index e367e07..a59dff9 100644
--- a/portable/CodeWarrior/ColdFire_V2/portmacro.h
+++ b/portable/CodeWarrior/ColdFire_V2/portmacro.h
@@ -46,33 +46,33 @@
  */
 
 /* Type definitions. */
-#define portCHAR          char
-#define portFLOAT         float
-#define portDOUBLE        double
-#define portLONG          long
-#define portSHORT         short
-#define portSTACK_TYPE    uint32_t
-#define portBASE_TYPE     long
+#define portCHAR        char
+#define portFLOAT       float
+#define portDOUBLE      double
+#define portLONG        long
+#define portSHORT       short
+#define portSTACK_TYPE  uint32_t
+#define portBASE_TYPE   long
 
-typedef portSTACK_TYPE   StackType_t;
-typedef long             BaseType_t;
-typedef unsigned long    UBaseType_t;
+typedef portSTACK_TYPE StackType_t;
+typedef long BaseType_t;
+typedef unsigned long UBaseType_t;
 
-#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
-    typedef uint16_t     TickType_t;
-    #define portMAX_DELAY    ( TickType_t ) 0xffff
+#if( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
+    typedef uint16_t TickType_t;
+    #define portMAX_DELAY ( TickType_t ) 0xffff
 #elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
-    typedef uint32_t     TickType_t;
-    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
+    typedef uint32_t TickType_t;
+    #define portMAX_DELAY ( TickType_t )    ( 0xFFFFFFFFUL )
 #else
     #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
 #endif
 /*-----------------------------------------------------------*/
 
 /* Hardware specifics. */
-#define portBYTE_ALIGNMENT    4
-#define portSTACK_GROWTH      -1
-#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
+#define portBYTE_ALIGNMENT          4
+#define portSTACK_GROWTH            -1
+#define portTICK_PERIOD_MS          ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
 /*-----------------------------------------------------------*/
 uint32_t ulPortSetIPL( uint32_t );
 #define portDISABLE_INTERRUPTS()    ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
@@ -81,28 +81,28 @@
 
 extern void vPortEnterCritical( void );
 extern void vPortExitCritical( void );
-#define portENTER_CRITICAL()    vPortEnterCritical()
-#define portEXIT_CRITICAL()     vPortExitCritical()
+#define portENTER_CRITICAL()        vPortEnterCritical()
+#define portEXIT_CRITICAL()         vPortExitCritical()
 
 extern UBaseType_t uxPortSetInterruptMaskFromISR( void );
 extern void vPortClearInterruptMaskFromISR( UBaseType_t );
-#define portSET_INTERRUPT_MASK_FROM_ISR()                             ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister )    ulPortSetIPL( uxSavedStatusRegister )
+#define portSET_INTERRUPT_MASK_FROM_ISR()   ulPortSetIPL( configMAX_SYSCALL_INTERRUPT_PRIORITY )
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusRegister ) ulPortSetIPL( uxSavedStatusRegister )
 
 /*-----------------------------------------------------------*/
 
 /* Task utilities. */
 
-#define portNOP()      asm volatile ( "nop" )
+#define portNOP()   asm volatile (  "nop" )
 
 /* Note this will overwrite all other bits in the force register, it is done this way for speed. */
-#define portYIELD()    MCF_INTC0_INTFRCL = ( 1UL << configYIELD_INTERRUPT_VECTOR ); portNOP(); portNOP()      /* -32 as we are using the high word of the 64bit mask. */
+#define portYIELD()         MCF_INTC0_INTFRCL = ( 1UL << configYIELD_INTERRUPT_VECTOR ); portNOP(); portNOP() /* -32 as we are using the high word of the 64bit mask. */
 
 /*-----------------------------------------------------------*/
 
 /* Task function macros as described on the FreeRTOS.org WEB site. */
-#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters ) __attribute__( ( noreturn ) )
-#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters ) __attribute__((noreturn))
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
 /*-----------------------------------------------------------*/
 
 #define portEND_SWITCHING_ISR( xSwitchRequired ) \
diff --git a/portable/CodeWarrior/HCS12/port.c b/portable/CodeWarrior/HCS12/port.c
index 1b6f5c3..e487612 100644
--- a/portable/CodeWarrior/HCS12/port.c
+++ b/portable/CodeWarrior/HCS12/port.c
@@ -32,8 +32,8 @@
 
 
 /*-----------------------------------------------------------
-* Implementation of functions defined in portable.h for the HCS12 port.
-*----------------------------------------------------------*/
+ * Implementation of functions defined in portable.h for the HCS12 port.
+ *----------------------------------------------------------*/
 
 
 /*
@@ -43,29 +43,29 @@
 static void prvSetupTimerInterrupt( void );
 
 /* Interrupt service routines have to be in non-banked memory - as does the
- * scheduler startup function. */
+scheduler startup function. */
 #pragma CODE_SEG __NEAR_SEG NON_BANKED
 
-/* Manual context switch function.  This is the SWI ISR. */
-void interrupt vPortYield( void );
+    /* Manual context switch function.  This is the SWI ISR. */
+    void interrupt vPortYield( void );
 
-/* Tick context switch function.  This is the timer ISR. */
-void interrupt vPortTickInterrupt( void );
+    /* Tick context switch function.  This is the timer ISR. */
+    void interrupt vPortTickInterrupt( void );
 
-/* Simply called by xPortStartScheduler().  xPortStartScheduler() does not
- * start the scheduler directly because the header file containing the
- * xPortStartScheduler() prototype is part of the common kernel code, and
- * therefore cannot use the CODE_SEG pragma. */
-static BaseType_t xBankedStartScheduler( void );
+    /* Simply called by xPortStartScheduler().  xPortStartScheduler() does not
+    start the scheduler directly because the header file containing the
+    xPortStartScheduler() prototype is part of the common kernel code, and
+    therefore cannot use the CODE_SEG pragma. */
+    static BaseType_t xBankedStartScheduler( void );
 
 #pragma CODE_SEG DEFAULT
 
 /* Calls to portENTER_CRITICAL() can be nested.  When they are nested the
- * critical section should not be left (i.e. interrupts should not be re-enabled)
- * until the nesting depth reaches 0.  This variable simply tracks the nesting
- * depth.  Each task maintains it's own critical nesting depth variable so
- * uxCriticalNesting is saved and restored from the task stack during a context
- * switch. */
+critical section should not be left (i.e. interrupts should not be re-enabled)
+until the nesting depth reaches 0.  This variable simply tracks the nesting
+depth.  Each task maintains it's own critical nesting depth variable so
+uxCriticalNesting is saved and restored from the task stack during a context
+switch. */
 volatile UBaseType_t uxCriticalNesting = 0xff;
 
 /*-----------------------------------------------------------*/
@@ -73,33 +73,31 @@
 /*
  * See header file for description.
  */
-StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
-                                     TaskFunction_t pxCode,
-                                     void * pvParameters )
+StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )
 {
     /*
-     *  Place a few bytes of known values on the bottom of the stack.
-     *  This can be uncommented to provide useful stack markers when debugging.
-     *
-     * pxTopOfStack = ( StackType_t ) 0x11;
-     *  pxTopOfStack--;
-     * pxTopOfStack = ( StackType_t ) 0x22;
-     *  pxTopOfStack--;
-     * pxTopOfStack = ( StackType_t ) 0x33;
-     *  pxTopOfStack--;
-     */
+        Place a few bytes of known values on the bottom of the stack.
+        This can be uncommented to provide useful stack markers when debugging.
+
+        *pxTopOfStack = ( StackType_t ) 0x11;
+        pxTopOfStack--;
+        *pxTopOfStack = ( StackType_t ) 0x22;
+        pxTopOfStack--;
+        *pxTopOfStack = ( StackType_t ) 0x33;
+        pxTopOfStack--;
+    */
 
 
 
     /* Setup the initial stack of the task.  The stack is set exactly as
-     * expected by the portRESTORE_CONTEXT() macro.  In this case the stack as
-     * expected by the HCS12 RTI instruction. */
+    expected by the portRESTORE_CONTEXT() macro.  In this case the stack as
+    expected by the HCS12 RTI instruction. */
 
 
     /* The address of the task function is placed in the stack byte at a time. */
-    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pxCode ) ) + 1 );
+    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pxCode) ) + 1 );
     pxTopOfStack--;
-    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pxCode ) ) + 0 );
+    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pxCode) ) + 0 );
     pxTopOfStack--;
 
     /* Next are all the registers that form part of the task context. */
@@ -117,15 +115,15 @@
     pxTopOfStack--;
 
     /* A register contains parameter high byte. */
-    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pvParameters ) ) + 0 );
+    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pvParameters) ) + 0 );
     pxTopOfStack--;
 
     /* B register contains parameter low byte. */
-    *pxTopOfStack = ( StackType_t ) *( ( ( StackType_t * ) ( &pvParameters ) ) + 1 );
+    *pxTopOfStack = ( StackType_t ) *( ((StackType_t *) (&pvParameters) ) + 1 );
     pxTopOfStack--;
 
     /* CCR: Note that when the task starts interrupts will be enabled since
-     * "I" bit of CCR is cleared */
+    "I" bit of CCR is cleared */
     *pxTopOfStack = ( StackType_t ) 0x00;
     pxTopOfStack--;
 
@@ -136,7 +134,7 @@
     #endif
 
     /* Finally the critical nesting depth is initialised with 0 (not within
-     * a critical section). */
+    a critical section). */
     *pxTopOfStack = ( StackType_t ) 0x00;
 
     return pxTopOfStack;
@@ -159,10 +157,10 @@
 BaseType_t xPortStartScheduler( void )
 {
     /* xPortStartScheduler() does not start the scheduler directly because
-     * the header file containing the xPortStartScheduler() prototype is part
-     * of the common kernel code, and therefore cannot use the CODE_SEG pragma.
-     * Instead it simply calls the locally defined xBankedStartScheduler() -
-     * which does use the CODE_SEG pragma. */
+    the header file containing the xPortStartScheduler() prototype is part
+    of the common kernel code, and therefore cannot use the CODE_SEG pragma.
+    Instead it simply calls the locally defined xBankedStartScheduler() -
+    which does use the CODE_SEG pragma. */
 
     return xBankedStartScheduler();
 }
@@ -173,7 +171,7 @@
 static BaseType_t xBankedStartScheduler( void )
 {
     /* Configure the timer that will generate the RTOS tick.  Interrupts are
-     * disabled when this function is called. */
+    disabled when this function is called. */
     prvSetupTimerInterrupt();
 
     /* Restore the context of the first task. */
@@ -224,15 +222,15 @@
         TFLG1 = 1;
 
         /* Restore the context of a task - which may be a different task
-         * to that interrupted. */
+        to that interrupted. */
         portRESTORE_CONTEXT();
     }
-    #else /* if configUSE_PREEMPTION == 1 */
+    #else
     {
         xTaskIncrementTick();
         TFLG1 = 1;
     }
-    #endif /* if configUSE_PREEMPTION == 1 */
+    #endif
 }
 
 #pragma CODE_SEG DEFAULT
diff --git a/portable/CodeWarrior/HCS12/portmacro.h b/portable/CodeWarrior/HCS12/portmacro.h
index f2f8993..d0d0a14 100644
--- a/portable/CodeWarrior/HCS12/portmacro.h
+++ b/portable/CodeWarrior/HCS12/portmacro.h
@@ -41,40 +41,40 @@
  */
 
 /* Type definitions. */
-#define portCHAR          char
-#define portFLOAT         float
-#define portDOUBLE        double
-#define portLONG          long
-#define portSHORT         short
-#define portSTACK_TYPE    uint8_t
-#define portBASE_TYPE     char
+#define portCHAR        char
+#define portFLOAT       float
+#define portDOUBLE      double
+#define portLONG        long
+#define portSHORT       short
+#define portSTACK_TYPE  uint8_t
+#define portBASE_TYPE   char
 
-typedef portSTACK_TYPE   StackType_t;
-typedef signed char      BaseType_t;
-typedef unsigned char    UBaseType_t;
+typedef portSTACK_TYPE StackType_t;
+typedef signed char BaseType_t;
+typedef unsigned char UBaseType_t;
 
-#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
-    typedef uint16_t     TickType_t;
-    #define portMAX_DELAY    ( TickType_t ) 0xffff
+#if( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )
+    typedef uint16_t TickType_t;
+    #define portMAX_DELAY ( TickType_t ) 0xffff
 #elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )
-    typedef uint32_t     TickType_t;
-    #define portMAX_DELAY    ( TickType_t ) ( 0xFFFFFFFFUL )
+    typedef uint32_t TickType_t;
+    #define portMAX_DELAY ( TickType_t )    ( 0xFFFFFFFFUL )
 #else
     #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.
 #endif
 /*-----------------------------------------------------------*/
 
 /* Hardware specifics. */
-#define portBYTE_ALIGNMENT    1
-#define portSTACK_GROWTH      ( -1 )
-#define portTICK_PERIOD_MS    ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
-#define portYIELD()    __asm( "swi" );
-#define portNOP()      __asm( "nop" );
+#define portBYTE_ALIGNMENT          1
+#define portSTACK_GROWTH            ( -1 )
+#define portTICK_PERIOD_MS          ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
+#define portYIELD()                 __asm( "swi" );
+#define portNOP()                   __asm( "nop" );
 /*-----------------------------------------------------------*/
 
 /* Critical section handling. */
-#define portENABLE_INTERRUPTS()     __asm( "cli" )
-#define portDISABLE_INTERRUPTS()    __asm( "sei" )
+#define portENABLE_INTERRUPTS()             __asm( "cli" )
+#define portDISABLE_INTERRUPTS()            __asm( "sei" )
 
 /*
  * Disable interrupts before incrementing the count of critical section nesting.
@@ -82,29 +82,29 @@
  * re-enabled.  Once interrupts are disabled the nesting count can be accessed
  * directly.  Each task maintains its own nesting count.
  */
-#define portENTER_CRITICAL()                           \
-    {                                                  \
-        extern volatile UBaseType_t uxCriticalNesting; \
-                                                       \
-        portDISABLE_INTERRUPTS();                      \
-        uxCriticalNesting++;                           \
-    }
+#define portENTER_CRITICAL()                                    \
+{                                                               \
+    extern volatile UBaseType_t uxCriticalNesting;  \
+                                                                \
+    portDISABLE_INTERRUPTS();                                   \
+    uxCriticalNesting++;                                        \
+}
 
 /*
  * Interrupts are disabled so we can access the nesting count directly.  If the
  * nesting is found to be 0 (no nesting) then we are leaving the critical
  * section and interrupts can be re-enabled.
  */
-#define  portEXIT_CRITICAL()                           \
-    {                                                  \
-        extern volatile UBaseType_t uxCriticalNesting; \
-                                                       \
-        uxCriticalNesting--;                           \
-        if( uxCriticalNesting == 0 )                   \
-        {                                              \
-            portENABLE_INTERRUPTS();                   \
-        }                                              \
-    }
+#define  portEXIT_CRITICAL()                                    \
+{                                                               \
+    extern volatile UBaseType_t uxCriticalNesting;  \
+                                                                \
+    uxCriticalNesting--;                                        \
+    if( uxCriticalNesting == 0 )                                \
+    {                                                           \
+        portENABLE_INTERRUPTS();                                \
+    }                                                           \
+}
 /*-----------------------------------------------------------*/
 
 /* Task utilities. */
@@ -120,71 +120,70 @@
  */
 
 #ifdef BANKED_MODEL
-
-/*
- * Load the stack pointer for the task, then pull the critical nesting
- * count and PPAGE register from the stack.  The remains of the
- * context are restored by the RTI instruction.
- */
-    #define portRESTORE_CONTEXT()                      \
-    {                                                  \
-        extern volatile void * pxCurrentTCB;           \
-        extern volatile UBaseType_t uxCriticalNesting; \
-                                                       \
-        __asm( "ldx pxCurrentTCB" );                   \
-        __asm( "lds 0, x" );                           \
-        __asm( "pula" );                               \
-        __asm( "staa uxCriticalNesting" );             \
-        __asm( "pula" );                               \
-        __asm( "staa 0x30" ); /* 0x30 = PPAGE */       \
+    /*
+     * Load the stack pointer for the task, then pull the critical nesting
+     * count and PPAGE register from the stack.  The remains of the
+     * context are restored by the RTI instruction.
+     */
+    #define portRESTORE_CONTEXT()                                   \
+    {                                                               \
+        extern volatile void * pxCurrentTCB;                        \
+        extern volatile UBaseType_t uxCriticalNesting;  \
+                                                                    \
+        __asm( "ldx pxCurrentTCB" );                                \
+        __asm( "lds 0, x" );                                        \
+        __asm( "pula" );                                            \
+        __asm( "staa uxCriticalNesting" );                          \
+        __asm( "pula" );                                            \
+        __asm( "staa 0x30" ); /* 0x30 = PPAGE */                    \
     }
 
-/*
- * By the time this macro is called the processor has already stacked the
- * registers.  Simply stack the nesting count and PPAGE value, then save
- * the task stack pointer.
- */
-    #define portSAVE_CONTEXT()                         \
-    {                                                  \
-        extern volatile void * pxCurrentTCB;           \
-        extern volatile UBaseType_t uxCriticalNesting; \
-                                                       \
-        __asm( "ldaa 0x30" ); /* 0x30 = PPAGE */       \
-        __asm( "psha" );                               \
-        __asm( "ldaa uxCriticalNesting" );             \
-        __asm( "psha" );                               \
-        __asm( "ldx pxCurrentTCB" );                   \
-        __asm( "sts 0, x" );                           \
+    /*
+     * By the time this macro is called the processor has already stacked the
+     * registers.  Simply stack the nesting count and PPAGE value, then save
+     * the task stack pointer.
+     */
+    #define portSAVE_CONTEXT()                                      \
+    {                                                               \
+        extern volatile void * pxCurrentTCB;                        \
+        extern volatile UBaseType_t uxCriticalNesting;  \
+                                                                    \
+        __asm( "ldaa 0x30" );  /* 0x30 = PPAGE */                   \
+        __asm( "psha" );                                            \
+        __asm( "ldaa uxCriticalNesting" );                          \
+        __asm( "psha" );                                            \
+        __asm( "ldx pxCurrentTCB" );                                \
+        __asm( "sts 0, x" );                                        \
     }
-#else /* ifdef BANKED_MODEL */
+#else
 
-/*
- * These macros are as per the BANKED versions above, but without saving
- * and restoring the PPAGE register.
- */
+    /*
+     * These macros are as per the BANKED versions above, but without saving
+     * and restoring the PPAGE register.
+     */
 
-    #define portRESTORE_CONTEXT()                      \
-    {                                                  \
-        extern volatile void * pxCurrentTCB;           \
-        extern volatile UBaseType_t uxCriticalNesting; \
-                                                       \
-        __asm( "ldx pxCurrentTCB" );                   \
-        __asm( "lds 0, x" );                           \
-        __asm( "pula" );                               \
-        __asm( "staa uxCriticalNesting" );             \
+    #define portRESTORE_CONTEXT()                                   \
+    {                                                               \
+        extern volatile void * pxCurrentTCB;                        \
+        extern volatile UBaseType_t uxCriticalNesting;  \
+                                                                    \
+        __asm( "ldx pxCurrentTCB" );                                \
+        __asm( "lds 0, x" );                                        \
+        __asm( "pula" );                                            \
+        __asm( "staa uxCriticalNesting" );                          \
     }
 
-    #define portSAVE_CONTEXT()                         \
-    {                                                  \
-        extern volatile void * pxCurrentTCB;           \
-        extern volatile UBaseType_t uxCriticalNesting; \
-                                                       \
-        __asm( "ldaa uxCriticalNesting" );             \
-        __asm( "psha" );                               \
-        __asm( "ldx pxCurrentTCB" );                   \
-        __asm( "sts 0, x" );                           \
+    #define portSAVE_CONTEXT()                                      \
+    {                                                               \
+        extern volatile void * pxCurrentTCB;                        \
+        extern volatile UBaseType_t uxCriticalNesting;  \
+                                                                    \
+        __asm( "ldaa uxCriticalNesting" );                          \
+        __asm( "psha" );                                            \
+        __asm( "ldx pxCurrentTCB" );                                \
+        __asm( "sts 0, x" );                                        \
     }
-#endif /* ifdef BANKED_MODEL */
+#endif
 
 /*
  * Utility macro to call macros above in correct order in order to perform a
@@ -192,14 +191,14 @@
  * the ISR does not use any local (stack) variables.  If the ISR uses stack
  * variables portYIELD() should be used in it's place.
  */
-#define portTASK_SWITCH_FROM_ISR() \
-    portSAVE_CONTEXT();            \
-    vTaskSwitchContext();          \
+#define portTASK_SWITCH_FROM_ISR()                              \
+    portSAVE_CONTEXT();                                         \
+    vTaskSwitchContext();                                       \
     portRESTORE_CONTEXT();
 
 
 /* Task function macros as described on the FreeRTOS.org WEB site. */
-#define portTASK_FUNCTION_PROTO( vFunction, pvParameters )    void vFunction( void * pvParameters )
-#define portTASK_FUNCTION( vFunction, pvParameters )          void vFunction( void * pvParameters )
+#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
+#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )
 
 #endif /* PORTMACRO_H */
