text: /*
      FreeRTOS V8.0.0 - Copyright (C) 2014 Real Time Engineers Ltd.
      All rights reserved
  
      VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
  
      ***************************************************************************
       *                                                                       *
       *    FreeRTOS provides completely free yet professionally developed,    *
       *    robust, strictly quality controlled, supported, and cross          *
       *    platform software that has become a de facto standard.             *
       *                                                                       *
       *    Help yourself get started quickly and support the FreeRTOS         *
       *    project by purchasing a FreeRTOS tutorial book, reference          *
       *    manual, or both from: http://www.FreeRTOS.org/Documentation        *
       *                                                                       *
       *    Thank you!                                                         *
       *                                                                       *
      ***************************************************************************
  
      This file is part of the FreeRTOS distribution.
  
      FreeRTOS is free software; you can redistribute it and/or modify it under
      the terms of the GNU General Public License (version 2) as published by the
      Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
  
      >>! NOTE: The modification to the GPL is included to allow you to distribute
      >>! a combined work that includes FreeRTOS without being obliged to provide
      >>! the source code for proprietary components outside of the FreeRTOS
      >>! kernel.
  
      FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
      WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      FOR A PARTICULAR PURPOSE.  Full license text is available from the following
      link: http://www.freertos.org/a00114.html
  
      1 tab == 4 spaces!
  
      ***************************************************************************
       *                                                                       *
       *    Having a problem?  Start by reading the FAQ "My application does   *
       *    not run, what could be wrong?"                                     *
       *                                                                       *
       *    http://www.FreeRTOS.org/FAQHelp.html                               *
       *                                                                       *
      ***************************************************************************
  
      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, a DOS
      compatible FAT file system, and our tiny thread aware UDP/IP stack.
  
      http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
      Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS
      licenses offer ticketed support, indemnification and middleware.
  
      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.
  
      1 tab == 4 spaces!
  */
  
  
  #ifndef PORTMACRO_H
  #define PORTMACRO_H
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /*-----------------------------------------------------------
   * Port specific definitions.
   *
   * The settings in this file configure FreeRTOS correctly for the
   * given hardware and compiler.
   *
   * These settings should not be altered.
   *-----------------------------------------------------------
   */
  
  /* Type definitions. */
  #define portCHAR		char
  #define portFLOAT		float
  #define portDOUBLE		double
  #define portLONG		long
  #define portSHORT		short
  #define portSTACK_TYPE	uint32_t
  #define portBASE_TYPE	long
  
  typedef portSTACK_TYPE StackType_t;
  typedef long BaseType_t;
  typedef unsigned long UBaseType_t;
  
  
  #if( configUSE_16_BIT_TICKS == 1 )
  	typedef uint16_t TickType_t;
  	#define portMAX_DELAY ( TickType_t ) 0xffff
  #else
  	typedef uint32_t TickType_t;
  	#define portMAX_DELAY ( TickType_t ) 0xffffffffUL
  #endif
  /*-----------------------------------------------------------*/
  
  /* Hardware specifics. */
  #define portSTACK_GROWTH			( -1 )
  #define portTICK_PERIOD_MS			( ( TickType_t ) 1000 / configTICK_RATE_HZ )
  #define portBYTE_ALIGNMENT			8
  /*-----------------------------------------------------------*/
  
  /* Task utilities. */
  
  /*-----------------------------------------------------------
   * ISR entry and exit macros.  These are only required if a task switch
   * is required from an ISR.
   *----------------------------------------------------------*/
  
  /* If a switch is required then we just need to call */
  /* vTaskSwitchContext() as the context has already been */
  /* saved. */
  
  #define portEND_SWITCHING_ISR(SwitchRequired)				 \
  {															 \
  extern void vTaskSwitchContext(void);						 \
  															 \
  		if(SwitchRequired)									 \
  		{													 \
  			vTaskSwitchContext();							 \
  		}													 \
  }															 \
  
  extern void vPortYield( void );
  #define portYIELD() vPortYield()
  
  
  /* Critical section management. */
  
  /*
   ******************************************************************
   * We don't need to worry about whether we're in ARM or
   * THUMB mode with the Keil Real View compiler when enabling
   * or disabling interrupts as the compiler's intrinsic functions
   * take care of that for us.
   *******************************************************************
   */
  #define portDISABLE_INTERRUPTS()	__disable_irq()
  #define portENABLE_INTERRUPTS()		__enable_irq()
  
  
  /*-----------------------------------------------------------
   * Critical section control
   *
   * The code generated by the Keil compiler does not maintain separate
   * stack and frame pointers. The portENTER_CRITICAL macro cannot therefore
   * use the stack as per other ports.  Instead a variable is used to keep
   * track of the critical section nesting.  This necessitates the use of a
   * function in place of the macro.
   *----------------------------------------------------------*/
  
  extern void vPortEnterCritical( void );
  extern void vPortExitCritical( void );
  
  #define portENTER_CRITICAL()		vPortEnterCritical();
  #define portEXIT_CRITICAL()			vPortExitCritical();
  /*-----------------------------------------------------------*/
  
  /* Compiler specifics. */
  #define inline
  #define register
  #define portNOP()	__asm{ NOP }
  /*-----------------------------------------------------------*/
  
  /* Task function macros as described on the FreeRTOS.org WEB site. */
  #define portTASK_FUNCTION_PROTO( vFunction, pvParameters )	void vFunction( void *pvParameters )
  #define portTASK_FUNCTION( vFunction, pvParameters )	void vFunction( void *pvParameters )
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* PORTMACRO_H */
  
  