diff --git a/FreeRTOS/Source/portable/MPLAB/PIC32MX/port.c b/FreeRTOS/Source/portable/MPLAB/PIC32MX/port.c index 1ea1cc6cb..f43dac74e 100644 --- a/FreeRTOS/Source/portable/MPLAB/PIC32MX/port.c +++ b/FreeRTOS/Source/portable/MPLAB/PIC32MX/port.c @@ -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. */ @@ -76,7 +76,7 @@ * Implementation of functions defined in portable.h for the PIC32MX port. *----------------------------------------------------------*/ -#ifndef __XC__ +#ifndef __XC #error This port is designed to work with XC32. Please update your C compiler version. #endif @@ -245,15 +245,15 @@ void vPortIncrementTick( void ) unsigned portBASE_TYPE uxSavedStatus; uxSavedStatus = uxPortSetInterruptMaskFromISR(); - vTaskIncrementTick(); + { + if( xTaskIncrementTick() != pdFALSE ) + { + /* Pend a context switch. */ + _CP0_BIS_CAUSE( portCORE_SW_0 ); + } + } vPortClearInterruptMaskFromISR( uxSavedStatus ); - /* If we are using the preemptive scheduler then we might want to select - a different task to execute. */ - #if configUSE_PREEMPTION == 1 - _CP0_BIS_CAUSE( portCORE_SW_0 ); - #endif /* configUSE_PREEMPTION */ - /* Clear timer 1 interrupt. */ IFS0CLR = _IFS0_T1IF_MASK; } diff --git a/FreeRTOS/Source/portable/MPLAB/PIC32MX/port_asm.S b/FreeRTOS/Source/portable/MPLAB/PIC32MX/port_asm.S index d48b3c58d..eaf95aba6 100644 --- a/FreeRTOS/Source/portable/MPLAB/PIC32MX/port_asm.S +++ b/FreeRTOS/Source/portable/MPLAB/PIC32MX/port_asm.S @@ -131,9 +131,9 @@ vPortStartFirstTask: vPortYieldISR: - /* Make room for the context. First save the current status so we can - manipulate it, and the cause and EPC registers so we capture their - original values in case of interrupt nesting. */ + /* Make room for the context. First save the current status so it can be + manipulated, and the cause and EPC registers so thier original values are + captured. */ mfc0 k0, _CP0_CAUSE addiu sp, sp, -portCONTEXT_SIZE mfc0 k1, _CP0_STATUS @@ -145,7 +145,7 @@ vPortYieldISR: sw s5, 40(sp) sw k1, portSTATUS_STACK_LOCATION(sp) - /* Enable interrupts above the current priority. */ + /* Interrupts above the kernel priority are going to be re-enabled. */ srl k0, k0, 0xa ins k1, k0, 10, 6 ins k1, zero, 1, 4