mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-10-24 21:57:46 -04:00 
			
		
		
		
	Revert Portable/WizC Formatting (#888)
* Revert formatting on WizC ports * Fix spelling mistakes --------- Co-authored-by: Rahul Kar <118818625+kar-rahul-aws@users.noreply.github.com> Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									b3febb7416
								
							
						
					
					
						commit
						cb196ddbb1
					
				
					 5 changed files with 396 additions and 401 deletions
				
			
		|  | @ -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 <FreeRTOS.h> | ||||
| #include <task.h> | ||||
| 
 | ||||
| /* 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 */ | ||||
|     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 */ | ||||
|     bTMR1ON     = portBIT_SET;              // Start timer1
 | ||||
| } | ||||
|  |  | |||
|  | @ -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 */ | ||||
|  |  | |||
|  | @ -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 */ | ||||
|  |  | |||
|  | @ -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 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 | ||||
| */ | ||||
| 
 | ||||
| /* Scheduler include files. */ | ||||
| #include <FreeRTOS.h> | ||||
|  | @ -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 ) | ||||
|         { | ||||
|  |  | |||
|  | @ -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 <stddef.h> | ||||
| #include <pic.h> | ||||
| 
 | ||||
| #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 portDISABLE_INTERRUPTS()    \ | ||||
|     do                              \ | ||||
|     {                               \ | ||||
|         bGIE=0;                     \ | ||||
|     } while(bGIE)   // MicroChip recommends this check!
 | ||||
| 
 | ||||
| #define portENABLE_INTERRUPTS() \ | ||||
|     do                          \ | ||||
|     {                           \ | ||||
|         bGIE = 1;               \ | ||||
|     } while( 0 ) | ||||
| #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 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 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 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 ) | ||||
| 
 | ||||
| /*-----------------------------------------------------------*/ | ||||
| 
 | ||||
|  | @ -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 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 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 | ||||
| /*-----------------------------------------------------------*/ | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue