From: richardbarry Date: Tue, 11 Jun 2013 20:15:15 +0000 (+0000) Subject: Modify the GCC/AVR port to make use of the xTaskIncrementTick return value. X-Git-Tag: V7.5.0~58 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4a8349f9d91d13862e89ab320385cc0854421a25;p=freertos Modify the GCC/AVR port to make use of the xTaskIncrementTick return value. Add pre-processor directives in the dsPIC and PIC24 port layers that allows both port files to be included in the same project. git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1932 1d2547de-c912-0410-9cb9-b8ca96c0e9e2 --- diff --git a/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.h b/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.h index 441577cc8..74e2ff486 100644 --- a/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.h +++ b/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.h @@ -56,19 +56,19 @@ *************************************************************************** - http://www.FreeRTOS.org - Documentation, books, training, latest versions, + http://www.FreeRTOS.org - Documentation, books, training, latest versions, license and Real Time Engineers Ltd. contact details. http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, including FreeRTOS+Trace - an indispensable productivity tool, and our new fully thread aware and reentrant UDP/IP stack. - http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High - Integrity Systems, who sell the code with commercial support, + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems, who sell the code with commercial support, indemnification and middleware, under the OpenRTOS brand. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and mission critical applications that require provable dependability. */ @@ -104,6 +104,7 @@ extern "C" { #define portSHORT int #define portSTACK_TYPE unsigned portCHAR #define portBASE_TYPE portCHAR +#define portPOINTER_SIZE_TYPE unsigned short #if( configUSE_16_BIT_TICKS == 1 ) typedef unsigned portSHORT portTickType; @@ -113,7 +114,7 @@ extern "C" { #define portMAX_DELAY ( portTickType ) 0xffffffff #endif -/*-----------------------------------------------------------*/ +/*-----------------------------------------------------------*/ /* Critical section management. */ extern void vPortEnterCritical( void ); @@ -127,7 +128,7 @@ extern void vPortExitCritical( void ); /* Architecture specifics. */ #define portSTACK_GROWTH ( -1 ) -#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) +#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ ) #define portBYTE_ALIGNMENT 1 #define portNOP() asm( "nop" ) /*-----------------------------------------------------------*/ diff --git a/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.s90 b/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.s90 index 7e892caf7..b67705dac 100644 --- a/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.s90 +++ b/FreeRTOS/Source/portable/IAR/ATMega323/portmacro.s90 @@ -1,6 +1,6 @@ ;/* ; FreeRTOS V7.4.2 - Copyright (C) 2013 Real Time Engineers Ltd. -; +; ; ; *************************************************************************** ; * * @@ -103,7 +103,7 @@ PUBLIC vPortStart ORG USART_UDRE_vect ; Vector address jmp SIG_UART_DATA ; ISR - + RSEG CODE @@ -222,7 +222,7 @@ portRESTORE_CONTEXT MACRO out SREG, r0 ld r0, y+ ; Finally we have finished with r0, so restore r0. - + ENDM @@ -244,7 +244,10 @@ vPortYield: vPortYieldFromTick: portSAVE_CONTEXT ; Save the context of the current task. call xTaskIncrementTick ; Call the timer tick function. + tst r16 + breq SkipTaskSwitch call vTaskSwitchContext ; Call the scheduler. +SkipTaskSwitch: portRESTORE_CONTEXT ; Restore the context of whichever task the ... ret ; ... scheduler decided should run. diff --git a/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/port.c b/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/port.c index d326508c1..8e14b87f3 100644 --- a/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/port.c +++ b/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/port.c @@ -157,7 +157,7 @@ unsigned portBASE_TYPE uxCriticalNesting = 0xef; #endif /* __HAS_EDS__ */ #endif /* MPLAB_PIC24_PORT */ -#if defined( __dsPIC30F__ ) || defined ( __dsPIC33E__ ) || defined( __dsPIC33F__ ) +#if defined( __dsPIC30F__ ) || defined( __dsPIC33F__ ) #define portRESTORE_CONTEXT() \ asm volatile( "MOV _pxCurrentTCB, W0 \n" /* Restore the stack pointer for the task. */ \ diff --git a/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S b/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S index 60144128d..738c7d2ab 100644 --- a/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S +++ b/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_PIC24.S @@ -72,6 +72,8 @@ mission critical applications that require provable dependability. */ +#if defined( __PIC24E__ ) || defined ( __PIC24F__ ) || defined( __PIC24FK__ ) || defined( __PIC24H__ ) + .global _vPortYield .extern _vTaskSwitchContext .extern uxCriticalNesting @@ -133,3 +135,5 @@ _vPortYield: return .end + +#endif /* defined( __PIC24E__ ) || defined ( __PIC24F__ ) || defined( __PIC24FK__ ) || defined( __PIC24H__ ) */ \ No newline at end of file diff --git a/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S b/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S index ce0fbfe5f..f39d203fd 100644 --- a/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S +++ b/FreeRTOS/Source/portable/MPLAB/PIC24_dsPIC/portasm_dsPIC.S @@ -56,22 +56,24 @@ *************************************************************************** - http://www.FreeRTOS.org - Documentation, books, training, latest versions, + http://www.FreeRTOS.org - Documentation, books, training, latest versions, license and Real Time Engineers Ltd. contact details. http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, including FreeRTOS+Trace - an indispensable productivity tool, and our new fully thread aware and reentrant UDP/IP stack. - http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High - Integrity Systems, who sell the code with commercial support, + http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High + Integrity Systems, who sell the code with commercial support, indemnification and middleware, under the OpenRTOS brand. - - http://www.SafeRTOS.com - High Integrity Systems also provide a safety - engineered and independently SIL3 certified version for use in safety and + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and mission critical applications that require provable dependability. */ +#if defined( __dsPIC30F__ ) || defined( __dsPIC33F__ ) + .global _vPortYield .extern _vTaskSwitchContext .extern uxCriticalNesting @@ -103,8 +105,8 @@ _vPortYield: PUSH DOSTARTH PUSH DOENDL PUSH DOENDH - - + + PUSH CORCON PUSH PSVPAG MOV _uxCriticalNesting, W0 /* Save the critical nesting counter for the task. */ @@ -146,3 +148,6 @@ _vPortYield: return .end + +#endif /* defined( __dsPIC30F__ ) || defined( __dsPIC33F__ ) */ +