forked from epagris/FreeRTOS-Kernel
		
	Fix portSET_INTERRUPT_MASK_FROM_ISR definition for atomic operation (#940)
* Introduce portHAS_NESTED_INTERRUPTS to identify if port has nested interrupt or not. * Update atomic.h to use portHAS_NESTED_INTERRUPTS instead of portSET_INTERRUPT_MASK_FROM_ISR definition. --------- Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com> Co-authored-by: ActoryOu <jay2002824@gmail.com>
This commit is contained in:
		
							parent
							
								
									75c4044b7e
								
							
						
					
					
						commit
						be880a1fc8
					
				
							
								
								
									
										9
									
								
								.github/.cSpellWords.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/.cSpellWords.txt
									
									
									
									
										vendored
									
									
								
							@ -59,6 +59,7 @@ brhi
 | 
			
		||||
brne
 | 
			
		||||
bswtrg
 | 
			
		||||
BSWTRG
 | 
			
		||||
Bytesto
 | 
			
		||||
CANEN
 | 
			
		||||
CANRX
 | 
			
		||||
CANTX
 | 
			
		||||
@ -89,13 +90,16 @@ CKGR
 | 
			
		||||
CKLO
 | 
			
		||||
CKPS
 | 
			
		||||
CLDIV
 | 
			
		||||
CLEARINTENA
 | 
			
		||||
CLKA
 | 
			
		||||
CLKB
 | 
			
		||||
CLKDIS
 | 
			
		||||
CLKEN
 | 
			
		||||
clki
 | 
			
		||||
CLKI
 | 
			
		||||
CLKP
 | 
			
		||||
CLKS
 | 
			
		||||
CLKSOURCE
 | 
			
		||||
CLKSTA
 | 
			
		||||
CLRB
 | 
			
		||||
CLRF
 | 
			
		||||
@ -690,6 +694,7 @@ Rsvd
 | 
			
		||||
RTAR
 | 
			
		||||
RTCEN
 | 
			
		||||
RTCSC
 | 
			
		||||
RTICTL
 | 
			
		||||
RTIE
 | 
			
		||||
RTIF
 | 
			
		||||
RTIFRC
 | 
			
		||||
@ -713,6 +718,7 @@ RXRSM
 | 
			
		||||
RXSETUP
 | 
			
		||||
RXSUSP
 | 
			
		||||
RXSYN
 | 
			
		||||
RXTDIS
 | 
			
		||||
RXTEN
 | 
			
		||||
RXUBR
 | 
			
		||||
SBYCR
 | 
			
		||||
@ -726,6 +732,7 @@ SECU
 | 
			
		||||
SENDA
 | 
			
		||||
SETB
 | 
			
		||||
SETEN
 | 
			
		||||
SETINTENA
 | 
			
		||||
SETPSW
 | 
			
		||||
SETR
 | 
			
		||||
setvect
 | 
			
		||||
@ -849,6 +856,7 @@ TXVC
 | 
			
		||||
TXVDIS
 | 
			
		||||
UDCP
 | 
			
		||||
uncrustify
 | 
			
		||||
UNDADD
 | 
			
		||||
UNRE
 | 
			
		||||
unsuspended
 | 
			
		||||
URAD
 | 
			
		||||
@ -867,6 +875,7 @@ VDDCORE
 | 
			
		||||
vect
 | 
			
		||||
VECT
 | 
			
		||||
VECTACTIVE
 | 
			
		||||
VECTKEY
 | 
			
		||||
visualisation
 | 
			
		||||
vldmdbeq
 | 
			
		||||
vldmia
 | 
			
		||||
 | 
			
		||||
@ -509,12 +509,36 @@
 | 
			
		||||
 | 
			
		||||
#endif /* configUSE_TIMERS */
 | 
			
		||||
 | 
			
		||||
#ifndef portHAS_NESTED_INTERRUPTS
 | 
			
		||||
    #if defined( portSET_INTERRUPT_MASK_FROM_ISR ) && defined( portCLEAR_INTERRUPT_MASK_FROM_ISR )
 | 
			
		||||
        #define portHAS_NESTED_INTERRUPTS    1
 | 
			
		||||
    #else
 | 
			
		||||
        #define portHAS_NESTED_INTERRUPTS    0
 | 
			
		||||
    #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef portSET_INTERRUPT_MASK_FROM_ISR
 | 
			
		||||
    #define portSET_INTERRUPT_MASK_FROM_ISR()    0
 | 
			
		||||
    #if ( portHAS_NESTED_INTERRUPTS == 1 )
 | 
			
		||||
        #error portSET_INTERRUPT_MASK_FROM_ISR must be defined for ports that support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 1)
 | 
			
		||||
    #else
 | 
			
		||||
        #define portSET_INTERRUPT_MASK_FROM_ISR()    0
 | 
			
		||||
    #endif
 | 
			
		||||
#else
 | 
			
		||||
    #if ( portHAS_NESTED_INTERRUPTS == 0 )
 | 
			
		||||
        #error portSET_INTERRUPT_MASK_FROM_ISR must not be defined for ports that do not support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 0)
 | 
			
		||||
    #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR
 | 
			
		||||
    #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue )    ( void ) ( uxSavedStatusValue )
 | 
			
		||||
    #if ( portHAS_NESTED_INTERRUPTS == 1 )
 | 
			
		||||
        #error portCLEAR_INTERRUPT_MASK_FROM_ISR must be defined for ports that support nested interrupts  (i.e. portHAS_NESTED_INTERRUPTS is set to 1)
 | 
			
		||||
    #else
 | 
			
		||||
        #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue )    ( void ) ( uxSavedStatusValue )
 | 
			
		||||
    #endif
 | 
			
		||||
#else
 | 
			
		||||
    #if ( portHAS_NESTED_INTERRUPTS == 0 )
 | 
			
		||||
        #error portCLEAR_INTERRUPT_MASK_FROM_ISR must not be defined for ports that do not support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 0)
 | 
			
		||||
    #endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef portCLEAN_UP_TCB
 | 
			
		||||
 | 
			
		||||
@ -33,6 +33,14 @@
 | 
			
		||||
 * This file implements atomic functions by disabling interrupts globally.
 | 
			
		||||
 * Implementations with architecture specific atomic instructions can be
 | 
			
		||||
 * provided under each compiler directory.
 | 
			
		||||
 *
 | 
			
		||||
 * The atomic interface can be used in FreeRTOS tasks on all FreeRTOS ports. It
 | 
			
		||||
 * can also be used in Interrupt Service Routines (ISRs) on FreeRTOS ports that
 | 
			
		||||
 * support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 1). The
 | 
			
		||||
 * atomic interface must not be used in ISRs on FreeRTOS ports that do not
 | 
			
		||||
 * support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 0)
 | 
			
		||||
 * because ISRs on these ports cannot be interrupted and therefore, do not need
 | 
			
		||||
 * atomics in ISRs.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ATOMIC_H
 | 
			
		||||
@ -59,7 +67,7 @@
 | 
			
		||||
 * ATOMIC_ENTER_CRITICAL().
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#if defined( portSET_INTERRUPT_MASK_FROM_ISR )
 | 
			
		||||
#if ( portHAS_NESTED_INTERRUPTS == 1 )
 | 
			
		||||
 | 
			
		||||
/* Nested interrupt scheme is supported in this port. */
 | 
			
		||||
    #define ATOMIC_ENTER_CRITICAL() \
 | 
			
		||||
 | 
			
		||||
@ -111,9 +111,6 @@ extern void vTaskSwitchContext( void );
 | 
			
		||||
/* Critical section management. */
 | 
			
		||||
#define portCRITICAL_NESTING_IN_TCB    0
 | 
			
		||||
 | 
			
		||||
#define portSET_INTERRUPT_MASK_FROM_ISR()                          0
 | 
			
		||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue )    ( void ) uxSavedStatusValue
 | 
			
		||||
 | 
			
		||||
#define portDISABLE_INTERRUPTS()                                   __asm volatile ( "csrc mstatus, 8" )
 | 
			
		||||
#define portENABLE_INTERRUPTS()                                    __asm volatile ( "csrs mstatus, 8" )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -113,9 +113,6 @@ extern void vTaskSwitchContext( void );
 | 
			
		||||
/* Critical section management. */
 | 
			
		||||
#define portCRITICAL_NESTING_IN_TCB    0
 | 
			
		||||
 | 
			
		||||
#define portSET_INTERRUPT_MASK_FROM_ISR()                          0
 | 
			
		||||
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue )    ( void ) uxSavedStatusValue
 | 
			
		||||
 | 
			
		||||
#define portDISABLE_INTERRUPTS()                                   __disable_interrupt()
 | 
			
		||||
#define portENABLE_INTERRUPTS()                                    __enable_interrupt()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -139,9 +139,6 @@
 | 
			
		||||
        #define portSET_INTERRUPT_MASK()                  rtos_interrupt_mask_all()
 | 
			
		||||
        #define portCLEAR_INTERRUPT_MASK( ulState )       rtos_interrupt_mask_set( ulState )
 | 
			
		||||
 | 
			
		||||
        #define portSET_INTERRUPT_MASK_FROM_ISR()         ( 0 )
 | 
			
		||||
        #define portCLEAR_INTERRUPT_MASK_FROM_ISR( x )    ( ( void ) x )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Will enable interrupts if ulState is non-zero.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user