diff --git a/portable/Softune/MB91460/__STD_LIB_sbrk.c b/portable/Softune/MB91460/__STD_LIB_sbrk.c index 0be354fec8b..d328a65fc5b 100644 --- a/portable/Softune/MB91460/__STD_LIB_sbrk.c +++ b/portable/Softune/MB91460/__STD_LIB_sbrk.c @@ -30,29 +30,26 @@ /* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */ /* ELIGIBILITY FOR ANY PURPOSES. */ /* (C) Fujitsu Microelectronics Europe GmbH */ - /*--------------------------------------------------------------------------- - * __STD_LIB_sbrk.C - * - Used by heap_3.c for memory allocation and deletion. - * - * /*---------------------------------------------------------------------------*/ + __STD_LIB_sbrk.C + - Used by heap_3.c for memory allocation and deletion. + +/*---------------------------------------------------------------------------*/ #include "FreeRTOSConfig.h" #include -static long brk_siz = 0; -typedef int _heep_t; -#define ROUNDUP( s ) ( ( ( s ) + sizeof( _heep_t ) - 1 ) & ~( sizeof( _heep_t ) - 1 ) ) -static _heep_t _heep[ ROUNDUP( configTOTAL_HEAP_SIZE ) / sizeof( _heep_t ) ]; -#define _heep_size ROUNDUP( configTOTAL_HEAP_SIZE ) + static long brk_siz = 0; + typedef int _heep_t; + #define ROUNDUP(s) (((s)+sizeof(_heep_t)-1)&~(sizeof(_heep_t)-1)) + static _heep_t _heep[ROUNDUP(configTOTAL_HEAP_SIZE)/sizeof(_heep_t)]; + #define _heep_size ROUNDUP(configTOTAL_HEAP_SIZE) -extern char * sbrk( int size ) -{ - if( ( brk_siz + size > _heep_size ) || ( brk_siz + size < 0 ) ) + extern char *sbrk(int size) { - return( ( char * ) -1 ); - } + if (brk_siz + size > _heep_size || brk_siz + size < 0) - brk_siz += size; - return( ( char * ) _heep + brk_siz - size ); -} + return((char*)-1); + brk_siz += size; + return( (char*)_heep + brk_siz - size); + } diff --git a/portable/Softune/MB91460/port.c b/portable/Softune/MB91460/port.c index b8248f2b342..08e197b06ac 100644 --- a/portable/Softune/MB91460/port.c +++ b/portable/Softune/MB91460/port.c @@ -33,7 +33,7 @@ /*-----------------------------------------------------------*/ /* We require the address of the pxCurrentTCB variable, but don't want to know - * any details of its type. */ +any details of its type. */ typedef void TCB_t; extern volatile TCB_t * volatile pxCurrentTCB; @@ -106,12 +106,10 @@ static void prvSetupTimerInterrupt( void ); * * See the header file portable.h. */ -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 is just useful for debugging. */ + This is just useful for debugging. */ *pxTopOfStack = 0x11111111; pxTopOfStack--; @@ -121,9 +119,9 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, pxTopOfStack--; /* This is a redundant push to the stack, it may be required if - * in some implementations of the compiler the parameter to the task - * is passed on to the stack rather than in R4 register. */ - *pxTopOfStack = ( StackType_t ) ( pvParameters ); + in some implementations of the compiler the parameter to the task + is passed on to the stack rather than in R4 register. */ + *pxTopOfStack = (StackType_t)(pvParameters); pxTopOfStack--; *pxTopOfStack = ( StackType_t ) 0x00000000; /* RP */ @@ -136,36 +134,36 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, pxTopOfStack--; /* In the current implementation of the compiler the first - * parameter to the task (or function) is passed via R4 parameter - * to the task, hence the pvParameters pointer is copied into the R4 - * register. See compiler manual section 4.6.2 for more information. */ - *pxTopOfStack = ( StackType_t ) ( pvParameters ); /* R4 */ + parameter to the task (or function) is passed via R4 parameter + to the task, hence the pvParameters pointer is copied into the R4 + register. See compiler manual section 4.6.2 for more information. */ + *pxTopOfStack = ( StackType_t ) (pvParameters); /* R4 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00003333; /* R3 */ + *pxTopOfStack = ( StackType_t ) 0x00003333; /* R3 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00002222; /* R2 */ + *pxTopOfStack = ( StackType_t ) 0x00002222; /* R2 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00001111; /* R1 */ + *pxTopOfStack = ( StackType_t ) 0x00001111; /* R1 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00000001; /* R0 */ + *pxTopOfStack = ( StackType_t ) 0x00000001; /* R0 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x0000EEEE; /* R14 */ + *pxTopOfStack = ( StackType_t ) 0x0000EEEE; /* R14 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x0000DDDD; /* R13 */ + *pxTopOfStack = ( StackType_t ) 0x0000DDDD; /* R13 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x0000CCCC; /* R12 */ + *pxTopOfStack = ( StackType_t ) 0x0000CCCC; /* R12 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x0000BBBB; /* R11 */ + *pxTopOfStack = ( StackType_t ) 0x0000BBBB; /* R11 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x0000AAAA; /* R10 */ + *pxTopOfStack = ( StackType_t ) 0x0000AAAA; /* R10 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00009999; /* R9 */ + *pxTopOfStack = ( StackType_t ) 0x00009999; /* R9 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x00008888; /* R8 */ + *pxTopOfStack = ( StackType_t ) 0x00008888; /* R8 */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x11110000; /* MDH */ + *pxTopOfStack = ( StackType_t ) 0x11110000; /* MDH */ pxTopOfStack--; - *pxTopOfStack = ( StackType_t ) 0x22220000; /* MDL */ + *pxTopOfStack = ( StackType_t ) 0x22220000; /* MDL */ pxTopOfStack--; /* The start of the task code. */ @@ -190,8 +188,8 @@ BaseType_t xPortStartScheduler( void ) #pragma endasm /* Simulate a function call end as generated by the compiler. We will now - * jump to the start of the task the context of which we have just restored. */ - __asm( " reti " ); + jump to the start of the task the context of which we have just restored. */ + __asm(" reti "); /* Should not get here. */ return pdFAIL; @@ -201,39 +199,39 @@ BaseType_t xPortStartScheduler( void ) void vPortEndScheduler( void ) { /* Not implemented - unlikely to ever be required as there is nothing to - * return to. */ + return to. */ } /*-----------------------------------------------------------*/ static void prvSetupTimerInterrupt( void ) { /* The peripheral clock divided by 32 is used by the timer. */ - const uint16_t usReloadValue = ( uint16_t ) ( ( ( configPER_CLOCK_HZ / configTICK_RATE_HZ ) / 32UL ) - 1UL ); +const uint16_t usReloadValue = ( uint16_t ) ( ( ( configPER_CLOCK_HZ / configTICK_RATE_HZ ) / 32UL ) - 1UL ); /* Setup RLT0 to generate a tick interrupt. */ - TMCSR0_CNTE = 0; /* Count Disable */ - TMCSR0_CSL = 0x2; /* CLKP/32 */ - TMCSR0_MOD = 0; /* Software trigger */ - TMCSR0_RELD = 1; /* Reload */ + TMCSR0_CNTE = 0; /* Count Disable */ + TMCSR0_CSL = 0x2; /* CLKP/32 */ + TMCSR0_MOD = 0; /* Software trigger */ + TMCSR0_RELD = 1; /* Reload */ - TMCSR0_UF = 0; /* Clear underflow flag */ + TMCSR0_UF = 0; /* Clear underflow flag */ TMRLR0 = usReloadValue; - TMCSR0_INTE = 1; /* Interrupt Enable */ - TMCSR0_CNTE = 1; /* Count Enable */ - TMCSR0_TRG = 1; /* Trigger */ + TMCSR0_INTE = 1; /* Interrupt Enable */ + TMCSR0_CNTE = 1; /* Count Enable */ + TMCSR0_TRG = 1; /* Trigger */ - PORTEN = 0x3; /* Port Enable */ + PORTEN = 0x3; /* Port Enable */ } /*-----------------------------------------------------------*/ #if configUSE_PREEMPTION == 1 -/* - * Tick ISR for preemptive scheduler. The tick count is incremented - * after the context is saved. Then the context is switched if required, - * and last the context of the task which is to be resumed is restored. - */ + /* + * Tick ISR for preemptive scheduler. The tick count is incremented + * after the context is saved. Then the context is switched if required, + * and last the context of the task which is to be resumed is restored. + */ #pragma asm @@ -259,13 +257,13 @@ static void prvSetupTimerInterrupt( void ) #pragma endasm -#else /* if configUSE_PREEMPTION == 1 */ +#else -/* - * Tick ISR for the cooperative scheduler. All this does is increment the - * tick count. We don't need to switch context, this can only be done by - * manual calls to taskYIELD(); - */ + /* + * Tick ISR for the cooperative scheduler. All this does is increment the + * tick count. We don't need to switch context, this can only be done by + * manual calls to taskYIELD(); + */ __interrupt void ReloadTimer0_IRQHandler( void ) { /* Clear RLT0 interrupt flag */ @@ -273,7 +271,7 @@ static void prvSetupTimerInterrupt( void ) xTaskIncrementTick(); } -#endif /* if configUSE_PREEMPTION == 1 */ +#endif /* * Manual context switch. We can use a __nosavereg attribute as the context diff --git a/portable/Softune/MB91460/portmacro.h b/portable/Softune/MB91460/portmacro.h index a80760b88a5..9ae6959c46b 100644 --- a/portable/Softune/MB91460/portmacro.h +++ b/portable/Softune/MB91460/portmacro.h @@ -46,24 +46,24 @@ */ /* 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 - -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 -#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS ) - typedef uint32_t TickType_t; +#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; + + +#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 #else #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width. @@ -74,38 +74,38 @@ typedef unsigned long UBaseType_t; #if configKERNEL_INTERRUPT_PRIORITY != 30 #error configKERNEL_INTERRUPT_PRIORITY (set in FreeRTOSConfig.h) must match the ILM value set in the following line - 30 (1Eh) being the default. #endif -#define portDISABLE_INTERRUPTS() __asm( " STILM #1Eh " ) -#define portENABLE_INTERRUPTS() __asm( " STILM #1Fh " ) +#define portDISABLE_INTERRUPTS() __asm(" STILM #1Eh ") +#define portENABLE_INTERRUPTS() __asm(" STILM #1Fh ") -#define portENTER_CRITICAL() \ - __asm( " ST PS,@-R15 " ); \ - __asm( " ANDCCR #0xef " ); \ +#define portENTER_CRITICAL() \ + __asm(" ST PS,@-R15 "); \ + __asm(" ANDCCR #0xef "); \ -#define portEXIT_CRITICAL() \ - __asm( " LD @R15+,PS " ); \ +#define portEXIT_CRITICAL() \ + __asm(" LD @R15+,PS "); \ /*-----------------------------------------------------------*/ /* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 4 -#define portNOP() __asm( " nop " ); +#define portSTACK_GROWTH ( -1 ) +#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) +#define portBYTE_ALIGNMENT 4 +#define portNOP() __asm( " nop " ); /*-----------------------------------------------------------*/ /* portYIELD() uses a SW interrupt */ -#define portYIELD() __asm( " INT #40H " ); +#define portYIELD() __asm( " INT #40H " ); /* portYIELD_FROM_ISR() uses delayed interrupt */ -#define portYIELD_FROM_ISR() DICR_DLYI = 1 +#define portYIELD_FROM_ISR() DICR_DLYI = 1 /*-----------------------------------------------------------*/ /* 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 ) -#define portMINIMAL_STACK_SIZE configMINIMAL_STACK_SIZE +#define portMINIMAL_STACK_SIZE configMINIMAL_STACK_SIZE #endif /* PORTMACRO_H */ diff --git a/portable/Softune/MB96340/__STD_LIB_sbrk.c b/portable/Softune/MB96340/__STD_LIB_sbrk.c index 0be354fec8b..d328a65fc5b 100644 --- a/portable/Softune/MB96340/__STD_LIB_sbrk.c +++ b/portable/Softune/MB96340/__STD_LIB_sbrk.c @@ -30,29 +30,26 @@ /* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */ /* ELIGIBILITY FOR ANY PURPOSES. */ /* (C) Fujitsu Microelectronics Europe GmbH */ - /*--------------------------------------------------------------------------- - * __STD_LIB_sbrk.C - * - Used by heap_3.c for memory allocation and deletion. - * - * /*---------------------------------------------------------------------------*/ + __STD_LIB_sbrk.C + - Used by heap_3.c for memory allocation and deletion. + +/*---------------------------------------------------------------------------*/ #include "FreeRTOSConfig.h" #include -static long brk_siz = 0; -typedef int _heep_t; -#define ROUNDUP( s ) ( ( ( s ) + sizeof( _heep_t ) - 1 ) & ~( sizeof( _heep_t ) - 1 ) ) -static _heep_t _heep[ ROUNDUP( configTOTAL_HEAP_SIZE ) / sizeof( _heep_t ) ]; -#define _heep_size ROUNDUP( configTOTAL_HEAP_SIZE ) + static long brk_siz = 0; + typedef int _heep_t; + #define ROUNDUP(s) (((s)+sizeof(_heep_t)-1)&~(sizeof(_heep_t)-1)) + static _heep_t _heep[ROUNDUP(configTOTAL_HEAP_SIZE)/sizeof(_heep_t)]; + #define _heep_size ROUNDUP(configTOTAL_HEAP_SIZE) -extern char * sbrk( int size ) -{ - if( ( brk_siz + size > _heep_size ) || ( brk_siz + size < 0 ) ) + extern char *sbrk(int size) { - return( ( char * ) -1 ); - } + if (brk_siz + size > _heep_size || brk_siz + size < 0) - brk_siz += size; - return( ( char * ) _heep + brk_siz - size ); -} + return((char*)-1); + brk_siz += size; + return( (char*)_heep + brk_siz - size); + } diff --git a/portable/Softune/MB96340/port.c b/portable/Softune/MB96340/port.c index 21d2cc14d9d..aef0d65a922 100644 --- a/portable/Softune/MB96340/port.c +++ b/portable/Softune/MB96340/port.c @@ -1,6 +1,6 @@ /* * FreeRTOS Kernel - * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT * @@ -30,8 +30,8 @@ #include "task.h" /*----------------------------------------------------------- -* Implementation of functions defined in portable.h for the 16FX port. -*----------------------------------------------------------*/ + * Implementation of functions defined in portable.h for the 16FX port. + *----------------------------------------------------------*/ /* * Get current value of DPR and ADB registers @@ -44,7 +44,7 @@ StackType_t xGet_DPR_ADB_bank( void ); StackType_t xGet_DTB_PCB_bank( void ); /* - * Sets up the periodic ISR used for the RTOS tick. This uses RLT0, but + * Sets up the periodic ISR used for the RTOS tick. This uses RLT0, but * can be done using any given RLT. */ static void prvSetupRLT0Interrupt( void ); @@ -61,164 +61,164 @@ extern volatile TCB_t * volatile pxCurrentTCB; /*-----------------------------------------------------------*/ /* - * Macro to save a task context to the task stack. This macro copies the - * saved context (AH:AL, DPR:ADB, DTB:PCB , PC and PS) from the system - * stack to task stack pointed by user stack pointer ( USP for SMALL and - * MEDIUM memory model amd USB:USP for COMPACT and LARGE memory model ), - * then it pushes the general purpose registers RW0-RW7 on to the task - * stack. Finally the resultant stack pointer value is saved into the - * task control block so it can be retrieved the next time the task + * Macro to save a task context to the task stack. This macro copies the + * saved context (AH:AL, DPR:ADB, DTB:PCB , PC and PS) from the system + * stack to task stack pointed by user stack pointer ( USP for SMALL and + * MEDIUM memory model amd USB:USP for COMPACT and LARGE memory model ), + * then it pushes the general purpose registers RW0-RW7 on to the task + * stack. Finally the resultant stack pointer value is saved into the + * task control block so it can be retrieved the next time the task * executes. */ -#if ( ( configMEMMODEL == portSMALL ) || ( configMEMMODEL == portMEDIUM ) ) - - #define portSAVE_CONTEXT() \ - { __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " PUSHW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) " ); \ - __asm( " MOVW A, _pxCurrentTCB " ); \ - __asm( " MOVW A, SP " ); \ - __asm( " SWAPW " ); \ - __asm( " MOVW @AL, AH " ); \ - __asm( " OR CCR,#H'20 " ); \ - } +#if( ( configMEMMODEL == portSMALL ) || ( configMEMMODEL == portMEDIUM ) ) + + #define portSAVE_CONTEXT() \ + { __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" PUSHW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) "); \ + __asm(" MOVW A, _pxCurrentTCB "); \ + __asm(" MOVW A, SP "); \ + __asm(" SWAPW "); \ + __asm(" MOVW @AL, AH "); \ + __asm(" OR CCR,#H'20 "); \ + } /* * Macro to restore a task context from the task stack. This is * effectively the reverse of SAVE_CONTEXT(). First the stack pointer * value (USP for SMALL and MEDIUM memory model amd USB:USP for COMPACT - * and LARGE memory model ) is loaded from the task control block. Next the - * value of all the general purpose registers RW0-RW7 is retrieved. + * and LARGE memory model ) is loaded from the task control block. Next + * the value of all the general purpose registers RW0-RW7 is retrieved. * Finally it copies of the context ( AH:AL, DPR:ADB, DTB:PCB, PC and PS) * of the task to be executed upon RETI from user stack to system stack. */ - #define portRESTORE_CONTEXT() \ - { __asm( " MOVW A, _pxCurrentTCB " ); \ - __asm( " MOVW A, @A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " MOVW SP, A " ); \ - __asm( " POPW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - } - -#elif ( ( configMEMMODEL == portCOMPACT ) || ( configMEMMODEL == portLARGE ) ) - - #define portSAVE_CONTEXT() \ - { __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " POPW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " PUSHW A " ); \ - __asm( " PUSHW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) " ); \ - __asm( " MOVL A, _pxCurrentTCB " ); \ - __asm( " MOVL RL2, A " ); \ - __asm( " MOVW A, SP " ); \ - __asm( " MOVW @RL2+0, A " ); \ - __asm( " MOV A, USB " ); \ - __asm( " MOV @RL2+2, A " ); \ - } - - #define portRESTORE_CONTEXT() \ - { __asm( " MOVL A, _pxCurrentTCB " ); \ - __asm( " MOVL RL2, A " ); \ - __asm( " MOVW A, @RL2+0 " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " MOVW SP, A " ); \ - __asm( " MOV A, @RL2+2 " ); \ - __asm( " MOV USB, A " ); \ - __asm( " POPW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - __asm( " AND CCR,#H'DF " ); \ - __asm( " POPW A " ); \ - __asm( " OR CCR,#H'20 " ); \ - __asm( " PUSHW A " ); \ - } -#endif /* if ( ( configMEMMODEL == portSMALL ) || ( configMEMMODEL == portMEDIUM ) ) */ + #define portRESTORE_CONTEXT() \ + { __asm(" MOVW A, _pxCurrentTCB "); \ + __asm(" MOVW A, @A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" MOVW SP, A "); \ + __asm(" POPW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + } + +#elif( ( configMEMMODEL == portCOMPACT ) || ( configMEMMODEL == portLARGE ) ) + + #define portSAVE_CONTEXT() \ + { __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" POPW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" PUSHW A "); \ + __asm(" PUSHW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) "); \ + __asm(" MOVL A, _pxCurrentTCB "); \ + __asm(" MOVL RL2, A "); \ + __asm(" MOVW A, SP "); \ + __asm(" MOVW @RL2+0, A "); \ + __asm(" MOV A, USB "); \ + __asm(" MOV @RL2+2, A "); \ + } + + #define portRESTORE_CONTEXT() \ + { __asm(" MOVL A, _pxCurrentTCB "); \ + __asm(" MOVL RL2, A "); \ + __asm(" MOVW A, @RL2+0 "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" MOVW SP, A "); \ + __asm(" MOV A, @RL2+2 "); \ + __asm(" MOV USB, A "); \ + __asm(" POPW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7) "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + __asm(" AND CCR,#H'DF "); \ + __asm(" POPW A "); \ + __asm(" OR CCR,#H'20 "); \ + __asm(" PUSHW A "); \ + } +#endif /*-----------------------------------------------------------*/ /* - * Functions for obtaining the current value of DPR:ADB, DTB:PCB bank registers + * Functions for obtaining the current value of DPR:ADB, DTB:PCB bank registers */ #pragma asm @@ -261,12 +261,10 @@ extern volatile TCB_t * volatile pxCurrentTCB; * * See the header file portable.h. */ -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 is just useful for debugging. */ + This is just useful for debugging. */ *pxTopOfStack = 0x1111; pxTopOfStack--; *pxTopOfStack = 0x2222; @@ -274,12 +272,12 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, *pxTopOfStack = 0x3333; pxTopOfStack--; - /* Once the task is called the task would push the pointer to the - * parameter onto the stack. Hence here the pointer would be copied to the stack - * first. When using the COMPACT or LARGE memory model the pointer would be 24 - * bits, and when using the SMALL or MEDIUM memory model the pointer would be 16 - * bits. */ - #if ( ( configMEMMODEL == portCOMPACT ) || ( configMEMMODEL == portLARGE ) ) + /* Once the task is called the task would push the pointer to the + parameter onto the stack. Hence here the pointer would be copied to the stack + first. When using the COMPACT or LARGE memory model the pointer would be 24 + bits, and when using the SMALL or MEDIUM memory model the pointer would be 16 + bits. */ + #if( ( configMEMMODEL == portCOMPACT ) || ( configMEMMODEL == portLARGE ) ) { *pxTopOfStack = ( StackType_t ) ( ( uint32_t ) ( pvParameters ) >> 16 ); pxTopOfStack--; @@ -290,9 +288,9 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, pxTopOfStack--; /* This is redundant push to the stack. This is required in order to introduce - * an offset so that the task accesses a parameter correctly that is passed on to - * the task stack. */ - #if ( ( configMEMMODEL == portMEDIUM ) || ( configMEMMODEL == portLARGE ) ) + an offset so that the task accesses a parameter correctly that is passed on to + the task stack. */ + #if( ( configMEMMODEL == portMEDIUM ) || ( configMEMMODEL == portLARGE ) ) { *pxTopOfStack = ( xGet_DTB_PCB_bank() & 0xff00 ) | ( ( ( int32_t ) ( pxCode ) >> 16 ) & 0xff ); pxTopOfStack--; @@ -300,7 +298,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, #endif /* This is redundant push to the stack. This is required in order to introduce - * an offset so the task correctly accesses the parameter passed on the task stack. */ + an offset so the task correctly accesses the parameter passed on the task stack. */ *pxTopOfStack = ( StackType_t ) ( pxCode ); pxTopOfStack--; @@ -321,15 +319,15 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, #endif /* DTB | PCB, in case of MEDIUM and LARGE memory models, PCB would be used - * along with PC to indicate the start address of the function. */ - #if ( ( configMEMMODEL == portMEDIUM ) || ( configMEMMODEL == portLARGE ) ) + along with PC to indicate the start address of the function. */ + #if( ( configMEMMODEL == portMEDIUM ) || ( configMEMMODEL == portLARGE ) ) { *pxTopOfStack = ( xGet_DTB_PCB_bank() & 0xff00 ) | ( ( ( int32_t ) ( pxCode ) >> 16 ) & 0xff ); pxTopOfStack--; } #endif - /* DPR | ADB */ + /* DPR | ADB */ *pxTopOfStack = xGet_DPR_ADB_bank(); pxTopOfStack--; @@ -365,7 +363,7 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, static void prvSetupRLT0Interrupt( void ) { /* The peripheral clock divided by 16 is used by the timer. */ - const uint16_t usReloadValue = ( uint16_t ) ( ( ( configCLKP1_CLOCK_HZ / configTICK_RATE_HZ ) / 16UL ) - 1UL ); +const uint16_t usReloadValue = ( uint16_t ) ( ( ( configCLKP1_CLOCK_HZ / configTICK_RATE_HZ ) / 16UL ) - 1UL ); /* set reload value = 34999+1, TICK Interrupt after 10 ms @ 56MHz of CLKP1 */ TMRLR0 = usReloadValue; @@ -383,9 +381,9 @@ BaseType_t xPortStartScheduler( void ) /* Restore the context of the first task that is going to run. */ portRESTORE_CONTEXT(); - /* Simulate a function call end as generated by the compiler. We will now - * jump to the start of the task the context of which we have just restored. */ - __asm( " reti " ); + /* Simulate a function call end as generated by the compiler. We will now + jump to the start of the task the context of which we have just restored. */ + __asm(" reti "); /* Should not get here. */ @@ -396,7 +394,7 @@ BaseType_t xPortStartScheduler( void ) void vPortEndScheduler( void ) { /* Not implemented - unlikely to ever be required as there is nothing to - * return to. */ + return to. */ } /*-----------------------------------------------------------*/ @@ -408,12 +406,12 @@ void vPortEndScheduler( void ) #if configUSE_PREEMPTION == 1 -/* - * Tick ISR for preemptive scheduler. We can use a __nosavereg attribute - * as the context is to be saved by the portSAVE_CONTEXT() macro, not the - * compiler generated code. The tick count is incremented after the context - * is saved. - */ + /* + * Tick ISR for preemptive scheduler. We can use a __nosavereg attribute + * as the context is to be saved by the portSAVE_CONTEXT() macro, not the + * compiler generated code. The tick count is incremented after the context + * is saved. + */ __nosavereg __interrupt void prvRLT0_TICKISR( void ) { /* Disable interrupts so that portSAVE_CONTEXT() is not interrupted */ @@ -429,7 +427,7 @@ void vPortEndScheduler( void ) TMCSR0_UF = 0; /* Increment the tick count then switch to the highest priority task - * that is ready to run. */ + that is ready to run. */ if( xTaskIncrementTick() != pdFALSE ) { vTaskSwitchContext(); @@ -445,13 +443,13 @@ void vPortEndScheduler( void ) __EI(); } -#else /* if configUSE_PREEMPTION == 1 */ +#else -/* - * Tick ISR for the cooperative scheduler. All this does is increment the - * tick count. We don't need to switch context, this can only be done by - * manual calls to taskYIELD(); - */ + /* + * Tick ISR for the cooperative scheduler. All this does is increment the + * tick count. We don't need to switch context, this can only be done by + * manual calls to taskYIELD(); + */ __interrupt void prvRLT0_TICKISR( void ) { /* Clear RLT0 interrupt flag */ @@ -460,12 +458,12 @@ void vPortEndScheduler( void ) xTaskIncrementTick(); } -#endif /* if configUSE_PREEMPTION == 1 */ +#endif /*-----------------------------------------------------------*/ /* - * Manual context switch. We can use a __nosavereg attribute as the context + * Manual context switch. We can use a __nosavereg attribute as the context * is to be saved by the portSAVE_CONTEXT() macro, not the compiler generated * code. */ @@ -494,7 +492,7 @@ __nosavereg __interrupt void vPortYieldDelayed( void ) __EI(); /* Clear delayed interrupt flag */ - __asm( " CLRB 03A4H:0 " ); + __asm (" CLRB 03A4H:0 "); /* Switch to the highest priority task that is ready to run. */ vTaskSwitchContext(); diff --git a/portable/Softune/MB96340/portmacro.h b/portable/Softune/MB96340/portmacro.h index 7f36aad5927..827874fde9d 100644 --- a/portable/Softune/MB96340/portmacro.h +++ b/portable/Softune/MB96340/portmacro.h @@ -34,11 +34,11 @@ #include /* Constants denoting the available memory models. These are used within - * FreeRTOSConfig.h to set the configMEMMODEL value. */ -#define portSMALL 0 -#define portMEDIUM 1 -#define portCOMPACT 2 -#define portLARGE 3 +FreeRTOSConfig.h to set the configMEMMODEL value. */ +#define portSMALL 0 +#define portMEDIUM 1 +#define portCOMPACT 2 +#define portLARGE 3 /*----------------------------------------------------------- @@ -52,24 +52,24 @@ */ /* Type definitions. */ -#define portCHAR char -#define portFLOAT float -#define portDOUBLE double -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint16_t -#define portBASE_TYPE short - -typedef portSTACK_TYPE StackType_t; -typedef short BaseType_t; -typedef unsigned short UBaseType_t; - - -#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 portCHAR char +#define portFLOAT float +#define portDOUBLE double +#define portLONG long +#define portSHORT short +#define portSTACK_TYPE uint16_t +#define portBASE_TYPE short + +typedef portSTACK_TYPE StackType_t; +typedef short BaseType_t; +typedef unsigned short UBaseType_t; + + +#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 #else #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width. @@ -80,39 +80,39 @@ typedef unsigned short UBaseType_t; #if configKERNEL_INTERRUPT_PRIORITY != 6 #error configKERNEL_INTERRUPT_PRIORITY (set in FreeRTOSConfig.h) must match the ILM value set in the following line - #06H being the default. #endif -#define portDISABLE_INTERRUPTS() __asm( " MOV ILM, #06h " ) -#define portENABLE_INTERRUPTS() __asm( " MOV ILM, #07h " ) +#define portDISABLE_INTERRUPTS() __asm(" MOV ILM, #06h ") +#define portENABLE_INTERRUPTS() __asm(" MOV ILM, #07h ") -#define portENTER_CRITICAL() \ - { __asm( " PUSHW PS " ); \ - portDISABLE_INTERRUPTS(); \ - } +#define portENTER_CRITICAL() \ + { __asm(" PUSHW PS "); \ + portDISABLE_INTERRUPTS(); \ + } -#define portEXIT_CRITICAL() \ - { __asm( " POPW PS " ); \ - } +#define portEXIT_CRITICAL() \ + { __asm(" POPW PS "); \ + } /*-----------------------------------------------------------*/ /* Architecture specifics. */ -#define portSTACK_GROWTH ( -1 ) -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) -#define portBYTE_ALIGNMENT 2 -#define portNOP() __asm( " NOP " ); +#define portSTACK_GROWTH ( -1 ) +#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) +#define portBYTE_ALIGNMENT 2 +#define portNOP() __asm( " NOP " ); /*-----------------------------------------------------------*/ /* portYIELD() uses SW interrupt */ -#define portYIELD() __asm( " INT #122 " ); +#define portYIELD() __asm( " INT #122 " ); /* portYIELD_FROM_ISR() uses delayed interrupt */ -#define portYIELD_FROM_ISR() __asm( " SETB 03A4H:0 " ); +#define portYIELD_FROM_ISR() __asm( " SETB 03A4H:0 " ); /*-----------------------------------------------------------*/ /* 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 ) -#define portMINIMAL_STACK_SIZE configMINIMAL_STACK_SIZE +#define portMINIMAL_STACK_SIZE configMINIMAL_STACK_SIZE #endif /* PORTMACRO_H */