]> git.sur5r.net Git - freertos/commitdiff
Add xPortIsInsideInterrupt() to the IAR ARMv7-M ports.
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 3 Jan 2020 01:17:29 +0000 (01:17 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Fri, 3 Jan 2020 01:17:29 +0000 (01:17 +0000)
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2794 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS/Source/portable/IAR/ARM_CM3/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM4F/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM4F_MPU/portmacro.h
FreeRTOS/Source/portable/IAR/ARM_CM7/r0p1/portmacro.h
FreeRTOS/Source/portable/IAR/RISC-V/port.c

index e50808940e797903653785283e8845b0fc0f60e0..23510e17c65044950092194fffd311fccc7c6e0d 100644 (file)
@@ -164,6 +164,34 @@ not necessary for to use this port.  They are defined so the common demo files
 /* portNOP() is not required by this port. */\r
 #define portNOP()\r
 \r
+#define portINLINE     __inline\r
+\r
+#ifndef portFORCE_INLINE\r
+       #define portFORCE_INLINE inline __attribute__(( always_inline))\r
+#endif\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void )\r
+{\r
+uint32_t ulCurrentInterrupt;\r
+BaseType_t xReturn;\r
+\r
+       /* Obtain the number of the currently executing interrupt. */\r
+       __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );\r
+\r
+       if( ulCurrentInterrupt == 0 )\r
+       {\r
+               xReturn = pdFALSE;\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdTRUE;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Suppress warnings that are generated by the IAR tools, but cannot be fixed in\r
index 445a2dd04bf22d7cb5d8b7d128cc36aa116a5066..1d442a8f7b3e990f299df97871fb304950f17b18 100644 (file)
@@ -77,6 +77,12 @@ typedef unsigned long UBaseType_t;
 #define portBYTE_ALIGNMENT                     8\r
 /*-----------------------------------------------------------*/\r
 \r
+/* Compiler directives. */\r
+#define portWEAK_SYMBOL                                __attribute__( ( weak ) )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
 /* Scheduler utilities. */\r
 #define portYIELD()                                                                                    \\r
 {                                                                                                                      \\r
@@ -157,6 +163,34 @@ not necessary for to use this port.  They are defined so the common demo files
 /* portNOP() is not required by this port. */\r
 #define portNOP()\r
 \r
+#define portINLINE     __inline\r
+\r
+#ifndef portFORCE_INLINE\r
+       #define portFORCE_INLINE inline __attribute__(( always_inline))\r
+#endif\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void )\r
+{\r
+uint32_t ulCurrentInterrupt;\r
+BaseType_t xReturn;\r
+\r
+       /* Obtain the number of the currently executing interrupt. */\r
+       __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );\r
+\r
+       if( ulCurrentInterrupt == 0 )\r
+       {\r
+               xReturn = pdFALSE;\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdTRUE;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Suppress warnings that are generated by the IAR tools, but cannot be fixed in\r
index f26f45f9b41a8d081b846ba73b7e1fe74085a715..51de83ba043587daf194ba16f50af8eb18a3199b 100644 (file)
@@ -191,6 +191,36 @@ not necessary for to use this port.  They are defined so the common demo files
 \r
 /* portNOP() is not required by this port. */\r
 #define portNOP()\r
+\r
+#define portINLINE     __inline\r
+\r
+#ifndef portFORCE_INLINE\r
+       #define portFORCE_INLINE inline __attribute__(( always_inline))\r
+#endif\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void )\r
+{\r
+uint32_t ulCurrentInterrupt;\r
+BaseType_t xReturn;\r
+\r
+       /* Obtain the number of the currently executing interrupt. */\r
+       __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );\r
+\r
+       if( ulCurrentInterrupt == 0 )\r
+       {\r
+               xReturn = pdFALSE;\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdTRUE;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 extern BaseType_t xIsPrivileged( void );\r
index cce737e3c1ffef494266db4c42e364d8ab5fd5c1..d98d67a2a378b3d99767794c2ad9985a2e625f71 100644 (file)
@@ -77,6 +77,12 @@ typedef unsigned long UBaseType_t;
 #define portBYTE_ALIGNMENT                     8\r
 /*-----------------------------------------------------------*/\r
 \r
+/* Compiler directives. */\r
+#define portWEAK_SYMBOL                                __attribute__( ( weak ) )\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
 /* Scheduler utilities. */\r
 #define portYIELD()                                                                                    \\r
 {                                                                                                                      \\r
@@ -160,6 +166,34 @@ not necessary for to use this port.  They are defined so the common demo files
 /* portNOP() is not required by this port. */\r
 #define portNOP()\r
 \r
+#define portINLINE     __inline\r
+\r
+#ifndef portFORCE_INLINE\r
+       #define portFORCE_INLINE inline __attribute__(( always_inline))\r
+#endif\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+portFORCE_INLINE static BaseType_t xPortIsInsideInterrupt( void )\r
+{\r
+uint32_t ulCurrentInterrupt;\r
+BaseType_t xReturn;\r
+\r
+       /* Obtain the number of the currently executing interrupt. */\r
+       __asm volatile( "mrs %0, ipsr" : "=r"( ulCurrentInterrupt ) :: "memory" );\r
+\r
+       if( ulCurrentInterrupt == 0 )\r
+       {\r
+               xReturn = pdFALSE;\r
+       }\r
+       else\r
+       {\r
+               xReturn = pdTRUE;\r
+       }\r
+\r
+       return xReturn;\r
+}\r
+\r
 /*-----------------------------------------------------------*/\r
 \r
 /* Suppress warnings that are generated by the IAR tools, but cannot be fixed in\r
index a5ec465538b65faa0ce4da61a14cff055d9398c4..068eb7c6238cc3bbd1dda33f3fe6b34d0c21527e 100644 (file)
@@ -82,8 +82,8 @@ void vPortSetupTimerInterrupt( void ) __attribute__(( weak ));
 /* Used to program the machine timer compare register. */\r
 uint64_t ullNextTime = 0ULL;\r
 const uint64_t *pullNextTime = &ullNextTime;\r
-const size_t uxTimerIncrementsForOneTick = ( size_t ) ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ); /* Assumes increment won't go over 32-bits. */\r
-volatile uint64_t * const pullMachineTimerCompareRegisterBase = ( uint64_t * ) ( configCLINT_BASE_ADDRESS + 0x4000 );\r
+const size_t uxTimerIncrementsForOneTick = ( size_t ) ( ( configCPU_CLOCK_HZ ) / ( configTICK_RATE_HZ ) ); /* Assumes increment won't go over 32-bits. */\r
+volatile uint64_t * const pullMachineTimerCompareRegisterBase = ( uint64_t * ) ( ( configCLINT_BASE_ADDRESS ) + 0x4000 );\r
 volatile uint64_t * pullMachineTimerCompareRegister = 0;\r
 /* Set configCHECK_FOR_STACK_OVERFLOW to 3 to add ISR stack checking to task\r
 stack checking.  A problem in the ISR stack will trigger an assert, not call the\r