From 4c868321f438d1cbfa98e3125d243bf7738e18aa Mon Sep 17 00:00:00 2001 From: Soren Ptak Date: Wed, 8 Nov 2023 15:18:05 -0800 Subject: [PATCH 1/2] Revert formatting on WizC ports --- portable/WizC/PIC18/Drivers/Tick/Tick.c | 86 ++-- portable/WizC/PIC18/Drivers/Tick/isrTick.c | 24 +- portable/WizC/PIC18/addFreeRTOS.h | 16 +- portable/WizC/PIC18/port.c | 134 +++-- portable/WizC/PIC18/portmacro.h | 549 ++++++++++----------- 5 files changed, 402 insertions(+), 407 deletions(-) diff --git a/portable/WizC/PIC18/Drivers/Tick/Tick.c b/portable/WizC/PIC18/Drivers/Tick/Tick.c index 16d7bc12a05..5dfa080b694 100644 --- a/portable/WizC/PIC18/Drivers/Tick/Tick.c +++ b/portable/WizC/PIC18/Drivers/Tick/Tick.c @@ -27,22 +27,22 @@ */ /* - * Changes from V3.0.0 - + ISRcode is pulled inline and portTICKisr() is therefore - + deleted from this file. - + - + Prescaler logic for Timer1 added to allow for a wider - + range of TickRates. - + - + Changes from V3.0.1 - */ +Changes from V3.0.0 + + ISRcode is pulled inline and portTICKisr() is therefore + deleted from this file. + + + Prescaler logic for Timer1 added to allow for a wider + range of TickRates. + +Changes from V3.0.1 +*/ #include #include /* IO port constants. */ -#define portBIT_SET ( 1 ) -#define portBIT_CLEAR ( 0 ) +#define portBIT_SET (1) +#define portBIT_CLEAR (0) /* * Hardware setup for the tick. @@ -50,27 +50,27 @@ * and requested tickrate, a prescaled value with a matching * prescaler are determined. */ -#define portTIMER_COMPARE_BASE ( ( APROCFREQ / 4 ) / configTICK_RATE_HZ ) +#define portTIMER_COMPARE_BASE ((APROCFREQ/4)/configTICK_RATE_HZ) -#if portTIMER_COMPARE_BASE < 0x10000 - #define portTIMER_COMPARE_VALUE ( portTIMER_COMPARE_BASE ) - #define portTIMER_COMPARE_PS1 ( portBIT_CLEAR ) - #define portTIMER_COMPARE_PS0 ( portBIT_CLEAR ) +#if portTIMER_COMPARE_BASE < 0x10000 + #define portTIMER_COMPARE_VALUE (portTIMER_COMPARE_BASE) + #define portTIMER_COMPARE_PS1 (portBIT_CLEAR) + #define portTIMER_COMPARE_PS0 (portBIT_CLEAR) #elif portTIMER_COMPARE_BASE < 0x20000 - #define portTIMER_COMPARE_VALUE ( portTIMER_COMPARE_BASE / 2 ) - #define portTIMER_COMPARE_PS1 ( portBIT_CLEAR ) - #define portTIMER_COMPARE_PS0 ( portBIT_SET ) + #define portTIMER_COMPARE_VALUE (portTIMER_COMPARE_BASE / 2) + #define portTIMER_COMPARE_PS1 (portBIT_CLEAR) + #define portTIMER_COMPARE_PS0 (portBIT_SET) #elif portTIMER_COMPARE_BASE < 0x40000 - #define portTIMER_COMPARE_VALUE ( portTIMER_COMPARE_BASE / 4 ) - #define portTIMER_COMPARE_PS1 ( portBIT_SET ) - #define portTIMER_COMPARE_PS0 ( portBIT_CLEAR ) + #define portTIMER_COMPARE_VALUE (portTIMER_COMPARE_BASE / 4) + #define portTIMER_COMPARE_PS1 (portBIT_SET) + #define portTIMER_COMPARE_PS0 (portBIT_CLEAR) #elif portTIMER_COMPARE_BASE < 0x80000 - #define portTIMER_COMPARE_VALUE ( portTIMER_COMPARE_BASE / 8 ) - #define portTIMER_COMPARE_PS1 ( portBIT_SET ) - #define portTIMER_COMPARE_PS0 ( portBIT_SET ) -#else /* if portTIMER_COMPARE_BASE < 0x10000 */ + #define portTIMER_COMPARE_VALUE (portTIMER_COMPARE_BASE / 8) + #define portTIMER_COMPARE_PS1 (portBIT_SET) + #define portTIMER_COMPARE_PS0 (portBIT_SET) +#else #error "TickRate out of range" -#endif /* if portTIMER_COMPARE_BASE < 0x10000 */ +#endif /*-----------------------------------------------------------*/ @@ -92,27 +92,27 @@ void portSetupTick( void ) * Set the compare match value. */ CCPR1H = ( uint8_t ) ( ( portTIMER_COMPARE_VALUE >> 8 ) & 0xff ); - CCPR1L = ( uint8_t ) ( portTIMER_COMPARE_VALUE & 0xff ); + CCPR1L = ( uint8_t ) ( portTIMER_COMPARE_VALUE & 0xff ); /* * Set Compare Special Event Trigger Mode */ - bCCP1M3 = portBIT_SET; - bCCP1M2 = portBIT_CLEAR; - bCCP1M1 = portBIT_SET; - bCCP1M0 = portBIT_SET; + bCCP1M3 = portBIT_SET; + bCCP1M2 = portBIT_CLEAR; + bCCP1M1 = portBIT_SET; + bCCP1M0 = portBIT_SET; /* * Enable CCP1 interrupt */ - bCCP1IE = portBIT_SET; + bCCP1IE = portBIT_SET; /* * We are only going to use the global interrupt bit, so disable * interruptpriorities and enable peripheral interrupts. */ - bIPEN = portBIT_CLEAR; - bPEIE = portBIT_SET; + bIPEN = portBIT_CLEAR; + bPEIE = portBIT_SET; /* * Set up timer1 @@ -128,12 +128,12 @@ void portSetupTick( void ) /* * Setup the timer */ - bRD16 = portBIT_SET; /* 16-bit */ - bT1CKPS1 = portTIMER_COMPARE_PS1; /* prescaler */ - bT1CKPS0 = portTIMER_COMPARE_PS0; /* prescaler */ - bT1OSCEN = portBIT_SET; /* Oscillator enable */ - bT1SYNC = portBIT_SET; /* No external clock sync */ - bTMR1CS = portBIT_CLEAR; /* Internal clock */ - - bTMR1ON = portBIT_SET; /* Start timer1 */ + bRD16 = portBIT_SET; // 16-bit + bT1CKPS1 = portTIMER_COMPARE_PS1; // prescaler + bT1CKPS0 = portTIMER_COMPARE_PS0; // prescaler + bT1OSCEN = portBIT_SET; // Oscillator enable + bT1SYNC = portBIT_SET; // No external clock sync + bTMR1CS = portBIT_CLEAR; // Internal clock + + bTMR1ON = portBIT_SET; // Start timer1 } diff --git a/portable/WizC/PIC18/Drivers/Tick/isrTick.c b/portable/WizC/PIC18/Drivers/Tick/isrTick.c index b4d1338b2e6..f61047dc1ea 100644 --- a/portable/WizC/PIC18/Drivers/Tick/isrTick.c +++ b/portable/WizC/PIC18/Drivers/Tick/isrTick.c @@ -27,17 +27,17 @@ */ /* - * Changes from V3.0.0 - + ISRcode pulled inline to reduce stack-usage. - + - + Added functionality to only call vTaskSwitchContext() once - + when handling multiple interruptsources in a single interruptcall. - + - + Filename changed to a .c extension to allow stepping through code - + using F7. - + - + Changes from V3.0.1 - */ +Changes from V3.0.0 + + ISRcode pulled inline to reduce stack-usage. + + + Added functionality to only call vTaskSwitchContext() once + when handling multiple interruptsources in a single interruptcall. + + + Filename changed to a .c extension to allow stepping through code + using F7. + +Changes from V3.0.1 +*/ /* * ISR for the tick. @@ -76,4 +76,4 @@ #pragma wizcpp uselib "$__PATHNAME__/Tick.c" -#endif /* _FREERTOS_DRIVERS_TICK_ISRTICK_C */ +#endif /* _FREERTOS_DRIVERS_TICK_ISRTICK_C */ diff --git a/portable/WizC/PIC18/addFreeRTOS.h b/portable/WizC/PIC18/addFreeRTOS.h index 28ea79c02b0..178ca1089db 100644 --- a/portable/WizC/PIC18/addFreeRTOS.h +++ b/portable/WizC/PIC18/addFreeRTOS.h @@ -27,13 +27,13 @@ */ /* - * Changes from V3.0.0 - * - * Changes from V3.0.1 - * - * Changes from V4.0.1 - * Uselib pragma added for Croutine.c - */ +Changes from V3.0.0 + +Changes from V3.0.1 + +Changes from V4.0.1 + Uselib pragma added for Croutine.c +*/ /* * The installation script will automatically prepend this file to the default FreeRTOS.h. @@ -51,4 +51,4 @@ #pragma wizcpp uselib "$__PATHNAME__/libFreeRTOS/Modules/List.c" #pragma wizcpp uselib "$__PATHNAME__/libFreeRTOS/Modules/Port.c" -#endif /* WIZC_FREERTOS_H */ +#endif /* WIZC_FREERTOS_H */ diff --git a/portable/WizC/PIC18/port.c b/portable/WizC/PIC18/port.c index 13f8d4a1bca..e3cf9999a02 100644 --- a/portable/WizC/PIC18/port.c +++ b/portable/WizC/PIC18/port.c @@ -27,19 +27,19 @@ */ /* - * Changes from V3.2.1 - + CallReturn Depth increased from 8 to 10 levels to accommodate wizC/fedC V12. - + - + Changes from V3.2.0 - + TBLPTRU is now initialised to zero during the initial stack creation of a new task. This solves - + an error on devices with more than 64kB ROM. - + - + Changes from V3.0.0 - + ucCriticalNesting is now initialised to 0x7F to prevent interrupts from being - + handled before the scheduler is started. - + - + Changes from V3.0.1 - */ +Changes from V3.2.1 + + CallReturn Depth increased from 8 to 10 levels to accomodate wizC/fedC V12. + +Changes from V3.2.0 + + TBLPTRU is now initialised to zero during the initial stack creation of a new task. This solves + an error on devices with more than 64kB ROM. + +Changes from V3.0.0 + + ucCriticalNesting is now initialised to 0x7F to prevent interrupts from being + handled before the scheduler is started. + +Changes from V3.0.1 +*/ /* Scheduler include files. */ #include @@ -78,17 +78,17 @@ extern volatile TCB_t * volatile pxCurrentTCB; * 16 bytes: Free space on stack */ #if _ROMSIZE > 0x8000 - #define portSTACK_FSR_BYTES ( 15 ) - #define portSTACK_CALLRETURN_ENTRY_SIZE ( 3 ) + #define portSTACK_FSR_BYTES ( 15 ) + #define portSTACK_CALLRETURN_ENTRY_SIZE ( 3 ) #else - #define portSTACK_FSR_BYTES ( 13 ) - #define portSTACK_CALLRETURN_ENTRY_SIZE ( 2 ) + #define portSTACK_FSR_BYTES ( 13 ) + #define portSTACK_CALLRETURN_ENTRY_SIZE ( 2 ) #endif -#define portSTACK_MINIMAL_CALLRETURN_DEPTH ( 10 ) -#define portSTACK_OTHER_BYTES ( 20 ) +#define portSTACK_MINIMAL_CALLRETURN_DEPTH ( 10 ) +#define portSTACK_OTHER_BYTES ( 20 ) -uint16_t usCalcMinStackSize = 0; +uint16_t usCalcMinStackSize = 0; /*-----------------------------------------------------------*/ @@ -106,20 +106,16 @@ register uint8_t ucCriticalNesting = 0x7F; * Initialise the stack of a new task. * See portSAVE_CONTEXT macro for description. */ -StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, - TaskFunction_t pxCode, - void * pvParameters ) +StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters ) { - uint8_t ucScratch; - +uint8_t ucScratch; /* * Get the size of the RAMarea in page 0 used by the compiler * We do this here already to avoid W-register conflicts. */ _Pragma("asm") - movlw OVERHEADPAGE0 - LOCOPTSIZE + MAXLOCOPTSIZE - movwf PRODL, ACCESS; - PRODL is used as temp register + movlw OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE + movwf PRODL,ACCESS ; PRODL is used as temp register _Pragma("asmend") ucScratch = PRODL; @@ -127,9 +123,9 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, * Place a few bytes of known values on the bottom of the stack. * This is just useful for debugging. */ -/* *pxTopOfStack-- = 0x11; */ -/* *pxTopOfStack-- = 0x22; */ -/* *pxTopOfStack-- = 0x33; */ +// *pxTopOfStack-- = 0x11; +// *pxTopOfStack-- = 0x22; +// *pxTopOfStack-- = 0x33; /* * Simulate how the stack would look after a call to vPortYield() @@ -140,36 +136,36 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, * First store the function parameters. This is where the task expects * to find them when it starts running. */ - *pxTopOfStack-- = ( StackType_t ) ( ( ( uint16_t ) pvParameters >> 8 ) & 0x00ff ); - *pxTopOfStack-- = ( StackType_t ) ( ( uint16_t ) pvParameters & 0x00ff ); + *pxTopOfStack-- = ( StackType_t ) ( (( uint16_t ) pvParameters >> 8) & 0x00ff ); + *pxTopOfStack-- = ( StackType_t ) ( ( uint16_t ) pvParameters & 0x00ff ); /* * Next are all the registers that form part of the task context. */ - *pxTopOfStack-- = ( StackType_t ) 0x11; /* STATUS. */ - *pxTopOfStack-- = ( StackType_t ) 0x22; /* WREG. */ - *pxTopOfStack-- = ( StackType_t ) 0x33; /* BSR. */ - *pxTopOfStack-- = ( StackType_t ) 0x44; /* PRODH. */ - *pxTopOfStack-- = ( StackType_t ) 0x55; /* PRODL. */ - *pxTopOfStack-- = ( StackType_t ) 0x66; /* FSR0H. */ - *pxTopOfStack-- = ( StackType_t ) 0x77; /* FSR0L. */ - *pxTopOfStack-- = ( StackType_t ) 0x88; /* FSR1H. */ - *pxTopOfStack-- = ( StackType_t ) 0x99; /* FSR1L. */ - *pxTopOfStack-- = ( StackType_t ) 0xAA; /* TABLAT. */ - #if _ROMSIZE > 0x8000 - *pxTopOfStack-- = ( StackType_t ) 0x00; /* TBLPTRU. */ - #endif - *pxTopOfStack-- = ( StackType_t ) 0xCC; /* TBLPTRH. */ - *pxTopOfStack-- = ( StackType_t ) 0xDD; /* TBLPTRL. */ - #if _ROMSIZE > 0x8000 - *pxTopOfStack-- = ( StackType_t ) 0xEE; /* PCLATU. */ - #endif - *pxTopOfStack-- = ( StackType_t ) 0xFF; /* PCLATH. */ + *pxTopOfStack-- = ( StackType_t ) 0x11; /* STATUS. */ + *pxTopOfStack-- = ( StackType_t ) 0x22; /* WREG. */ + *pxTopOfStack-- = ( StackType_t ) 0x33; /* BSR. */ + *pxTopOfStack-- = ( StackType_t ) 0x44; /* PRODH. */ + *pxTopOfStack-- = ( StackType_t ) 0x55; /* PRODL. */ + *pxTopOfStack-- = ( StackType_t ) 0x66; /* FSR0H. */ + *pxTopOfStack-- = ( StackType_t ) 0x77; /* FSR0L. */ + *pxTopOfStack-- = ( StackType_t ) 0x88; /* FSR1H. */ + *pxTopOfStack-- = ( StackType_t ) 0x99; /* FSR1L. */ + *pxTopOfStack-- = ( StackType_t ) 0xAA; /* TABLAT. */ +#if _ROMSIZE > 0x8000 + *pxTopOfStack-- = ( StackType_t ) 0x00; /* TBLPTRU. */ +#endif + *pxTopOfStack-- = ( StackType_t ) 0xCC; /* TBLPTRH. */ + *pxTopOfStack-- = ( StackType_t ) 0xDD; /* TBLPTRL. */ +#if _ROMSIZE > 0x8000 + *pxTopOfStack-- = ( StackType_t ) 0xEE; /* PCLATU. */ +#endif + *pxTopOfStack-- = ( StackType_t ) 0xFF; /* PCLATH. */ /* * Next the compiler's scratchspace. */ - while( ucScratch-- > 0 ) + while(ucScratch-- > 0) { *pxTopOfStack-- = ( StackType_t ) 0; } @@ -180,11 +176,11 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack, * stack, too. TOSU is always written as zero here because wizC does not allow * functionpointers to point above 64kB in ROM. */ - #if _ROMSIZE > 0x8000 - *pxTopOfStack-- = ( StackType_t ) 0; - #endif +#if _ROMSIZE > 0x8000 + *pxTopOfStack-- = ( StackType_t ) 0; +#endif *pxTopOfStack-- = ( StackType_t ) ( ( ( uint16_t ) pxCode >> 8 ) & 0x00ff ); - *pxTopOfStack-- = ( StackType_t ) ( ( uint16_t ) pxCode & 0x00ff ); + *pxTopOfStack-- = ( StackType_t ) ( ( uint16_t ) pxCode & 0x00ff ); /* * Store the number of return addresses on the hardware stack. @@ -211,19 +207,19 @@ uint16_t usPortCALCULATE_MINIMAL_STACK_SIZE( void ) * Fetch the size of compiler's scratchspace. */ _Pragma("asm") - movlw OVERHEADPAGE0 - LOCOPTSIZE + MAXLOCOPTSIZE - movlb usCalcMinStackSize >> 8 - movwf usCalcMinStackSize, BANKED + movlw OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE + movlb usCalcMinStackSize>>8 + movwf usCalcMinStackSize,BANKED _Pragma("asmend") /* * Add minimum needed stackspace */ - usCalcMinStackSize += ( portSTACK_FSR_BYTES ) - + ( portSTACK_MINIMAL_CALLRETURN_DEPTH * portSTACK_CALLRETURN_ENTRY_SIZE ) - + ( portSTACK_OTHER_BYTES ); + usCalcMinStackSize += ( portSTACK_FSR_BYTES ) + + ( portSTACK_MINIMAL_CALLRETURN_DEPTH * portSTACK_CALLRETURN_ENTRY_SIZE ) + + ( portSTACK_OTHER_BYTES ); - return( usCalcMinStackSize ); + return(usCalcMinStackSize); } /*-----------------------------------------------------------*/ @@ -286,11 +282,11 @@ void vPortYield( void ) } /*-----------------------------------------------------------*/ -#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - void * pvPortMalloc( uint16_t usWantedSize ) + void *pvPortMalloc( uint16_t usWantedSize ) { - void * pvReturn; + void *pvReturn; vTaskSuspendAll(); { @@ -305,9 +301,9 @@ void vPortYield( void ) /*-----------------------------------------------------------*/ -#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) +#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) - void vPortFree( void * pv ) + void vPortFree( void *pv ) { if( pv ) { diff --git a/portable/WizC/PIC18/portmacro.h b/portable/WizC/PIC18/portmacro.h index e272084b3f6..0fdba688eee 100644 --- a/portable/WizC/PIC18/portmacro.h +++ b/portable/WizC/PIC18/portmacro.h @@ -27,48 +27,48 @@ */ /* - * Changes from V3.0.0 - * - * Changes from V3.0.1 - */ +Changes from V3.0.0 + +Changes from V3.0.1 +*/ #ifndef PORTMACRO_H #define PORTMACRO_H -#if !defined( _SERIES ) || _SERIES != 18 +#if !defined(_SERIES) || _SERIES != 18 #error "WizC supports FreeRTOS on the Microchip PIC18-series only" #endif -#if !defined( QUICKCALL ) || QUICKCALL != 1 +#if !defined(QUICKCALL) || QUICKCALL != 1 #error "QuickCall must be enabled (see ProjectOptions/Optimisations)" #endif #include #include -#define portCHAR char -#define portFLOAT float -#define portDOUBLE portFLOAT -#define portLONG long -#define portSHORT short -#define portSTACK_TYPE uint8_t -#define portBASE_TYPE char +#define portCHAR char +#define portFLOAT float +#define portDOUBLE portFLOAT +#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 -#define portBYTE_ALIGNMENT 1 +#define portBYTE_ALIGNMENT 1 /*-----------------------------------------------------------*/ @@ -76,33 +76,33 @@ typedef unsigned char UBaseType_t; * Constant used for context switch macro when we require the interrupt * enable state to be forced when the interrupted task is switched back in. */ -#define portINTERRUPTS_FORCED ( 0x01 ) +#define portINTERRUPTS_FORCED (0x01) /* * Constant used for context switch macro when we require the interrupt * enable state to be unchanged when the interrupted task is switched back in. */ -#define portINTERRUPTS_UNCHANGED ( 0x00 ) +#define portINTERRUPTS_UNCHANGED (0x00) /* Initial interrupt enable state for newly created tasks. This value is * used when a task switches in for the first time. */ -#define portINTERRUPTS_INITIAL_STATE ( portINTERRUPTS_FORCED ) +#define portINTERRUPTS_INITIAL_STATE (portINTERRUPTS_FORCED) /* * Macros to modify the global interrupt enable bit in INTCON. */ -#define portDISABLE_INTERRUPTS() \ - do \ - { \ - bGIE = 0; \ - } while( bGIE ) /* MicroChip recommends this check! */ - -#define portENABLE_INTERRUPTS() \ - do \ - { \ - bGIE = 1; \ - } while( 0 ) +#define portDISABLE_INTERRUPTS() \ + do \ + { \ + bGIE=0; \ + } while(bGIE) // MicroChip recommends this check! + +#define portENABLE_INTERRUPTS() \ + do \ + { \ + bGIE=1; \ + } while(0) /*-----------------------------------------------------------*/ @@ -111,43 +111,43 @@ typedef unsigned char UBaseType_t; */ extern uint8_t ucCriticalNesting; -#define portNO_CRITICAL_SECTION_NESTING ( ( uint8_t ) 0 ) - -#define portENTER_CRITICAL() \ - do \ - { \ - portDISABLE_INTERRUPTS(); \ - \ - /* \ - * Now interrupts are disabled ucCriticalNesting \ - * can be accessed directly. Increment \ - * ucCriticalNesting to keep a count of how \ - * many times portENTER_CRITICAL() has been called. \ - */ \ - ucCriticalNesting++; \ - } while( 0 ) - -#define portEXIT_CRITICAL() \ - do \ - { \ - if( ucCriticalNesting > portNO_CRITICAL_SECTION_NESTING ) \ - { \ - /* \ - * Decrement the nesting count as we are leaving a \ - * critical section. \ - */ \ - ucCriticalNesting--; \ - } \ - \ - /* \ - * If the nesting level has reached zero then \ - * interrupts should be re-enabled. \ - */ \ - if( ucCriticalNesting == portNO_CRITICAL_SECTION_NESTING ) \ - { \ - portENABLE_INTERRUPTS(); \ - } \ - } while( 0 ) +#define portNO_CRITICAL_SECTION_NESTING ( ( uint8_t ) 0 ) + +#define portENTER_CRITICAL() \ + do \ + { \ + portDISABLE_INTERRUPTS(); \ + \ + /* \ + * Now interrupts are disabled ucCriticalNesting \ + * can be accessed directly. Increment \ + * ucCriticalNesting to keep a count of how \ + * many times portENTER_CRITICAL() has been called. \ + */ \ + ucCriticalNesting++; \ + } while(0) + +#define portEXIT_CRITICAL() \ + do \ + { \ + if(ucCriticalNesting > portNO_CRITICAL_SECTION_NESTING) \ + { \ + /* \ + * Decrement the nesting count as we are leaving a \ + * critical section. \ + */ \ + ucCriticalNesting--; \ + } \ + \ + /* \ + * If the nesting level has reached zero then \ + * interrupts should be re-enabled. \ + */ \ + if( ucCriticalNesting == portNO_CRITICAL_SECTION_NESTING ) \ + { \ + portENABLE_INTERRUPTS(); \ + } \ + } while(0) /*-----------------------------------------------------------*/ @@ -159,15 +159,15 @@ extern uint8_t ucCriticalNesting; extern uint16_t usPortCALCULATE_MINIMAL_STACK_SIZE( void ); extern uint16_t usCalcMinStackSize; -#define portMINIMAL_STACK_SIZE \ - ( ( usCalcMinStackSize == 0 ) \ - ? usPortCALCULATE_MINIMAL_STACK_SIZE() \ - : usCalcMinStackSize ) +#define portMINIMAL_STACK_SIZE \ + ((usCalcMinStackSize == 0) \ + ? usPortCALCULATE_MINIMAL_STACK_SIZE() \ + : usCalcMinStackSize ) /* * WizC uses a downgrowing stack */ -#define portSTACK_GROWTH ( -1 ) +#define portSTACK_GROWTH ( -1 ) /*-----------------------------------------------------------*/ @@ -176,7 +176,7 @@ extern uint16_t usCalcMinStackSize; * the stack, then saves the new top of stack into the TCB. TOSU and TBLPTRU * are only saved/restored on devices with more than 64kB (32k Words) ROM. * - * The stackpointer is held by WizC in FSR2 and points to the first free byte. + * The stackpointer is helt by WizC in FSR2 and points to the first free byte. * WizC uses a "downgrowing" stack. There is no framepointer. * * We keep track of the interruptstatus using ucCriticalNesting. When this @@ -189,7 +189,7 @@ extern uint16_t usCalcMinStackSize; * re-enabled when the interrupted task is switched back in. * * If this is called from a manual context switch (i.e. from a call to yield), - * then we want to keep the current value of ucCriticalNesting so it is restored + * then we want to keep the current value of ucCritialNesting so it is restored * with its current value. This allows a yield from within a critical section. * * The compiler uses some locations at the bottom of RAM for temporary @@ -203,220 +203,219 @@ extern uint16_t usCalcMinStackSize; * assembler definitions. */ -#define portSAVE_CONTEXT( ucInterruptForced ) \ - do \ - { \ - portDISABLE_INTERRUPTS(); \ - \ - _Pragma("asm") \ - ; \ - ; Push the relevant SFR's onto the task's stack \ - ; \ - movff STATUS,POSTDEC2 \ - movff WREG,POSTDEC2 \ - movff BSR,POSTDEC2 \ - movff PRODH,POSTDEC2 \ - movff PRODL,POSTDEC2 \ - movff FSR0H,POSTDEC2 \ - movff FSR0L,POSTDEC2 \ - movff FSR1H,POSTDEC2 \ - movff FSR1L,POSTDEC2 \ - movff TABLAT,POSTDEC2 \ - if __ROMSIZE > 0x8000 \ - movff TBLPTRU,POSTDEC2 \ - endif \ - movff TBLPTRH,POSTDEC2 \ - movff TBLPTRL,POSTDEC2 \ - if __ROMSIZE > 0x8000 \ - movff PCLATU,POSTDEC2 \ - endif \ - movff PCLATH,POSTDEC2 \ - ; \ - ; Store the compiler-scratch-area as described above. \ - ; \ - movlw OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE \ - clrf FSR0L,ACCESS \ - clrf FSR0H,ACCESS \ - _rtos_S1: \ - movff POSTINC0,POSTDEC2 \ - decfsz WREG,W,ACCESS \ - SMARTJUMP _rtos_S1 \ - ; \ - ; Save the pic call/return-stack belonging to the \ - ; current task by copying it to the task's software- \ - ; stack. We save the hardware stack pointer (which \ - ; is the number of addresses on the stack) in the \ - ; W-register first because we need it later and it \ - ; is modified in the save-loop by executing pop's. \ - ; After the loop the W-register is stored on the \ - ; stack, too. \ - ; \ - movf STKPTR,W,ACCESS \ - bz _rtos_s3 \ - _rtos_S2: \ - if __ROMSIZE > 0x8000 \ - movff TOSU,POSTDEC2 \ - endif \ - movff TOSH,POSTDEC2 \ - movff TOSL,POSTDEC2 \ - pop \ - tstfsz STKPTR,ACCESS \ - SMARTJUMP _rtos_S2 \ - _rtos_s3: \ - movwf POSTDEC2,ACCESS \ - ; \ - ; Next the value for ucCriticalNesting used by the \ - ; task is stored on the stack. When \ - ; (ucInterruptForced == portINTERRUPTS_FORCED), we save \ - ; it as 0 (portNO_CRITICAL_SECTION_NESTING). \ - ; \ - if ucInterruptForced == portINTERRUPTS_FORCED \ - clrf POSTDEC2,ACCESS \ - else \ - movff ucCriticalNesting,POSTDEC2 \ - endif \ - ; \ - ; Save the new top of the software stack in the TCB. \ - ; \ - movff pxCurrentTCB,FSR0L \ - movff pxCurrentTCB+1,FSR0H \ - movff FSR2L,POSTINC0 \ - movff FSR2H,POSTINC0 \ - _Pragma("asmend") \ - } while(0) +#define portSAVE_CONTEXT( ucInterruptForced ) \ + do \ + { \ + portDISABLE_INTERRUPTS(); \ + \ + _Pragma("asm") \ + ; \ + ; Push the relevant SFR's onto the task's stack \ + ; \ + movff STATUS,POSTDEC2 \ + movff WREG,POSTDEC2 \ + movff BSR,POSTDEC2 \ + movff PRODH,POSTDEC2 \ + movff PRODL,POSTDEC2 \ + movff FSR0H,POSTDEC2 \ + movff FSR0L,POSTDEC2 \ + movff FSR1H,POSTDEC2 \ + movff FSR1L,POSTDEC2 \ + movff TABLAT,POSTDEC2 \ + if __ROMSIZE > 0x8000 \ + movff TBLPTRU,POSTDEC2 \ + endif \ + movff TBLPTRH,POSTDEC2 \ + movff TBLPTRL,POSTDEC2 \ + if __ROMSIZE > 0x8000 \ + movff PCLATU,POSTDEC2 \ + endif \ + movff PCLATH,POSTDEC2 \ + ; \ + ; Store the compiler-scratch-area as described above. \ + ; \ + movlw OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE \ + clrf FSR0L,ACCESS \ + clrf FSR0H,ACCESS \ + _rtos_S1: \ + movff POSTINC0,POSTDEC2 \ + decfsz WREG,W,ACCESS \ + SMARTJUMP _rtos_S1 \ + ; \ + ; Save the pic call/return-stack belonging to the \ + ; current task by copying it to the task's software- \ + ; stack. We save the hardware stack pointer (which \ + ; is the number of addresses on the stack) in the \ + ; W-register first because we need it later and it \ + ; is modified in the save-loop by executing pop's. \ + ; After the loop the W-register is stored on the \ + ; stack, too. \ + ; \ + movf STKPTR,W,ACCESS \ + bz _rtos_s3 \ + _rtos_S2: \ + if __ROMSIZE > 0x8000 \ + movff TOSU,POSTDEC2 \ + endif \ + movff TOSH,POSTDEC2 \ + movff TOSL,POSTDEC2 \ + pop \ + tstfsz STKPTR,ACCESS \ + SMARTJUMP _rtos_S2 \ + _rtos_s3: \ + movwf POSTDEC2,ACCESS \ + ; \ + ; Next the value for ucCriticalNesting used by the \ + ; task is stored on the stack. When \ + ; (ucInterruptForced == portINTERRUPTS_FORCED), we save \ + ; it as 0 (portNO_CRITICAL_SECTION_NESTING). \ + ; \ + if ucInterruptForced == portINTERRUPTS_FORCED \ + clrf POSTDEC2,ACCESS \ + else \ + movff ucCriticalNesting,POSTDEC2 \ + endif \ + ; \ + ; Save the new top of the software stack in the TCB. \ + ; \ + movff pxCurrentTCB,FSR0L \ + movff pxCurrentTCB+1,FSR0H \ + movff FSR2L,POSTINC0 \ + movff FSR2H,POSTINC0 \ + _Pragma("asmend") \ + } while(0) /************************************************************/ /* * This is the reverse of portSAVE_CONTEXT. */ -#define portRESTORE_CONTEXT() \ - do \ - { \ - _Pragma("asm") \ - ; \ - ; Set FSR0 to point to pxCurrentTCB->pxTopOfStack. \ - ; \ - movff pxCurrentTCB,FSR0L \ - movff pxCurrentTCB+1,FSR0H \ - ; \ - ; De-reference FSR0 to set the address it holds into \ - ; FSR2 (i.e. *( pxCurrentTCB->pxTopOfStack ) ). FSR2 \ - ; is used by wizC as stackpointer. \ - ; \ - movff POSTINC0,FSR2L \ - movff POSTINC0,FSR2H \ - ; \ - ; Next, the value for ucCriticalNesting used by the \ - ; task is retrieved from the stack. \ - ; \ - movff PREINC2,ucCriticalNesting \ - ; \ - ; Rebuild the pic call/return-stack. The number of \ - ; return addresses is the next item on the task stack. \ - ; Save this number in PRODL. Then fetch the addresses \ - ; and store them on the hardwarestack. \ - ; The datasheets say we can't use movff here... \ - ; \ - movff PREINC2,PRODL /* Use PRODL as tempregister */ \ - clrf STKPTR,ACCESS \ - _rtos_R1: \ - push \ - movf PREINC2,W,ACCESS \ - movwf TOSL,ACCESS \ - movf PREINC2,W,ACCESS \ - movwf TOSH,ACCESS \ - if __ROMSIZE > 0x8000 \ - movf PREINC2,W,ACCESS \ - movwf TOSU,ACCESS \ - else \ - clrf TOSU,ACCESS \ - endif \ - decfsz PRODL,F,ACCESS \ - SMARTJUMP _rtos_R1 \ - ; \ - ; Restore the compiler's working storage area to page 0 \ - ; \ - movlw OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE \ - movwf FSR0L,ACCESS \ - clrf FSR0H,ACCESS \ - _rtos_R2: \ - decf FSR0L,F,ACCESS \ - movff PREINC2,INDF0 \ - tstfsz FSR0L,ACCESS \ - SMARTJUMP _rtos_R2 \ - ; \ - ; Restore the sfr's forming the tasks context. \ - ; We cannot yet restore bsr, w and status because \ - ; we need these registers for a final test. \ - ; \ - movff PREINC2,PCLATH \ - if __ROMSIZE > 0x8000 \ - movff PREINC2,PCLATU \ - else \ - clrf PCLATU,ACCESS \ - endif \ - movff PREINC2,TBLPTRL \ - movff PREINC2,TBLPTRH \ - if __ROMSIZE > 0x8000 \ - movff PREINC2,TBLPTRU \ - else \ - clrf TBLPTRU,ACCESS \ - endif \ - movff PREINC2,TABLAT \ - movff PREINC2,FSR1L \ - movff PREINC2,FSR1H \ - movff PREINC2,FSR0L \ - movff PREINC2,FSR0H \ - movff PREINC2,PRODL \ - movff PREINC2,PRODH \ - ; \ - ; The return from portRESTORE_CONTEXT() depends on \ - ; the value of ucCriticalNesting. When it is zero, \ - ; interrupts need to be enabled. This is done via a \ - ; retfie instruction because we need the \ - ; interrupt-enabling and the return to the restored \ - ; task to be uninterruptible. \ - ; Because bsr, status and W are affected by the test \ - ; they are restored after the test. \ - ; \ - movlb ucCriticalNesting>>8 \ - tstfsz ucCriticalNesting,BANKED \ - SMARTJUMP _rtos_R4 \ - _rtos_R3: \ - movff PREINC2,BSR \ - movff PREINC2,WREG \ - movff PREINC2,STATUS \ - retfie 0 ; Return enabling interrupts \ - _rtos_R4: \ - movff PREINC2,BSR \ - movff PREINC2,WREG \ - movff PREINC2,STATUS \ - return 0 ; Return without affecting interrupts \ - _Pragma("asmend") \ - } while(0) +#define portRESTORE_CONTEXT() \ + do \ + { \ + _Pragma("asm") \ + ; \ + ; Set FSR0 to point to pxCurrentTCB->pxTopOfStack. \ + ; \ + movff pxCurrentTCB,FSR0L \ + movff pxCurrentTCB+1,FSR0H \ + ; \ + ; De-reference FSR0 to set the address it holds into \ + ; FSR2 (i.e. *( pxCurrentTCB->pxTopOfStack ) ). FSR2 \ + ; is used by wizC as stackpointer. \ + ; \ + movff POSTINC0,FSR2L \ + movff POSTINC0,FSR2H \ + ; \ + ; Next, the value for ucCriticalNesting used by the \ + ; task is retrieved from the stack. \ + ; \ + movff PREINC2,ucCriticalNesting \ + ; \ + ; Rebuild the pic call/return-stack. The number of \ + ; return addresses is the next item on the task stack. \ + ; Save this number in PRODL. Then fetch the addresses \ + ; and store them on the hardwarestack. \ + ; The datasheets say we can't use movff here... \ + ; \ + movff PREINC2,PRODL // Use PRODL as tempregister \ + clrf STKPTR,ACCESS \ + _rtos_R1: \ + push \ + movf PREINC2,W,ACCESS \ + movwf TOSL,ACCESS \ + movf PREINC2,W,ACCESS \ + movwf TOSH,ACCESS \ + if __ROMSIZE > 0x8000 \ + movf PREINC2,W,ACCESS \ + movwf TOSU,ACCESS \ + else \ + clrf TOSU,ACCESS \ + endif \ + decfsz PRODL,F,ACCESS \ + SMARTJUMP _rtos_R1 \ + ; \ + ; Restore the compiler's working storage area to page 0 \ + ; \ + movlw OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE \ + movwf FSR0L,ACCESS \ + clrf FSR0H,ACCESS \ + _rtos_R2: \ + decf FSR0L,F,ACCESS \ + movff PREINC2,INDF0 \ + tstfsz FSR0L,ACCESS \ + SMARTJUMP _rtos_R2 \ + ; \ + ; Restore the sfr's forming the tasks context. \ + ; We cannot yet restore bsr, w and status because \ + ; we need these registers for a final test. \ + ; \ + movff PREINC2,PCLATH \ + if __ROMSIZE > 0x8000 \ + movff PREINC2,PCLATU \ + else \ + clrf PCLATU,ACCESS \ + endif \ + movff PREINC2,TBLPTRL \ + movff PREINC2,TBLPTRH \ + if __ROMSIZE > 0x8000 \ + movff PREINC2,TBLPTRU \ + else \ + clrf TBLPTRU,ACCESS \ + endif \ + movff PREINC2,TABLAT \ + movff PREINC2,FSR1L \ + movff PREINC2,FSR1H \ + movff PREINC2,FSR0L \ + movff PREINC2,FSR0H \ + movff PREINC2,PRODL \ + movff PREINC2,PRODH \ + ; \ + ; The return from portRESTORE_CONTEXT() depends on \ + ; the value of ucCriticalNesting. When it is zero, \ + ; interrupts need to be enabled. This is done via a \ + ; retfie instruction because we need the \ + ; interrupt-enabling and the return to the restored \ + ; task to be uninterruptable. \ + ; Because bsr, status and W are affected by the test \ + ; they are restored after the test. \ + ; \ + movlb ucCriticalNesting>>8 \ + tstfsz ucCriticalNesting,BANKED \ + SMARTJUMP _rtos_R4 \ + _rtos_R3: \ + movff PREINC2,BSR \ + movff PREINC2,WREG \ + movff PREINC2,STATUS \ + retfie 0 ; Return enabling interrupts \ + _rtos_R4: \ + movff PREINC2,BSR \ + movff PREINC2,WREG \ + movff PREINC2,STATUS \ + return 0 ; Return without affecting interrupts \ + _Pragma("asmend") \ + } while(0) /*-----------------------------------------------------------*/ -#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) +#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ ) /*-----------------------------------------------------------*/ extern void vPortYield( void ); -#define portYIELD() vPortYield() +#define portYIELD() vPortYield() -#define portNOP() \ - _Pragma("asm") \ - nop \ - _Pragma("asmend") +#define portNOP() _Pragma("asm") \ + nop \ + _Pragma("asmend") /*-----------------------------------------------------------*/ -#define portTASK_FUNCTION( xFunction, pvParameters ) \ - void pointed xFunction( void * pvParameters ) \ +#define portTASK_FUNCTION( xFunction, pvParameters ) \ + void pointed xFunction( void *pvParameters ) \ _Pragma(asmfunc xFunction) -#define portTASK_FUNCTION_PROTO portTASK_FUNCTION +#define portTASK_FUNCTION_PROTO portTASK_FUNCTION /*-----------------------------------------------------------*/ From 8f0f6554c26605214d24ffab8964bb3fc43793f5 Mon Sep 17 00:00:00 2001 From: Soren Ptak Date: Wed, 8 Nov 2023 15:43:36 -0800 Subject: [PATCH 2/2] Fix spelling mistakes --- portable/WizC/PIC18/port.c | 2 +- portable/WizC/PIC18/portmacro.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/portable/WizC/PIC18/port.c b/portable/WizC/PIC18/port.c index e3cf9999a02..edabae61d8c 100644 --- a/portable/WizC/PIC18/port.c +++ b/portable/WizC/PIC18/port.c @@ -28,7 +28,7 @@ /* Changes from V3.2.1 - + CallReturn Depth increased from 8 to 10 levels to accomodate wizC/fedC V12. + + CallReturn Depth increased from 8 to 10 levels to accommodate wizC/fedC V12. Changes from V3.2.0 + TBLPTRU is now initialised to zero during the initial stack creation of a new task. This solves diff --git a/portable/WizC/PIC18/portmacro.h b/portable/WizC/PIC18/portmacro.h index 0fdba688eee..44d26592f5e 100644 --- a/portable/WizC/PIC18/portmacro.h +++ b/portable/WizC/PIC18/portmacro.h @@ -176,7 +176,7 @@ extern uint16_t usCalcMinStackSize; * the stack, then saves the new top of stack into the TCB. TOSU and TBLPTRU * are only saved/restored on devices with more than 64kB (32k Words) ROM. * - * The stackpointer is helt by WizC in FSR2 and points to the first free byte. + * The stackpointer is held by WizC in FSR2 and points to the first free byte. * WizC uses a "downgrowing" stack. There is no framepointer. * * We keep track of the interruptstatus using ucCriticalNesting. When this @@ -189,7 +189,7 @@ extern uint16_t usCalcMinStackSize; * re-enabled when the interrupted task is switched back in. * * If this is called from a manual context switch (i.e. from a call to yield), - * then we want to keep the current value of ucCritialNesting so it is restored + * then we want to keep the current value of ucCriticalNesting so it is restored * with its current value. This allows a yield from within a critical section. * * The compiler uses some locations at the bottom of RAM for temporary @@ -376,7 +376,7 @@ extern uint16_t usCalcMinStackSize; ; interrupts need to be enabled. This is done via a \ ; retfie instruction because we need the \ ; interrupt-enabling and the return to the restored \ - ; task to be uninterruptable. \ + ; task to be uninterruptible. \ ; Because bsr, status and W are affected by the test \ ; they are restored after the test. \ ; \