]> git.sur5r.net Git - freertos/commitdiff
Update yield code in RX600/Renesas compiler port.
authorrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 17 Apr 2013 08:35:20 +0000 (08:35 +0000)
committerrichardbarry <richardbarry@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 17 Apr 2013 08:35:20 +0000 (08:35 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@1867 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/Renesas/RX600/portmacro.h

index a091660bc94e5345f21df72f286f96e1a152d0bc..20cd7986b898b9fcd8e5eed6c2cca558d9d9ac39 100644 (file)
@@ -118,10 +118,22 @@ portSTACK_TYPE and portBASE_TYPE. */
 #define portTICK_RATE_MS                               ( ( portTickType ) 1000 / configTICK_RATE_HZ )          \r
 #define portNOP()                                              nop()\r
 \r
-/* The location of the software interrupt register.  Software interrupts use\r
-vector 27. */\r
-#define portITU_SWINTR                 ( ( unsigned char * ) 0x000872E0 )\r
-#define portYIELD()                            *portITU_SWINTR = 0x01; nop(); nop(); nop(); nop(); nop()\r
+#pragma inline_asm vPortYield\r
+static void vPortYield( void )\r
+{\r
+       /* Save clobbered register - may not actually be necessary if inline asm\r
+       functions are considered to use the same rules as function calls by the\r
+       compiler. */\r
+       PUSH.L R5\r
+       /* Set ITU SWINTR. */\r
+       MOV.L #553696, R5\r
+       MOV.B #1, [R5]\r
+       /* Read back to ensure the value is taken before proceeding. */\r
+       MOV.L [R5], R5\r
+       /* Restore clobbered register to its previous value. */\r
+       POP R5\r
+}\r
+#define portYIELD()    vPortYield()\r
 #define portYIELD_FROM_ISR( x )        if( x != pdFALSE ) portYIELD()\r
 \r
 /*\r
@@ -137,12 +149,12 @@ vector 27. */
 /* The critical nesting functions defined within tasks.c. */\r
 extern void vTaskEnterCritical( void );\r
 extern void vTaskExitCritical( void );\r
-#define portENTER_CRITICAL()   vTaskEnterCritical();\r
-#define portEXIT_CRITICAL()            vTaskExitCritical();\r
+#define portENTER_CRITICAL()   vTaskEnterCritical()\r
+#define portEXIT_CRITICAL()            vTaskExitCritical()\r
 \r
 /* As this port allows interrupt nesting... */\r
-#define portSET_INTERRUPT_MASK_FROM_ISR() get_ipl(); set_ipl( configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
-#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) set_ipl( uxSavedInterruptStatus )\r
+#define portSET_INTERRUPT_MASK_FROM_ISR() get_ipl(); set_ipl( ( long ) configMAX_SYSCALL_INTERRUPT_PRIORITY )\r
+#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ) set_ipl( ( long ) uxSavedInterruptStatus )\r
 \r
 /*-----------------------------------------------------------*/\r
 \r