mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-03 18:22:45 -05:00 
			
		
		
		
	Update yield code in RX600/IAR compiler port.
This commit is contained in:
		
							parent
							
								
									4f5f527c73
								
							
						
					
					
						commit
						0013028c7a
					
				
					 1 changed files with 21 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -114,13 +114,23 @@ portSTACK_TYPE and portBASE_TYPE. */
 | 
			
		|||
/* Hardware specifics. */
 | 
			
		||||
#define portBYTE_ALIGNMENT			8	/* Could make four, according to manual. */
 | 
			
		||||
#define portSTACK_GROWTH			-1
 | 
			
		||||
#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )		
 | 
			
		||||
#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )
 | 
			
		||||
#define portNOP()					__no_operation()
 | 
			
		||||
 | 
			
		||||
/* The location of the software interrupt register.  Software interrupts use
 | 
			
		||||
vector 27. */
 | 
			
		||||
#define portITU_SWINTR			( ( unsigned char * ) 0x000872E0 )
 | 
			
		||||
#define portYIELD()				*portITU_SWINTR = ( unsigned char ) 0x01; portNOP(); portNOP(); portNOP(); portNOP(); portNOP()
 | 
			
		||||
/* Yield equivalent to "*portITU_SWINTR = 0x01; ( void ) *portITU_SWINTR;"
 | 
			
		||||
where portITU_SWINTR is the location of the software interrupt register
 | 
			
		||||
(0x000872E0).  Don't rely on the assembler to select a register, so instead
 | 
			
		||||
save and restore clobbered registers manually. */
 | 
			
		||||
#define portYIELD()							\
 | 
			
		||||
	__asm volatile 							\
 | 
			
		||||
	(										\
 | 
			
		||||
		"PUSH.L	R10					\n"		\
 | 
			
		||||
		"MOV.L	#0x872E0, R10		\n"		\
 | 
			
		||||
		"MOV.B	#0x1, [R10]			\n"		\
 | 
			
		||||
		"MOV.L	[R10], R10			\n"		\
 | 
			
		||||
		"POP	R10					\n"		\
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
#define portYIELD_FROM_ISR( x )	if( ( x ) != pdFALSE ) portYIELD()
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue