]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/portable/MSVC-MingW/portmacro.h
Update version number in preparation for maintenance release.
[freertos] / FreeRTOS / Source / portable / MSVC-MingW / portmacro.h
index f413010d62b572144d57091c0e65238fe7dddfed..3b3bd0101486c0b2d8b9cfbd9ab0afe4db1db777 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-    FreeRTOS V8.2.0rc1 - Copyright (C) 2014 Real Time Engineers Ltd.\r
+    FreeRTOS V9.0.1 - Copyright (C) 2017 Real Time Engineers Ltd.\r
     All rights reserved\r
 \r
     VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r
@@ -8,29 +8,20 @@
 \r
     FreeRTOS is free software; you can redistribute it and/or modify it under\r
     the terms of the GNU General Public License (version 2) as published by the\r
-    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r
+    Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.\r
 \r
+    ***************************************************************************\r
     >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r
     >>!   distribute a combined work that includes FreeRTOS without being   !<<\r
     >>!   obliged to provide the source code for proprietary components     !<<\r
     >>!   outside of the FreeRTOS kernel.                                   !<<\r
+    ***************************************************************************\r
 \r
     FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r
     WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r
     FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r
     link: http://www.freertos.org/a00114.html\r
 \r
-    1 tab == 4 spaces!\r
-\r
-    ***************************************************************************\r
-     *                                                                       *\r
-     *    Having a problem?  Start by reading the FAQ "My application does   *\r
-     *    not run, what could be wrong?".  Have you defined configASSERT()?  *\r
-     *                                                                       *\r
-     *    http://www.FreeRTOS.org/FAQHelp.html                               *\r
-     *                                                                       *\r
-    ***************************************************************************\r
-\r
     ***************************************************************************\r
      *                                                                       *\r
      *    FreeRTOS provides completely free yet professionally developed,    *\r
      *                                                                       *\r
     ***************************************************************************\r
 \r
-    ***************************************************************************\r
-     *                                                                       *\r
-     *   Investing in training allows your team to be as productive as       *\r
-     *   possible as early as possible, lowering your overall development    *\r
-     *   cost, and enabling you to bring a more robust product to market     *\r
-     *   earlier than would otherwise be possible.  Richard Barry is both    *\r
-     *   the architect and key author of FreeRTOS, and so also the world's   *\r
-     *   leading authority on what is the world's most popular real time     *\r
-     *   kernel for deeply embedded MCU designs.  Obtaining your training    *\r
-     *   from Richard ensures your team will gain directly from his in-depth *\r
-     *   product knowledge and years of usage experience.  Contact Real Time *\r
-     *   Engineers Ltd to enquire about the FreeRTOS Masterclass, presented  *\r
-     *   by Richard Barry:  http://www.FreeRTOS.org/contact\r
-     *                                                                       *\r
-    ***************************************************************************\r
+    http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r
+    the FAQ page "My application does not run, what could be wrong?".  Have you\r
+    defined configASSERT()?\r
 \r
-    ***************************************************************************\r
-     *                                                                       *\r
-     *    You are receiving this top quality software for free.  Please play *\r
-     *    fair and reciprocate by reporting any suspected issues and         *\r
-     *    participating in the community forum:                              *\r
-     *    http://www.FreeRTOS.org/support                                    *\r
-     *                                                                       *\r
-     *    Thank you!                                                         *\r
-     *                                                                       *\r
-    ***************************************************************************\r
+    http://www.FreeRTOS.org/support - In return for receiving this top quality\r
+    embedded software for free we request you assist our global community by\r
+    participating in the support forum.\r
 \r
-    http://www.FreeRTOS.org - Documentation, books, training, latest versions,\r
-    license and Real Time Engineers Ltd. contact details.\r
+    http://www.FreeRTOS.org/training - Investing in training allows your team to\r
+    be as productive as possible as early as possible.  Now you can receive\r
+    FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r
+    Ltd, and the world's leading authority on the world's leading RTOS.\r
 \r
     http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r
     including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r
@@ -82,7 +56,7 @@
     http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r
     Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r
 \r
-    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High\r
+    http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r
     Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r
     licenses offer ticketed support, indemnification and commercial middleware.\r
 \r
@@ -97,6 +71,7 @@
 #define PORTMACRO_H\r
 \r
 #include <Windows.h>\r
+#include <WinBase.h>\r
 \r
 /******************************************************************************\r
        Defines\r
 #define portDOUBLE             double\r
 #define portLONG               long\r
 #define portSHORT              short\r
-#define portSTACK_TYPE uint32_t\r
+#define portSTACK_TYPE size_t\r
 #define portBASE_TYPE  long\r
+#define portPOINTER_SIZE_TYPE size_t\r
 \r
 typedef portSTACK_TYPE StackType_t;\r
 typedef long BaseType_t;\r
@@ -122,18 +98,29 @@ typedef unsigned long UBaseType_t;
     typedef uint32_t TickType_t;\r
     #define portMAX_DELAY ( TickType_t ) 0xffffffffUL\r
 \r
-       /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r
-       not need to be guarded with a critical section. */\r
+       /* 32/64-bit tick type on a 32/64-bit architecture, so reads of the tick\r
+       count do not need to be guarded with a critical section. */\r
        #define portTICK_TYPE_IS_ATOMIC 1\r
 #endif\r
 \r
 /* Hardware specifics. */\r
 #define portSTACK_GROWTH                       ( -1 )\r
 #define portTICK_PERIOD_MS                     ( ( TickType_t ) 1000 / configTICK_RATE_HZ )\r
-#define portBYTE_ALIGNMENT                     4\r
+#define portINLINE __inline\r
+\r
+#if defined( __x86_64__) || defined( _M_X64 )\r
+       #define portBYTE_ALIGNMENT              8\r
+#else\r
+       #define portBYTE_ALIGNMENT              4\r
+#endif\r
 \r
 #define portYIELD()                                    vPortGenerateSimulatedInterrupt( portINTERRUPT_YIELD )\r
 \r
+/* Simulated interrupts return pdFALSE if no context switch should be performed,\r
+or a non-zero number if a context switch should be performed. */\r
+#define portYIELD_FROM_ISR( x ) return x\r
+#define portEND_SWITCHING_ISR( x ) portYIELD_FROM_ISR( ( x ) )\r
+\r
 void vPortCloseRunningThread( void *pvTaskToDelete, volatile BaseType_t *pxPendYield );\r
 void vPortDeleteThread( void *pvThreadToDelete );\r
 #define portCLEAN_UP_TCB( pxTCB )      vPortDeleteThread( pxTCB )\r
@@ -167,11 +154,9 @@ void vPortExitCritical( void );
        /*-----------------------------------------------------------*/\r
 \r
        #ifdef __GNUC__\r
-               #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities )      \\r
-                       __asm volatile( "mov %0, %%eax                                                                  \n\t" \\r
-                                                       "bsr %%eax, %%eax                                                               \n\t" \\r
-                                                       "mov %%eax, %1                                                                  \n\t" \\r
-                                                       :"=r"(uxTopPriority) : "r"(uxReadyPriorities) : "eax" )\r
+               #define portGET_HIGHEST_PRIORITY( uxTopPriority, uxReadyPriorities )    \\r
+                       __asm volatile( "bsr %1, %0\n\t"                                                                        \\r
+                                                       :"=r"(uxTopPriority) : "rm"(uxReadyPriorities) : "cc" )\r
        #else\r
                /* BitScanReverse returns the bit position of the most significant '1'\r
                in the word. */\r
@@ -189,7 +174,6 @@ void vPortExitCritical( void );
 #define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void * pvParameters )\r
 #define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void * pvParameters )\r
 \r
-\r
 #define portINTERRUPT_YIELD                            ( 0UL )\r
 #define portINTERRUPT_TICK                             ( 1UL )\r
 \r
@@ -212,3 +196,4 @@ void vPortGenerateSimulatedInterrupt( uint32_t ulInterruptNumber );
 void vPortSetInterruptHandler( uint32_t ulInterruptNumber, uint32_t (*pvHandler)( void ) );\r
 \r
 #endif\r
+\r