forked from epagris/FreeRTOS-Kernel
		
	Style: Uncrustify kernel file - remove tab == 4 spaces (#123)
* Style: uncrystify kernel files and remove tabs * Style: uncrystify kernel files and remove tabs Co-authored-by: Alfred Gedeon <gedeonag@amazon.com>
This commit is contained in:
		
							parent
							
								
									386d854e0b
								
							
						
					
					
						commit
						9a1ebfec31
					
				
							
								
								
									
										1620
									
								
								include/FreeRTOS.h
									
									
									
									
									
								
							
							
						
						
									
										1620
									
								
								include/FreeRTOS.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										326
									
								
								include/atomic.h
									
									
									
									
									
								
							
							
						
						
									
										326
									
								
								include/atomic.h
									
									
									
									
									
								
							@ -34,18 +34,20 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef ATOMIC_H
 | 
			
		||||
    #define ATOMIC_H
 | 
			
		||||
#define ATOMIC_H
 | 
			
		||||
 | 
			
		||||
    #ifndef INC_FREERTOS_H
 | 
			
		||||
        #error "include FreeRTOS.h must appear in source files before include atomic.h"
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef INC_FREERTOS_H
 | 
			
		||||
    #error "include FreeRTOS.h must appear in source files before include atomic.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Standard includes. */
 | 
			
		||||
    #include <stdint.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        extern "C" {
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Port specific definitions -- entering/exiting critical section.
 | 
			
		||||
@ -55,22 +57,22 @@
 | 
			
		||||
 * ATOMIC_ENTER_CRITICAL().
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
    #if defined( portSET_INTERRUPT_MASK_FROM_ISR )
 | 
			
		||||
#if defined( portSET_INTERRUPT_MASK_FROM_ISR )
 | 
			
		||||
 | 
			
		||||
/* Nested interrupt scheme is supported in this port. */
 | 
			
		||||
        #define ATOMIC_ENTER_CRITICAL() \
 | 
			
		||||
    #define ATOMIC_ENTER_CRITICAL() \
 | 
			
		||||
    UBaseType_t uxCriticalSectionType = portSET_INTERRUPT_MASK_FROM_ISR()
 | 
			
		||||
 | 
			
		||||
        #define ATOMIC_EXIT_CRITICAL() \
 | 
			
		||||
    #define ATOMIC_EXIT_CRITICAL() \
 | 
			
		||||
    portCLEAR_INTERRUPT_MASK_FROM_ISR( uxCriticalSectionType )
 | 
			
		||||
 | 
			
		||||
    #else
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
/* Nested interrupt scheme is NOT supported in this port. */
 | 
			
		||||
        #define ATOMIC_ENTER_CRITICAL()    portENTER_CRITICAL()
 | 
			
		||||
        #define ATOMIC_EXIT_CRITICAL()     portEXIT_CRITICAL()
 | 
			
		||||
    #define ATOMIC_ENTER_CRITICAL()    portENTER_CRITICAL()
 | 
			
		||||
    #define ATOMIC_EXIT_CRITICAL()     portEXIT_CRITICAL()
 | 
			
		||||
 | 
			
		||||
    #endif /* portSET_INTERRUPT_MASK_FROM_ISR() */
 | 
			
		||||
#endif /* portSET_INTERRUPT_MASK_FROM_ISR() */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Port specific definition -- "always inline".
 | 
			
		||||
@ -79,12 +81,12 @@
 | 
			
		||||
 * for atomic.  Thus, if portFORCE_INLINE is not provided by portmacro.h,
 | 
			
		||||
 * instead of resulting error, simply define it away.
 | 
			
		||||
 */
 | 
			
		||||
    #ifndef portFORCE_INLINE
 | 
			
		||||
        #define portFORCE_INLINE
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef portFORCE_INLINE
 | 
			
		||||
    #define portFORCE_INLINE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #define ATOMIC_COMPARE_AND_SWAP_SUCCESS    0x1U /**< Compare and swap succeeded, swapped. */
 | 
			
		||||
    #define ATOMIC_COMPARE_AND_SWAP_FAILURE    0x0U /**< Compare and swap failed, did not swap. */
 | 
			
		||||
#define ATOMIC_COMPARE_AND_SWAP_SUCCESS    0x1U     /**< Compare and swap succeeded, swapped. */
 | 
			
		||||
#define ATOMIC_COMPARE_AND_SWAP_FAILURE    0x0U     /**< Compare and swap failed, did not swap. */
 | 
			
		||||
 | 
			
		||||
/*----------------------------- Swap && CAS ------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -103,28 +105,28 @@
 | 
			
		||||
 * @note This function only swaps *pulDestination with ulExchange, if previous
 | 
			
		||||
 *       *pulDestination value equals ulComparand.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                                uint32_t ulExchange,
 | 
			
		||||
                                                                uint32_t ulComparand )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                            uint32_t ulExchange,
 | 
			
		||||
                                                            uint32_t ulComparand )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulReturnValue;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulReturnValue;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        if( *pulDestination == ulComparand )
 | 
			
		||||
        {
 | 
			
		||||
            if( *pulDestination == ulComparand )
 | 
			
		||||
            {
 | 
			
		||||
                *pulDestination = ulExchange;
 | 
			
		||||
                ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
 | 
			
		||||
            }
 | 
			
		||||
            *pulDestination = ulExchange;
 | 
			
		||||
            ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulReturnValue;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulReturnValue;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -139,20 +141,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return The initial value of *ppvDestination.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE void * Atomic_SwapPointers_p32( void * volatile * ppvDestination,
 | 
			
		||||
                                                            void * pvExchange )
 | 
			
		||||
static portFORCE_INLINE void * Atomic_SwapPointers_p32( void * volatile * ppvDestination,
 | 
			
		||||
                                                        void * pvExchange )
 | 
			
		||||
{
 | 
			
		||||
    void * pReturnValue;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        void * pReturnValue;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            pReturnValue = *ppvDestination;
 | 
			
		||||
            *ppvDestination = pvExchange;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return pReturnValue;
 | 
			
		||||
        pReturnValue = *ppvDestination;
 | 
			
		||||
        *ppvDestination = pvExchange;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return pReturnValue;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -171,24 +173,24 @@
 | 
			
		||||
 * @note This function only swaps *ppvDestination with pvExchange, if previous
 | 
			
		||||
 *       *ppvDestination value equals pvComparand.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32( void * volatile * ppvDestination,
 | 
			
		||||
                                                                        void * pvExchange,
 | 
			
		||||
                                                                        void * pvComparand )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32( void * volatile * ppvDestination,
 | 
			
		||||
                                                                    void * pvExchange,
 | 
			
		||||
                                                                    void * pvComparand )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        if( *ppvDestination == pvComparand )
 | 
			
		||||
        {
 | 
			
		||||
            if( *ppvDestination == pvComparand )
 | 
			
		||||
            {
 | 
			
		||||
                *ppvDestination = pvExchange;
 | 
			
		||||
                ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
 | 
			
		||||
            }
 | 
			
		||||
            *ppvDestination = pvExchange;
 | 
			
		||||
            ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulReturnValue;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulReturnValue;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*----------------------------- Arithmetic ------------------------------*/
 | 
			
		||||
@ -204,20 +206,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return previous *pulAddend value.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_Add_u32( uint32_t volatile * pulAddend,
 | 
			
		||||
                                                     uint32_t ulCount )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_Add_u32( uint32_t volatile * pulAddend,
 | 
			
		||||
                                                 uint32_t ulCount )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulAddend;
 | 
			
		||||
            *pulAddend += ulCount;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulAddend;
 | 
			
		||||
        *pulAddend += ulCount;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -232,20 +234,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return previous *pulAddend value.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_Subtract_u32( uint32_t volatile * pulAddend,
 | 
			
		||||
                                                          uint32_t ulCount )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_Subtract_u32( uint32_t volatile * pulAddend,
 | 
			
		||||
                                                      uint32_t ulCount )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulAddend;
 | 
			
		||||
            *pulAddend -= ulCount;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulAddend;
 | 
			
		||||
        *pulAddend -= ulCount;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -258,19 +260,19 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return *pulAddend value before increment.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_Increment_u32( uint32_t volatile * pulAddend )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_Increment_u32( uint32_t volatile * pulAddend )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulAddend;
 | 
			
		||||
            *pulAddend += 1;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulAddend;
 | 
			
		||||
        *pulAddend += 1;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -283,19 +285,19 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return *pulAddend value before decrement.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_Decrement_u32( uint32_t volatile * pulAddend )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_Decrement_u32( uint32_t volatile * pulAddend )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulAddend;
 | 
			
		||||
            *pulAddend -= 1;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulAddend;
 | 
			
		||||
        *pulAddend -= 1;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*----------------------------- Bitwise Logical ------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -310,20 +312,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return The original value of *pulDestination.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_OR_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                    uint32_t ulValue )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_OR_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                uint32_t ulValue )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulDestination;
 | 
			
		||||
            *pulDestination |= ulValue;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulDestination;
 | 
			
		||||
        *pulDestination |= ulValue;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -337,20 +339,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return The original value of *pulDestination.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_AND_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                     uint32_t ulValue )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_AND_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                 uint32_t ulValue )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulDestination;
 | 
			
		||||
            *pulDestination &= ulValue;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulDestination;
 | 
			
		||||
        *pulDestination &= ulValue;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -364,20 +366,20 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return The original value of *pulDestination.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_NAND_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                      uint32_t ulValue )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_NAND_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                  uint32_t ulValue )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulDestination;
 | 
			
		||||
            *pulDestination = ~( ulCurrent & ulValue );
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulDestination;
 | 
			
		||||
        *pulDestination = ~( ulCurrent & ulValue );
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -391,23 +393,25 @@
 | 
			
		||||
 *
 | 
			
		||||
 * @return The original value of *pulDestination.
 | 
			
		||||
 */
 | 
			
		||||
    static portFORCE_INLINE uint32_t Atomic_XOR_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                     uint32_t ulValue )
 | 
			
		||||
static portFORCE_INLINE uint32_t Atomic_XOR_u32( uint32_t volatile * pulDestination,
 | 
			
		||||
                                                 uint32_t ulValue )
 | 
			
		||||
{
 | 
			
		||||
    uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
    ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t ulCurrent;
 | 
			
		||||
 | 
			
		||||
        ATOMIC_ENTER_CRITICAL();
 | 
			
		||||
        {
 | 
			
		||||
            ulCurrent = *pulDestination;
 | 
			
		||||
            *pulDestination ^= ulValue;
 | 
			
		||||
        }
 | 
			
		||||
        ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
        return ulCurrent;
 | 
			
		||||
        ulCurrent = *pulDestination;
 | 
			
		||||
        *pulDestination ^= ulValue;
 | 
			
		||||
    }
 | 
			
		||||
    ATOMIC_EXIT_CRITICAL();
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        }
 | 
			
		||||
    #endif
 | 
			
		||||
    return ulCurrent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
#endif /* ATOMIC_H */
 | 
			
		||||
 | 
			
		||||
@ -25,36 +25,38 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef CO_ROUTINE_H
 | 
			
		||||
    #define CO_ROUTINE_H
 | 
			
		||||
#define CO_ROUTINE_H
 | 
			
		||||
 | 
			
		||||
    #ifndef INC_FREERTOS_H
 | 
			
		||||
        #error "include FreeRTOS.h must appear in source files before include croutine.h"
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef INC_FREERTOS_H
 | 
			
		||||
    #error "include FreeRTOS.h must appear in source files before include croutine.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #include "list.h"
 | 
			
		||||
#include "list.h"
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        extern "C" {
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
/* Used to hide the implementation of the co-routine control block.  The
 | 
			
		||||
 * control block structure however has to be included in the header due to
 | 
			
		||||
 * the macro implementation of the co-routine functionality. */
 | 
			
		||||
    typedef void * CoRoutineHandle_t;
 | 
			
		||||
typedef void * CoRoutineHandle_t;
 | 
			
		||||
 | 
			
		||||
/* Defines the prototype to which co-routine functions must conform. */
 | 
			
		||||
    typedef void (* crCOROUTINE_CODE)( CoRoutineHandle_t,
 | 
			
		||||
                                       UBaseType_t );
 | 
			
		||||
typedef void (* crCOROUTINE_CODE)( CoRoutineHandle_t,
 | 
			
		||||
                                   UBaseType_t );
 | 
			
		||||
 | 
			
		||||
    typedef struct corCoRoutineControlBlock
 | 
			
		||||
    {
 | 
			
		||||
        crCOROUTINE_CODE pxCoRoutineFunction;
 | 
			
		||||
        ListItem_t xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */
 | 
			
		||||
        ListItem_t xEventListItem;   /*< List item used to place the CRCB in event lists. */
 | 
			
		||||
        UBaseType_t uxPriority;      /*< The priority of the co-routine in relation to other co-routines. */
 | 
			
		||||
        UBaseType_t uxIndex;         /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */
 | 
			
		||||
        uint16_t uxState;            /*< Used internally by the co-routine implementation. */
 | 
			
		||||
    } CRCB_t;                        /* Co-routine control block.  Note must be identical in size down to uxPriority with TCB_t. */
 | 
			
		||||
typedef struct corCoRoutineControlBlock
 | 
			
		||||
{
 | 
			
		||||
    crCOROUTINE_CODE pxCoRoutineFunction;
 | 
			
		||||
    ListItem_t xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */
 | 
			
		||||
    ListItem_t xEventListItem;   /*< List item used to place the CRCB in event lists. */
 | 
			
		||||
    UBaseType_t uxPriority;      /*< The priority of the co-routine in relation to other co-routines. */
 | 
			
		||||
    UBaseType_t uxIndex;         /*< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */
 | 
			
		||||
    uint16_t uxState;            /*< Used internally by the co-routine implementation. */
 | 
			
		||||
} CRCB_t;                        /* Co-routine control block.  Note must be identical in size down to uxPriority with TCB_t. */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * croutine. h
 | 
			
		||||
@ -128,9 +130,9 @@
 | 
			
		||||
 * \defgroup xCoRoutineCreate xCoRoutineCreate
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode,
 | 
			
		||||
                                 UBaseType_t uxPriority,
 | 
			
		||||
                                 UBaseType_t uxIndex );
 | 
			
		||||
BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode,
 | 
			
		||||
                             UBaseType_t uxPriority,
 | 
			
		||||
                             UBaseType_t uxIndex );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -172,7 +174,7 @@
 | 
			
		||||
 * \defgroup vCoRoutineSchedule vCoRoutineSchedule
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    void vCoRoutineSchedule( void );
 | 
			
		||||
void vCoRoutineSchedule( void );
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * croutine. h
 | 
			
		||||
@ -203,7 +205,7 @@
 | 
			
		||||
 * \defgroup crSTART crSTART
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crSTART( pxCRCB )                        \
 | 
			
		||||
#define crSTART( pxCRCB )                            \
 | 
			
		||||
    switch( ( ( CRCB_t * ) ( pxCRCB ) )->uxState ) { \
 | 
			
		||||
        case 0:
 | 
			
		||||
 | 
			
		||||
@ -236,16 +238,16 @@
 | 
			
		||||
 * \defgroup crSTART crSTART
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crEND()    }
 | 
			
		||||
#define crEND()    }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * These macros are intended for internal use by the co-routine implementation
 | 
			
		||||
 * only.  The macros should not be used directly by application writers.
 | 
			
		||||
 */
 | 
			
		||||
    #define crSET_STATE0( xHandle )                                   \
 | 
			
		||||
#define crSET_STATE0( xHandle )                                       \
 | 
			
		||||
    ( ( CRCB_t * ) ( xHandle ) )->uxState = ( __LINE__ * 2 ); return; \
 | 
			
		||||
    case ( __LINE__ * 2 ):
 | 
			
		||||
    #define crSET_STATE1( xHandle )                                           \
 | 
			
		||||
#define crSET_STATE1( xHandle )                                               \
 | 
			
		||||
    ( ( CRCB_t * ) ( xHandle ) )->uxState = ( ( __LINE__ * 2 ) + 1 ); return; \
 | 
			
		||||
    case ( ( __LINE__ * 2 ) + 1 ):
 | 
			
		||||
 | 
			
		||||
@ -295,7 +297,7 @@
 | 
			
		||||
 * \defgroup crDELAY crDELAY
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crDELAY( xHandle, xTicksToDelay )                  \
 | 
			
		||||
#define crDELAY( xHandle, xTicksToDelay )                      \
 | 
			
		||||
    if( ( xTicksToDelay ) > 0 )                                \
 | 
			
		||||
    {                                                          \
 | 
			
		||||
        vCoRoutineAddToDelayedList( ( xTicksToDelay ), NULL ); \
 | 
			
		||||
@ -385,7 +387,7 @@
 | 
			
		||||
 * \defgroup crQUEUE_SEND crQUEUE_SEND
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult )       \
 | 
			
		||||
#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult )           \
 | 
			
		||||
    {                                                                                     \
 | 
			
		||||
        *( pxResult ) = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), ( xTicksToWait ) ); \
 | 
			
		||||
        if( *( pxResult ) == errQUEUE_BLOCKED )                                           \
 | 
			
		||||
@ -477,7 +479,7 @@
 | 
			
		||||
 * \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult )       \
 | 
			
		||||
#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult )           \
 | 
			
		||||
    {                                                                                   \
 | 
			
		||||
        *( pxResult ) = xQueueCRReceive( ( pxQueue ), ( pvBuffer ), ( xTicksToWait ) ); \
 | 
			
		||||
        if( *( pxResult ) == errQUEUE_BLOCKED )                                         \
 | 
			
		||||
@ -586,7 +588,8 @@
 | 
			
		||||
 * \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken )    xQueueCRSendFromISR( ( pxQueue ), ( pvItemToQueue ), ( xCoRoutinePreviouslyWoken ) )
 | 
			
		||||
#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) \
 | 
			
		||||
    xQueueCRSendFromISR( ( pxQueue ), ( pvItemToQueue ), ( xCoRoutinePreviouslyWoken ) )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -699,7 +702,8 @@
 | 
			
		||||
 * \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
    #define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken )    xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) )
 | 
			
		||||
#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) \
 | 
			
		||||
    xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is intended for internal use by the co-routine macros only.
 | 
			
		||||
@ -710,8 +714,8 @@
 | 
			
		||||
 * Removes the current co-routine from its ready list and places it in the
 | 
			
		||||
 * appropriate delayed list.
 | 
			
		||||
 */
 | 
			
		||||
    void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay,
 | 
			
		||||
                                     List_t * pxEventList );
 | 
			
		||||
void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay,
 | 
			
		||||
                                 List_t * pxEventList );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is intended for internal use by the queue implementation only.
 | 
			
		||||
@ -720,10 +724,12 @@
 | 
			
		||||
 * Removes the highest priority co-routine from the event list and places it in
 | 
			
		||||
 * the pending ready list.
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xCoRoutineRemoveFromEventList( const List_t * pxEventList );
 | 
			
		||||
BaseType_t xCoRoutineRemoveFromEventList( const List_t * pxEventList );
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        }
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
#endif /* CO_ROUTINE_H */
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										181
									
								
								include/list.h
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								include/list.h
									
									
									
									
									
								
							@ -52,12 +52,13 @@
 | 
			
		||||
 * \ingroup FreeRTOSIntro
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef INC_FREERTOS_H
 | 
			
		||||
    #error FreeRTOS.h must be included before list.h
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef LIST_H
 | 
			
		||||
    #define LIST_H
 | 
			
		||||
#define LIST_H
 | 
			
		||||
 | 
			
		||||
#ifndef INC_FREERTOS_H
 | 
			
		||||
    #error "FreeRTOS.h must be included before list.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The list structure members are modified from within interrupts, and therefore
 | 
			
		||||
@ -87,87 +88,89 @@
 | 
			
		||||
 * FreeRTOSConfig.h (without the quotes):
 | 
			
		||||
 * "#define configLIST_VOLATILE volatile"
 | 
			
		||||
 */
 | 
			
		||||
    #ifndef configLIST_VOLATILE
 | 
			
		||||
        #define configLIST_VOLATILE
 | 
			
		||||
    #endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */
 | 
			
		||||
#ifndef configLIST_VOLATILE
 | 
			
		||||
    #define configLIST_VOLATILE
 | 
			
		||||
#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        extern "C" {
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
/* Macros that can be used to place known values within the list structures,
 | 
			
		||||
 * then check that the known values do not get corrupted during the execution of
 | 
			
		||||
 * the application.   These may catch the list data structures being overwritten in
 | 
			
		||||
 * memory.  They will not catch data errors caused by incorrect configuration or
 | 
			
		||||
 * use of FreeRTOS.*/
 | 
			
		||||
    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )
 | 
			
		||||
        /* Define the macros to do nothing. */
 | 
			
		||||
        #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listFIRST_LIST_INTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listSECOND_LIST_INTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
 | 
			
		||||
        #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
 | 
			
		||||
        #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )
 | 
			
		||||
        #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )
 | 
			
		||||
        #define listTEST_LIST_ITEM_INTEGRITY( pxItem )
 | 
			
		||||
        #define listTEST_LIST_INTEGRITY( pxList )
 | 
			
		||||
    #else /* if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) */
 | 
			
		||||
        /* Define macros that add new members into the list structures. */
 | 
			
		||||
        #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE     TickType_t xListItemIntegrityValue1;
 | 
			
		||||
        #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE    TickType_t xListItemIntegrityValue2;
 | 
			
		||||
        #define listFIRST_LIST_INTEGRITY_CHECK_VALUE          TickType_t xListIntegrityValue1;
 | 
			
		||||
        #define listSECOND_LIST_INTEGRITY_CHECK_VALUE         TickType_t xListIntegrityValue2;
 | 
			
		||||
#if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )
 | 
			
		||||
    /* Define the macros to do nothing. */
 | 
			
		||||
    #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listFIRST_LIST_INTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSECOND_LIST_INTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
 | 
			
		||||
    #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
 | 
			
		||||
    #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )
 | 
			
		||||
    #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )
 | 
			
		||||
    #define listTEST_LIST_ITEM_INTEGRITY( pxItem )
 | 
			
		||||
    #define listTEST_LIST_INTEGRITY( pxList )
 | 
			
		||||
#else /* if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) */
 | 
			
		||||
    /* Define macros that add new members into the list structures. */
 | 
			
		||||
    #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE     TickType_t xListItemIntegrityValue1;
 | 
			
		||||
    #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE    TickType_t xListItemIntegrityValue2;
 | 
			
		||||
    #define listFIRST_LIST_INTEGRITY_CHECK_VALUE          TickType_t xListIntegrityValue1;
 | 
			
		||||
    #define listSECOND_LIST_INTEGRITY_CHECK_VALUE         TickType_t xListIntegrityValue2;
 | 
			
		||||
 | 
			
		||||
/* Define macros that set the new structure members to known values. */
 | 
			
		||||
        #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )     ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )    ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )              ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
        #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )              ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )     ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )    ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )              ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
    #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )              ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
 | 
			
		||||
 | 
			
		||||
/* Define macros that will assert if one of the structure members does not
 | 
			
		||||
 * contain its expected value. */
 | 
			
		||||
        #define listTEST_LIST_ITEM_INTEGRITY( pxItem )                      configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
 | 
			
		||||
        #define listTEST_LIST_INTEGRITY( pxList )                           configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
 | 
			
		||||
    #endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */
 | 
			
		||||
    #define listTEST_LIST_ITEM_INTEGRITY( pxItem )                      configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
 | 
			
		||||
    #define listTEST_LIST_INTEGRITY( pxList )                           configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
 | 
			
		||||
#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Definition of the only type of object that a list can contain.
 | 
			
		||||
 */
 | 
			
		||||
    struct xLIST;
 | 
			
		||||
    struct xLIST_ITEM
 | 
			
		||||
    {
 | 
			
		||||
        listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE           /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
        configLIST_VOLATILE TickType_t xItemValue;          /*< The value being listed.  In most cases this is used to sort the list in descending order. */
 | 
			
		||||
        struct xLIST_ITEM * configLIST_VOLATILE pxNext;     /*< Pointer to the next ListItem_t in the list. */
 | 
			
		||||
        struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */
 | 
			
		||||
        void * pvOwner;                                     /*< Pointer to the object (normally a TCB) that contains the list item.  There is therefore a two way link between the object containing the list item and the list item itself. */
 | 
			
		||||
        struct xLIST * configLIST_VOLATILE pxContainer;     /*< Pointer to the list in which this list item is placed (if any). */
 | 
			
		||||
        listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE          /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
    };
 | 
			
		||||
    typedef struct xLIST_ITEM ListItem_t;                   /* For some reason lint wants this as two separate definitions. */
 | 
			
		||||
struct xLIST;
 | 
			
		||||
struct xLIST_ITEM
 | 
			
		||||
{
 | 
			
		||||
    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE               /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
    configLIST_VOLATILE TickType_t xItemValue;              /*< The value being listed.  In most cases this is used to sort the list in descending order. */
 | 
			
		||||
    struct xLIST_ITEM * configLIST_VOLATILE pxNext;         /*< Pointer to the next ListItem_t in the list. */
 | 
			
		||||
    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;     /*< Pointer to the previous ListItem_t in the list. */
 | 
			
		||||
    void * pvOwner;                                         /*< Pointer to the object (normally a TCB) that contains the list item.  There is therefore a two way link between the object containing the list item and the list item itself. */
 | 
			
		||||
    struct xLIST * configLIST_VOLATILE pxContainer;         /*< Pointer to the list in which this list item is placed (if any). */
 | 
			
		||||
    listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE              /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
};
 | 
			
		||||
typedef struct xLIST_ITEM ListItem_t;                       /* For some reason lint wants this as two separate definitions. */
 | 
			
		||||
 | 
			
		||||
    struct xMINI_LIST_ITEM
 | 
			
		||||
    {
 | 
			
		||||
        listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
        configLIST_VOLATILE TickType_t xItemValue;
 | 
			
		||||
        struct xLIST_ITEM * configLIST_VOLATILE pxNext;
 | 
			
		||||
        struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
 | 
			
		||||
    };
 | 
			
		||||
    typedef struct xMINI_LIST_ITEM MiniListItem_t;
 | 
			
		||||
struct xMINI_LIST_ITEM
 | 
			
		||||
{
 | 
			
		||||
    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE     /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
    configLIST_VOLATILE TickType_t xItemValue;
 | 
			
		||||
    struct xLIST_ITEM * configLIST_VOLATILE pxNext;
 | 
			
		||||
    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
 | 
			
		||||
};
 | 
			
		||||
typedef struct xMINI_LIST_ITEM MiniListItem_t;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Definition of the type of queue used by the scheduler.
 | 
			
		||||
 */
 | 
			
		||||
    typedef struct xLIST
 | 
			
		||||
    {
 | 
			
		||||
        listFIRST_LIST_INTEGRITY_CHECK_VALUE      /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
        volatile UBaseType_t uxNumberOfItems;
 | 
			
		||||
        ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list.  Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */
 | 
			
		||||
        MiniListItem_t xListEnd;                  /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */
 | 
			
		||||
        listSECOND_LIST_INTEGRITY_CHECK_VALUE     /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
    } List_t;
 | 
			
		||||
typedef struct xLIST
 | 
			
		||||
{
 | 
			
		||||
    listFIRST_LIST_INTEGRITY_CHECK_VALUE          /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
    volatile UBaseType_t uxNumberOfItems;
 | 
			
		||||
    ListItem_t * configLIST_VOLATILE pxIndex;     /*< Used to walk through the list.  Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */
 | 
			
		||||
    MiniListItem_t xListEnd;                      /*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */
 | 
			
		||||
    listSECOND_LIST_INTEGRITY_CHECK_VALUE         /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
 | 
			
		||||
} List_t;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to set the owner of a list item.  The owner of a list item
 | 
			
		||||
@ -176,7 +179,7 @@
 | 
			
		||||
 * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner )    ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) )
 | 
			
		||||
#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner )    ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to get the owner of a list item.  The owner of a list item
 | 
			
		||||
@ -185,7 +188,7 @@
 | 
			
		||||
 * \page listGET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_LIST_ITEM_OWNER( pxListItem )             ( ( pxListItem )->pvOwner )
 | 
			
		||||
#define listGET_LIST_ITEM_OWNER( pxListItem )             ( ( pxListItem )->pvOwner )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to set the value of the list item.  In most cases the value is
 | 
			
		||||
@ -194,7 +197,7 @@
 | 
			
		||||
 * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listSET_LIST_ITEM_VALUE( pxListItem, xValue )     ( ( pxListItem )->xItemValue = ( xValue ) )
 | 
			
		||||
#define listSET_LIST_ITEM_VALUE( pxListItem, xValue )     ( ( pxListItem )->xItemValue = ( xValue ) )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to retrieve the value of the list item.  The value can
 | 
			
		||||
@ -204,7 +207,7 @@
 | 
			
		||||
 * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_LIST_ITEM_VALUE( pxListItem )             ( ( pxListItem )->xItemValue )
 | 
			
		||||
#define listGET_LIST_ITEM_VALUE( pxListItem )             ( ( pxListItem )->xItemValue )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to retrieve the value of the list item at the head of a given
 | 
			
		||||
@ -213,7 +216,7 @@
 | 
			
		||||
 * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList )        ( ( ( pxList )->xListEnd ).pxNext->xItemValue )
 | 
			
		||||
#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList )        ( ( ( pxList )->xListEnd ).pxNext->xItemValue )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return the list item at the head of the list.
 | 
			
		||||
@ -221,7 +224,7 @@
 | 
			
		||||
 * \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_HEAD_ENTRY( pxList )                      ( ( ( pxList )->xListEnd ).pxNext )
 | 
			
		||||
#define listGET_HEAD_ENTRY( pxList )                      ( ( ( pxList )->xListEnd ).pxNext )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return the next list item.
 | 
			
		||||
@ -229,7 +232,7 @@
 | 
			
		||||
 * \page listGET_NEXT listGET_NEXT
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_NEXT( pxListItem )                        ( ( pxListItem )->pxNext )
 | 
			
		||||
#define listGET_NEXT( pxListItem )                        ( ( pxListItem )->pxNext )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return the list item that marks the end of the list
 | 
			
		||||
@ -237,7 +240,7 @@
 | 
			
		||||
 * \page listGET_END_MARKER listGET_END_MARKER
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_END_MARKER( pxList )                      ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) )
 | 
			
		||||
#define listGET_END_MARKER( pxList )                      ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to determine if a list contains any items.  The macro will
 | 
			
		||||
@ -246,12 +249,12 @@
 | 
			
		||||
 * \page listLIST_IS_EMPTY listLIST_IS_EMPTY
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listLIST_IS_EMPTY( pxList )                       ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE )
 | 
			
		||||
#define listLIST_IS_EMPTY( pxList )                       ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access macro to return the number of items in the list.
 | 
			
		||||
 */
 | 
			
		||||
    #define listCURRENT_LIST_LENGTH( pxList )                 ( ( pxList )->uxNumberOfItems )
 | 
			
		||||
#define listCURRENT_LIST_LENGTH( pxList )                 ( ( pxList )->uxNumberOfItems )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Access function to obtain the owner of the next entry in a list.
 | 
			
		||||
@ -273,7 +276,7 @@
 | 
			
		||||
 * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList )                                       \
 | 
			
		||||
#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList )                                           \
 | 
			
		||||
    {                                                                                          \
 | 
			
		||||
        List_t * const pxConstList = ( pxList );                                               \
 | 
			
		||||
        /* Increment the index to the next item and return the item, ensuring */               \
 | 
			
		||||
@ -303,7 +306,7 @@
 | 
			
		||||
 * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    #define listGET_OWNER_OF_HEAD_ENTRY( pxList )            ( ( &( ( pxList )->xListEnd ) )->pxNext->pvOwner )
 | 
			
		||||
#define listGET_OWNER_OF_HEAD_ENTRY( pxList )            ( ( &( ( pxList )->xListEnd ) )->pxNext->pvOwner )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check to see if a list item is within a list.  The list item maintains a
 | 
			
		||||
@ -314,7 +317,7 @@
 | 
			
		||||
 * @param pxListItem The list item we want to know if is in the list.
 | 
			
		||||
 * @return pdTRUE if the list item is in the list, otherwise pdFALSE.
 | 
			
		||||
 */
 | 
			
		||||
    #define listIS_CONTAINED_WITHIN( pxList, pxListItem )    ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) )
 | 
			
		||||
#define listIS_CONTAINED_WITHIN( pxList, pxListItem )    ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return the list a list item is contained within (referenced from).
 | 
			
		||||
@ -322,14 +325,14 @@
 | 
			
		||||
 * @param pxListItem The list item being queried.
 | 
			
		||||
 * @return A pointer to the List_t object that references the pxListItem
 | 
			
		||||
 */
 | 
			
		||||
    #define listLIST_ITEM_CONTAINER( pxListItem )            ( ( pxListItem )->pxContainer )
 | 
			
		||||
#define listLIST_ITEM_CONTAINER( pxListItem )            ( ( pxListItem )->pxContainer )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This provides a crude means of knowing if a list has been initialised, as
 | 
			
		||||
 * pxList->xListEnd.xItemValue is set to portMAX_DELAY by the vListInitialise()
 | 
			
		||||
 * function.
 | 
			
		||||
 */
 | 
			
		||||
    #define listLIST_IS_INITIALISED( pxList )                ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY )
 | 
			
		||||
#define listLIST_IS_INITIALISED( pxList )                ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Must be called before a list is used!  This initialises all the members
 | 
			
		||||
@ -341,7 +344,7 @@
 | 
			
		||||
 * \page vListInitialise vListInitialise
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Must be called before a list item is used.  This sets the list container to
 | 
			
		||||
@ -352,7 +355,7 @@
 | 
			
		||||
 * \page vListInitialiseItem vListInitialiseItem
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Insert a list item into a list.  The item will be inserted into the list in
 | 
			
		||||
@ -365,8 +368,8 @@
 | 
			
		||||
 * \page vListInsert vListInsert
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    void vListInsert( List_t * const pxList,
 | 
			
		||||
                      ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vListInsert( List_t * const pxList,
 | 
			
		||||
                  ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Insert a list item into a list.  The item will be inserted in a position
 | 
			
		||||
@ -387,8 +390,8 @@
 | 
			
		||||
 * \page vListInsertEnd vListInsertEnd
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    void vListInsertEnd( List_t * const pxList,
 | 
			
		||||
                         ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vListInsertEnd( List_t * const pxList,
 | 
			
		||||
                     ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Remove an item from a list.  The list item has a pointer to the list that
 | 
			
		||||
@ -403,10 +406,12 @@
 | 
			
		||||
 * \page uxListRemove uxListRemove
 | 
			
		||||
 * \ingroup LinkedList
 | 
			
		||||
 */
 | 
			
		||||
    UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION;
 | 
			
		||||
UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        }
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
#endif /* ifndef LIST_H */
 | 
			
		||||
 | 
			
		||||
@ -59,18 +59,20 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef FREERTOS_MESSAGE_BUFFER_H
 | 
			
		||||
    #define FREERTOS_MESSAGE_BUFFER_H
 | 
			
		||||
#define FREERTOS_MESSAGE_BUFFER_H
 | 
			
		||||
 | 
			
		||||
    #ifndef INC_FREERTOS_H
 | 
			
		||||
        #error "include FreeRTOS.h must appear in source files before include message_buffer.h"
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef INC_FREERTOS_H
 | 
			
		||||
    #error "include FreeRTOS.h must appear in source files before include message_buffer.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Message buffers are built onto of stream buffers. */
 | 
			
		||||
    #include "stream_buffer.h"
 | 
			
		||||
#include "stream_buffer.h"
 | 
			
		||||
 | 
			
		||||
    #if defined( __cplusplus )
 | 
			
		||||
        extern "C" {
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#if defined( __cplusplus )
 | 
			
		||||
    extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Type by which message buffers are referenced.  For example, a call to
 | 
			
		||||
@ -78,7 +80,7 @@
 | 
			
		||||
 * then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(),
 | 
			
		||||
 * etc.
 | 
			
		||||
 */
 | 
			
		||||
    typedef void * MessageBufferHandle_t;
 | 
			
		||||
typedef void * MessageBufferHandle_t;
 | 
			
		||||
 | 
			
		||||
/*-----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
@ -138,7 +140,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferCreate xMessageBufferCreate
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferCreate( xBufferSizeBytes )                                                              ( MessageBufferHandle_t ) xStreamBufferGenericCreate( xBufferSizeBytes, ( size_t ) 0, pdTRUE )
 | 
			
		||||
#define xMessageBufferCreate( xBufferSizeBytes ) \
 | 
			
		||||
    ( MessageBufferHandle_t ) xStreamBufferGenericCreate( xBufferSizeBytes, ( size_t ) 0, pdTRUE )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -204,7 +207,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferCreateStatic xMessageBufferCreateStatic
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferCreateStatic( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer )    ( MessageBufferHandle_t ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, 0, pdTRUE, pucMessageBufferStorageArea, pxStaticMessageBuffer )
 | 
			
		||||
#define xMessageBufferCreateStatic( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer ) \
 | 
			
		||||
    ( MessageBufferHandle_t ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, 0, pdTRUE, pucMessageBufferStorageArea, pxStaticMessageBuffer )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -303,7 +307,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferSend xMessageBufferSend
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferSend( xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait )                        xStreamBufferSend( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait )
 | 
			
		||||
#define xMessageBufferSend( xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait ) \
 | 
			
		||||
    xStreamBufferSend( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -407,7 +412,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferSendFromISR xMessageBufferSendFromISR
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferSendFromISR( xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken )    xStreamBufferSendFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken )
 | 
			
		||||
#define xMessageBufferSendFromISR( xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) \
 | 
			
		||||
    xStreamBufferSendFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -495,7 +501,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferReceive xMessageBufferReceive
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferReceive( xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait )                   xStreamBufferReceive( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait )
 | 
			
		||||
#define xMessageBufferReceive( xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait ) \
 | 
			
		||||
    xStreamBufferReceive( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -596,7 +603,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferReceiveFromISR xMessageBufferReceiveFromISR
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferReceiveFromISR( xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken )    xStreamBufferReceiveFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken )
 | 
			
		||||
#define xMessageBufferReceiveFromISR( xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) \
 | 
			
		||||
    xStreamBufferReceiveFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -616,7 +624,8 @@
 | 
			
		||||
 * @param xMessageBuffer The handle of the message buffer to be deleted.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
    #define vMessageBufferDelete( xMessageBuffer )                                                                     vStreamBufferDelete( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
#define vMessageBufferDelete( xMessageBuffer ) \
 | 
			
		||||
    vStreamBufferDelete( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -633,7 +642,8 @@
 | 
			
		||||
 * @return If the message buffer referenced by xMessageBuffer is full then
 | 
			
		||||
 * pdTRUE is returned.  Otherwise pdFALSE is returned.
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferIsFull( xMessageBuffer )                                                                     xStreamBufferIsFull( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
#define xMessageBufferIsFull( xMessageBuffer ) \
 | 
			
		||||
    xStreamBufferIsFull( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -649,7 +659,8 @@
 | 
			
		||||
 * pdTRUE is returned.  Otherwise pdFALSE is returned.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferIsEmpty( xMessageBuffer )                                                                    xStreamBufferIsEmpty( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
#define xMessageBufferIsEmpty( xMessageBuffer ) \
 | 
			
		||||
    xStreamBufferIsEmpty( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -672,7 +683,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferReset xMessageBufferReset
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferReset( xMessageBuffer )                                                                      xStreamBufferReset( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
#define xMessageBufferReset( xMessageBuffer ) \
 | 
			
		||||
    xStreamBufferReset( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -694,8 +706,10 @@
 | 
			
		||||
 * \defgroup xMessageBufferSpaceAvailable xMessageBufferSpaceAvailable
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferSpaceAvailable( xMessageBuffer )                                        xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
    #define xMessageBufferSpacesAvailable( xMessageBuffer )                                       xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer ) /* Corrects typo in original macro name. */
 | 
			
		||||
#define xMessageBufferSpaceAvailable( xMessageBuffer ) \
 | 
			
		||||
    xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer )
 | 
			
		||||
#define xMessageBufferSpacesAvailable( xMessageBuffer ) \
 | 
			
		||||
    xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer ) /* Corrects typo in original macro name. */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -714,7 +728,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferNextLengthBytes xMessageBufferNextLengthBytes
 | 
			
		||||
 * \ingroup MessageBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferNextLengthBytes( xMessageBuffer )                                       xStreamBufferNextMessageLengthBytes( ( StreamBufferHandle_t ) xMessageBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#define xMessageBufferNextLengthBytes( xMessageBuffer ) \
 | 
			
		||||
    xStreamBufferNextMessageLengthBytes( ( StreamBufferHandle_t ) xMessageBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -753,7 +768,8 @@
 | 
			
		||||
 * \defgroup xMessageBufferSendCompletedFromISR xMessageBufferSendCompletedFromISR
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferSendCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken )       xStreamBufferSendCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken )
 | 
			
		||||
#define xMessageBufferSendCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) \
 | 
			
		||||
    xStreamBufferSendCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * message_buffer.h
 | 
			
		||||
@ -793,10 +809,13 @@
 | 
			
		||||
 * \defgroup xMessageBufferReceiveCompletedFromISR xMessageBufferReceiveCompletedFromISR
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xMessageBufferReceiveCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken )    xStreamBufferReceiveCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken )
 | 
			
		||||
#define xMessageBufferReceiveCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) \
 | 
			
		||||
    xStreamBufferReceiveCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken )
 | 
			
		||||
 | 
			
		||||
    #if defined( __cplusplus )
 | 
			
		||||
        } /* extern "C" */
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#if defined( __cplusplus )
 | 
			
		||||
    } /* extern "C" */
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
#endif /* !defined( FREERTOS_MESSAGE_BUFFER_H ) */
 | 
			
		||||
 | 
			
		||||
@ -29,7 +29,7 @@
 | 
			
		||||
*----------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifndef PORTABLE_H
 | 
			
		||||
    #define PORTABLE_H
 | 
			
		||||
#define PORTABLE_H
 | 
			
		||||
 | 
			
		||||
/* Each FreeRTOS port has a unique portmacro.h header file.  Originally a
 | 
			
		||||
 * pre-processor definition was used to ensure the pre-processor found the correct
 | 
			
		||||
@ -41,61 +41,63 @@
 | 
			
		||||
 * to make it clear that new projects should not use it, support for the port
 | 
			
		||||
 * specific constants has been moved into the deprecated_definitions.h header
 | 
			
		||||
 * file. */
 | 
			
		||||
    #include "deprecated_definitions.h"
 | 
			
		||||
#include "deprecated_definitions.h"
 | 
			
		||||
 | 
			
		||||
/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h
 | 
			
		||||
 * did not result in a portmacro.h header file being included - and it should be
 | 
			
		||||
 * included here.  In this case the path to the correct portmacro.h header file
 | 
			
		||||
 * must be set in the compiler's include path. */
 | 
			
		||||
    #ifndef portENTER_CRITICAL
 | 
			
		||||
        #include "portmacro.h"
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef portENTER_CRITICAL
 | 
			
		||||
    #include "portmacro.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if portBYTE_ALIGNMENT == 32
 | 
			
		||||
        #define portBYTE_ALIGNMENT_MASK    ( 0x001f )
 | 
			
		||||
    #endif
 | 
			
		||||
#if portBYTE_ALIGNMENT == 32
 | 
			
		||||
    #define portBYTE_ALIGNMENT_MASK    ( 0x001f )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if portBYTE_ALIGNMENT == 16
 | 
			
		||||
        #define portBYTE_ALIGNMENT_MASK    ( 0x000f )
 | 
			
		||||
    #endif
 | 
			
		||||
#if portBYTE_ALIGNMENT == 16
 | 
			
		||||
    #define portBYTE_ALIGNMENT_MASK    ( 0x000f )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if portBYTE_ALIGNMENT == 8
 | 
			
		||||
        #define portBYTE_ALIGNMENT_MASK    ( 0x0007 )
 | 
			
		||||
    #endif
 | 
			
		||||
#if portBYTE_ALIGNMENT == 8
 | 
			
		||||
    #define portBYTE_ALIGNMENT_MASK    ( 0x0007 )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if portBYTE_ALIGNMENT == 4
 | 
			
		||||
        #define portBYTE_ALIGNMENT_MASK    ( 0x0003 )
 | 
			
		||||
    #endif
 | 
			
		||||
#if portBYTE_ALIGNMENT == 4
 | 
			
		||||
    #define portBYTE_ALIGNMENT_MASK    ( 0x0003 )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if portBYTE_ALIGNMENT == 2
 | 
			
		||||
        #define portBYTE_ALIGNMENT_MASK    ( 0x0001 )
 | 
			
		||||
    #endif
 | 
			
		||||
#if portBYTE_ALIGNMENT == 2
 | 
			
		||||
    #define portBYTE_ALIGNMENT_MASK    ( 0x0001 )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if portBYTE_ALIGNMENT == 1
 | 
			
		||||
        #define portBYTE_ALIGNMENT_MASK    ( 0x0000 )
 | 
			
		||||
    #endif
 | 
			
		||||
#if portBYTE_ALIGNMENT == 1
 | 
			
		||||
    #define portBYTE_ALIGNMENT_MASK    ( 0x0000 )
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #ifndef portBYTE_ALIGNMENT_MASK
 | 
			
		||||
        #error "Invalid portBYTE_ALIGNMENT definition"
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef portBYTE_ALIGNMENT_MASK
 | 
			
		||||
    #error "Invalid portBYTE_ALIGNMENT definition"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #ifndef portNUM_CONFIGURABLE_REGIONS
 | 
			
		||||
        #define portNUM_CONFIGURABLE_REGIONS    1
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef portNUM_CONFIGURABLE_REGIONS
 | 
			
		||||
    #define portNUM_CONFIGURABLE_REGIONS    1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #ifndef portHAS_STACK_OVERFLOW_CHECKING
 | 
			
		||||
        #define portHAS_STACK_OVERFLOW_CHECKING    0
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef portHAS_STACK_OVERFLOW_CHECKING
 | 
			
		||||
    #define portHAS_STACK_OVERFLOW_CHECKING    0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #ifndef portARCH_NAME
 | 
			
		||||
        #define portARCH_NAME    NULL
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef portARCH_NAME
 | 
			
		||||
    #define portARCH_NAME    NULL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        extern "C" {
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
    #include "mpu_wrappers.h"
 | 
			
		||||
#include "mpu_wrappers.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Setup the stack of a new task so it is ready to be placed under the
 | 
			
		||||
@ -103,51 +105,51 @@
 | 
			
		||||
 * the order that the port expects to find them.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
    #if ( portUSING_MPU_WRAPPERS == 1 )
 | 
			
		||||
        #if ( portHAS_STACK_OVERFLOW_CHECKING == 1 )
 | 
			
		||||
            StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                                 StackType_t * pxEndOfStack,
 | 
			
		||||
                                                 TaskFunction_t pxCode,
 | 
			
		||||
                                                 void * pvParameters,
 | 
			
		||||
                                                 BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION;
 | 
			
		||||
        #else
 | 
			
		||||
            StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                                 TaskFunction_t pxCode,
 | 
			
		||||
                                                 void * pvParameters,
 | 
			
		||||
                                                 BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION;
 | 
			
		||||
        #endif
 | 
			
		||||
    #else /* if ( portUSING_MPU_WRAPPERS == 1 ) */
 | 
			
		||||
        #if ( portHAS_STACK_OVERFLOW_CHECKING == 1 )
 | 
			
		||||
            StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                                 StackType_t * pxEndOfStack,
 | 
			
		||||
                                                 TaskFunction_t pxCode,
 | 
			
		||||
                                                 void * pvParameters ) PRIVILEGED_FUNCTION;
 | 
			
		||||
        #else
 | 
			
		||||
            StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                                 TaskFunction_t pxCode,
 | 
			
		||||
                                                 void * pvParameters ) PRIVILEGED_FUNCTION;
 | 
			
		||||
        #endif
 | 
			
		||||
    #endif /* if ( portUSING_MPU_WRAPPERS == 1 ) */
 | 
			
		||||
#if ( portUSING_MPU_WRAPPERS == 1 )
 | 
			
		||||
    #if ( portHAS_STACK_OVERFLOW_CHECKING == 1 )
 | 
			
		||||
        StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                             StackType_t * pxEndOfStack,
 | 
			
		||||
                                             TaskFunction_t pxCode,
 | 
			
		||||
                                             void * pvParameters,
 | 
			
		||||
                                             BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #else
 | 
			
		||||
        StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                             TaskFunction_t pxCode,
 | 
			
		||||
                                             void * pvParameters,
 | 
			
		||||
                                             BaseType_t xRunPrivileged ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #endif
 | 
			
		||||
#else /* if ( portUSING_MPU_WRAPPERS == 1 ) */
 | 
			
		||||
    #if ( portHAS_STACK_OVERFLOW_CHECKING == 1 )
 | 
			
		||||
        StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                             StackType_t * pxEndOfStack,
 | 
			
		||||
                                             TaskFunction_t pxCode,
 | 
			
		||||
                                             void * pvParameters ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #else
 | 
			
		||||
        StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
 | 
			
		||||
                                             TaskFunction_t pxCode,
 | 
			
		||||
                                             void * pvParameters ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #endif
 | 
			
		||||
#endif /* if ( portUSING_MPU_WRAPPERS == 1 ) */
 | 
			
		||||
 | 
			
		||||
/* Used by heap_5.c to define the start address and size of each memory region
 | 
			
		||||
 * that together comprise the total FreeRTOS heap space. */
 | 
			
		||||
    typedef struct HeapRegion
 | 
			
		||||
    {
 | 
			
		||||
        uint8_t * pucStartAddress;
 | 
			
		||||
        size_t xSizeInBytes;
 | 
			
		||||
    } HeapRegion_t;
 | 
			
		||||
typedef struct HeapRegion
 | 
			
		||||
{
 | 
			
		||||
    uint8_t * pucStartAddress;
 | 
			
		||||
    size_t xSizeInBytes;
 | 
			
		||||
} HeapRegion_t;
 | 
			
		||||
 | 
			
		||||
/* Used to pass information about the heap out of vPortGetHeapStats(). */
 | 
			
		||||
    typedef struct xHeapStats
 | 
			
		||||
    {
 | 
			
		||||
        size_t xAvailableHeapSpaceInBytes;      /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
 | 
			
		||||
        size_t xSizeOfLargestFreeBlockInBytes;  /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
 | 
			
		||||
        size_t xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
 | 
			
		||||
        size_t xNumberOfFreeBlocks;             /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
 | 
			
		||||
        size_t xMinimumEverFreeBytesRemaining;  /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
 | 
			
		||||
        size_t xNumberOfSuccessfulAllocations;  /* The number of calls to pvPortMalloc() that have returned a valid memory block. */
 | 
			
		||||
        size_t xNumberOfSuccessfulFrees;        /* The number of calls to vPortFree() that has successfully freed a block of memory. */
 | 
			
		||||
    } HeapStats_t;
 | 
			
		||||
typedef struct xHeapStats
 | 
			
		||||
{
 | 
			
		||||
    size_t xAvailableHeapSpaceInBytes;          /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
 | 
			
		||||
    size_t xSizeOfLargestFreeBlockInBytes;      /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
 | 
			
		||||
    size_t xSizeOfSmallestFreeBlockInBytes;     /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
 | 
			
		||||
    size_t xNumberOfFreeBlocks;                 /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
 | 
			
		||||
    size_t xMinimumEverFreeBytesRemaining;      /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
 | 
			
		||||
    size_t xNumberOfSuccessfulAllocations;      /* The number of calls to pvPortMalloc() that have returned a valid memory block. */
 | 
			
		||||
    size_t xNumberOfSuccessfulFrees;            /* The number of calls to vPortFree() that has successfully freed a block of memory. */
 | 
			
		||||
} HeapStats_t;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Used to define multiple heap regions for use by heap_5.c.  This function
 | 
			
		||||
@ -160,35 +162,35 @@
 | 
			
		||||
 * terminated by a HeapRegions_t structure that has a size of 0.  The region
 | 
			
		||||
 * with the lowest start address must appear first in the array.
 | 
			
		||||
 */
 | 
			
		||||
    void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Returns a HeapStats_t structure filled with information about the current
 | 
			
		||||
 * heap state.
 | 
			
		||||
 */
 | 
			
		||||
    void vPortGetHeapStats( HeapStats_t * pxHeapStats );
 | 
			
		||||
void vPortGetHeapStats( HeapStats_t * pxHeapStats );
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Map to the memory management routines required for the port.
 | 
			
		||||
 */
 | 
			
		||||
    void * pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    void vPortFree( void * pv ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void * pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vPortFree( void * pv ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vPortInitialiseBlocks( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xPortGetFreeHeapSize( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xPortGetMinimumEverFreeHeapSize( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Setup the hardware ready for the scheduler to take control.  This generally
 | 
			
		||||
 * sets up a tick interrupt and sets timers for the correct tick frequency.
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xPortStartScheduler( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so
 | 
			
		||||
 * the hardware is left in its original condition after the scheduler stops
 | 
			
		||||
 * executing.
 | 
			
		||||
 */
 | 
			
		||||
    void vPortEndScheduler( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vPortEndScheduler( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The structures and methods of manipulating the MPU are contained within the
 | 
			
		||||
@ -197,16 +199,18 @@
 | 
			
		||||
 * Fills the xMPUSettings structure with the memory region information
 | 
			
		||||
 * contained in xRegions.
 | 
			
		||||
 */
 | 
			
		||||
    #if ( portUSING_MPU_WRAPPERS == 1 )
 | 
			
		||||
        struct xMEMORY_REGION;
 | 
			
		||||
        void vPortStoreTaskMPUSettings( xMPU_SETTINGS * xMPUSettings,
 | 
			
		||||
                                        const struct xMEMORY_REGION * const xRegions,
 | 
			
		||||
                                        StackType_t * pxBottomOfStack,
 | 
			
		||||
                                        uint32_t ulStackDepth ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #endif
 | 
			
		||||
#if ( portUSING_MPU_WRAPPERS == 1 )
 | 
			
		||||
    struct xMEMORY_REGION;
 | 
			
		||||
    void vPortStoreTaskMPUSettings( xMPU_SETTINGS * xMPUSettings,
 | 
			
		||||
                                    const struct xMEMORY_REGION * const xRegions,
 | 
			
		||||
                                    StackType_t * pxBottomOfStack,
 | 
			
		||||
                                    uint32_t ulStackDepth ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #ifdef __cplusplus
 | 
			
		||||
        }
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
#endif /* PORTABLE_H */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3402
									
								
								include/queue.h
									
									
									
									
									
								
							
							
						
						
									
										3402
									
								
								include/queue.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -48,15 +48,17 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef STREAM_BUFFER_H
 | 
			
		||||
    #define STREAM_BUFFER_H
 | 
			
		||||
#define STREAM_BUFFER_H
 | 
			
		||||
 | 
			
		||||
    #ifndef INC_FREERTOS_H
 | 
			
		||||
        #error "include FreeRTOS.h must appear in source files before include stream_buffer.h"
 | 
			
		||||
    #endif
 | 
			
		||||
#ifndef INC_FREERTOS_H
 | 
			
		||||
    #error "include FreeRTOS.h must appear in source files before include stream_buffer.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if defined( __cplusplus )
 | 
			
		||||
        extern "C" {
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#if defined( __cplusplus )
 | 
			
		||||
    extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Type by which stream buffers are referenced.  For example, a call to
 | 
			
		||||
@ -64,8 +66,8 @@
 | 
			
		||||
 * then be used as a parameter to xStreamBufferSend(), xStreamBufferReceive(),
 | 
			
		||||
 * etc.
 | 
			
		||||
 */
 | 
			
		||||
    struct StreamBufferDef_t;
 | 
			
		||||
    typedef struct StreamBufferDef_t * StreamBufferHandle_t;
 | 
			
		||||
struct StreamBufferDef_t;
 | 
			
		||||
typedef struct StreamBufferDef_t * StreamBufferHandle_t;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -133,7 +135,7 @@
 | 
			
		||||
 * \defgroup xStreamBufferCreate xStreamBufferCreate
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xStreamBufferCreate( xBufferSizeBytes, xTriggerLevelBytes )                                                            xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE )
 | 
			
		||||
#define xStreamBufferCreate( xBufferSizeBytes, xTriggerLevelBytes )    xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -214,7 +216,8 @@
 | 
			
		||||
 * \defgroup xStreamBufferCreateStatic xStreamBufferCreateStatic
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    #define xStreamBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer )    xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE, pucStreamBufferStorageArea, pxStaticStreamBuffer )
 | 
			
		||||
#define xStreamBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer ) \
 | 
			
		||||
    xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE, pucStreamBufferStorageArea, pxStaticStreamBuffer )
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -308,10 +311,10 @@
 | 
			
		||||
 * \defgroup xStreamBufferSend xStreamBufferSend
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                              const void * pvTxData,
 | 
			
		||||
                              size_t xDataLengthBytes,
 | 
			
		||||
                              TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                          const void * pvTxData,
 | 
			
		||||
                          size_t xDataLengthBytes,
 | 
			
		||||
                          TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -409,10 +412,10 @@
 | 
			
		||||
 * \defgroup xStreamBufferSendFromISR xStreamBufferSendFromISR
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                     const void * pvTxData,
 | 
			
		||||
                                     size_t xDataLengthBytes,
 | 
			
		||||
                                     BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                 const void * pvTxData,
 | 
			
		||||
                                 size_t xDataLengthBytes,
 | 
			
		||||
                                 BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -498,10 +501,10 @@
 | 
			
		||||
 * \defgroup xStreamBufferReceive xStreamBufferReceive
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                 void * pvRxData,
 | 
			
		||||
                                 size_t xBufferLengthBytes,
 | 
			
		||||
                                 TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                             void * pvRxData,
 | 
			
		||||
                             size_t xBufferLengthBytes,
 | 
			
		||||
                             TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -584,10 +587,10 @@
 | 
			
		||||
 * \defgroup xStreamBufferReceiveFromISR xStreamBufferReceiveFromISR
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                        void * pvRxData,
 | 
			
		||||
                                        size_t xBufferLengthBytes,
 | 
			
		||||
                                        BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                    void * pvRxData,
 | 
			
		||||
                                    size_t xBufferLengthBytes,
 | 
			
		||||
                                    BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -609,7 +612,7 @@
 | 
			
		||||
 * \defgroup vStreamBufferDelete vStreamBufferDelete
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -629,7 +632,7 @@
 | 
			
		||||
 * \defgroup xStreamBufferIsFull xStreamBufferIsFull
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -649,7 +652,7 @@
 | 
			
		||||
 * \defgroup xStreamBufferIsEmpty xStreamBufferIsEmpty
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -672,7 +675,7 @@
 | 
			
		||||
 * \defgroup xStreamBufferReset xStreamBufferReset
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -693,7 +696,7 @@
 | 
			
		||||
 * \defgroup xStreamBufferSpacesAvailable xStreamBufferSpacesAvailable
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -714,7 +717,7 @@
 | 
			
		||||
 * \defgroup xStreamBufferBytesAvailable xStreamBufferBytesAvailable
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -751,8 +754,8 @@
 | 
			
		||||
 * \defgroup xStreamBufferSetTriggerLevel xStreamBufferSetTriggerLevel
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                             size_t xTriggerLevel ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                         size_t xTriggerLevel ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -791,8 +794,8 @@
 | 
			
		||||
 * \defgroup xStreamBufferSendCompletedFromISR xStreamBufferSendCompletedFromISR
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                                  BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                              BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * stream_buffer.h
 | 
			
		||||
@ -832,31 +835,33 @@
 | 
			
		||||
 * \defgroup xStreamBufferReceiveCompletedFromISR xStreamBufferReceiveCompletedFromISR
 | 
			
		||||
 * \ingroup StreamBufferManagement
 | 
			
		||||
 */
 | 
			
		||||
    BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                                     BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                                 BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
/* Functions below here are not part of the public API. */
 | 
			
		||||
    StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes,
 | 
			
		||||
                                                     size_t xTriggerLevelBytes,
 | 
			
		||||
                                                     BaseType_t xIsMessageBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes,
 | 
			
		||||
                                                 size_t xTriggerLevelBytes,
 | 
			
		||||
                                                 BaseType_t xIsMessageBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
    StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,
 | 
			
		||||
                                                           size_t xTriggerLevelBytes,
 | 
			
		||||
                                                           BaseType_t xIsMessageBuffer,
 | 
			
		||||
                                                           uint8_t * const pucStreamBufferStorageArea,
 | 
			
		||||
                                                           StaticStreamBuffer_t * const pxStaticStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,
 | 
			
		||||
                                                       size_t xTriggerLevelBytes,
 | 
			
		||||
                                                       BaseType_t xIsMessageBuffer,
 | 
			
		||||
                                                       uint8_t * const pucStreamBufferStorageArea,
 | 
			
		||||
                                                       StaticStreamBuffer_t * const pxStaticStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
    size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
    #if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
        void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                                 UBaseType_t uxStreamBufferNumber ) PRIVILEGED_FUNCTION;
 | 
			
		||||
        UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
        uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #endif
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
                                             UBaseType_t uxStreamBufferNumber ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    #if defined( __cplusplus )
 | 
			
		||||
        }
 | 
			
		||||
    #endif
 | 
			
		||||
/* *INDENT-OFF* */
 | 
			
		||||
#if defined( __cplusplus )
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
/* *INDENT-ON* */
 | 
			
		||||
 | 
			
		||||
#endif /* !defined( STREAM_BUFFER_H ) */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										5832
									
								
								include/task.h
									
									
									
									
									
								
							
							
						
						
									
										5832
									
								
								include/task.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2651
									
								
								include/timers.h
									
									
									
									
									
								
							
							
						
						
									
										2651
									
								
								include/timers.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										18
									
								
								queue.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								queue.c
									
									
									
									
									
								
							@ -1000,7 +1000,7 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
     * assigned a priority above the configured maximum system call priority.
 | 
			
		||||
     * Only FreeRTOS functions that end in FromISR can be called from interrupts
 | 
			
		||||
     * that have been assigned a priority at or (logically) below the maximum
 | 
			
		||||
     * system call	interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * system call interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * safe API to ensure interrupt entry is as fast and as simple as possible.
 | 
			
		||||
     * More information (albeit Cortex-M specific) is provided on the following
 | 
			
		||||
     * link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
 | 
			
		||||
@ -1096,7 +1096,7 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The task waiting has a higher priority so record that a
 | 
			
		||||
                                 * context	switch is required. */
 | 
			
		||||
                                 * context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
@ -1178,7 +1178,7 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
     * assigned a priority above the configured maximum system call priority.
 | 
			
		||||
     * Only FreeRTOS functions that end in FromISR can be called from interrupts
 | 
			
		||||
     * that have been assigned a priority at or (logically) below the maximum
 | 
			
		||||
     * system call	interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * system call interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * safe API to ensure interrupt entry is as fast and as simple as possible.
 | 
			
		||||
     * More information (albeit Cortex-M specific) is provided on the following
 | 
			
		||||
     * link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
 | 
			
		||||
@ -1216,8 +1216,8 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                            if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The semaphore is a member of a queue set, and
 | 
			
		||||
                                 * posting	to the queue set caused a higher priority
 | 
			
		||||
                                 * task to	unblock.  A context switch is required. */
 | 
			
		||||
                                 * posting to the queue set caused a higher priority
 | 
			
		||||
                                 * task to unblock.  A context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
@ -1267,7 +1267,7 @@ BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The task waiting has a higher priority so record that a
 | 
			
		||||
                                 * context	switch is required. */
 | 
			
		||||
                                 * context switch is required. */
 | 
			
		||||
                                if( pxHigherPriorityTaskWoken != NULL )
 | 
			
		||||
                                {
 | 
			
		||||
                                    *pxHigherPriorityTaskWoken = pdTRUE;
 | 
			
		||||
@ -1846,7 +1846,7 @@ BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
     * assigned a priority above the configured maximum system call priority.
 | 
			
		||||
     * Only FreeRTOS functions that end in FromISR can be called from interrupts
 | 
			
		||||
     * that have been assigned a priority at or (logically) below the maximum
 | 
			
		||||
     * system call	interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * system call interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * safe API to ensure interrupt entry is as fast and as simple as possible.
 | 
			
		||||
     * More information (albeit Cortex-M specific) is provided on the following
 | 
			
		||||
     * link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
 | 
			
		||||
@ -1942,7 +1942,7 @@ BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue,
 | 
			
		||||
     * assigned a priority above the configured maximum system call priority.
 | 
			
		||||
     * Only FreeRTOS functions that end in FromISR can be called from interrupts
 | 
			
		||||
     * that have been assigned a priority at or (logically) below the maximum
 | 
			
		||||
     * system call	interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * system call interrupt priority.  FreeRTOS maintains a separate interrupt
 | 
			
		||||
     * safe API to ensure interrupt entry is as fast and as simple as possible.
 | 
			
		||||
     * More information (albeit Cortex-M specific) is provided on the following
 | 
			
		||||
     * link: http://www.freertos.org/RTOS-Cortex-M3-M4.html */
 | 
			
		||||
@ -2267,7 +2267,7 @@ static void prvUnlockQueue( Queue_t * const pxQueue )
 | 
			
		||||
                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )
 | 
			
		||||
                            {
 | 
			
		||||
                                /* The task waiting has a higher priority so record that a
 | 
			
		||||
                                 * context	switch is required. */
 | 
			
		||||
                                 * context switch is required. */
 | 
			
		||||
                                vTaskMissedYield();
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
 | 
			
		||||
@ -517,11 +517,11 @@ size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
    size_t xReturn, xSpace = 0;
 | 
			
		||||
    size_t xRequiredSpace = xDataLengthBytes;
 | 
			
		||||
    TimeOut_t xTimeOut;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /* Having a 'isFeasible' variable allows to respect the convention that there is only a return statement at the end. Othewise, return
 | 
			
		||||
     * could be done as soon as we realise the send cannot happen. We will let the call to 'prvWriteMessageToBuffer' dealing with this scenario. */
 | 
			
		||||
    BaseType_t xIsFeasible;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    configASSERT( pvTxData );
 | 
			
		||||
    configASSERT( pxStreamBuffer );
 | 
			
		||||
 | 
			
		||||
@ -535,56 +535,56 @@ size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,
 | 
			
		||||
 | 
			
		||||
        /* Overflow? */
 | 
			
		||||
        configASSERT( xRequiredSpace > xDataLengthBytes );
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /* In the case of the message buffer, one has to be able to write the complete message as opposed to
 | 
			
		||||
		 * a stream buffer for semantic reasons. Check if it is physically possible to write the message given
 | 
			
		||||
         * a stream buffer for semantic reasons. Check if it is physically possible to write the message given
 | 
			
		||||
         * the length of the buffer. */
 | 
			
		||||
		if(xRequiredSpace > pxStreamBuffer->xLength)
 | 
			
		||||
		{
 | 
			
		||||
			/* The message could never be written because it is greater than the buffer length.
 | 
			
		||||
			 * By setting xIsFeasable to FALSE, we skip over the following do..while loop, thus avoiding
 | 
			
		||||
			 * a deadlock. The call to 'prvWriteMessageToBuffer' toward the end of this function with
 | 
			
		||||
			 * xRequiredSpace greater than xSpace will suffice in not writing anything to the internal buffer.
 | 
			
		||||
			 * Now, the function will return 0 because the message could not be written. Should an error code be
 | 
			
		||||
			 * returned instead ??? In my opinion, probably.. But the return type doesn't allow for negative
 | 
			
		||||
			 * values to be returned. A confusion could exist to the caller. Returning 0 because a timeout occurred
 | 
			
		||||
			 * and a subsequent send attempts could eventually succeed, and returning 0 because a write could never
 | 
			
		||||
			 * happen because of the size are two scenarios to me :/ */
 | 
			
		||||
			xIsFeasible = pdFALSE;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			/* It is possible to write the message completely in the buffer. This is the intended route.
 | 
			
		||||
			 * Let's continue with the regular timeout logic. */
 | 
			
		||||
			xIsFeasible = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
        if( xRequiredSpace > pxStreamBuffer->xLength )
 | 
			
		||||
        {
 | 
			
		||||
            /* The message could never be written because it is greater than the buffer length.
 | 
			
		||||
             * By setting xIsFeasable to FALSE, we skip over the following do..while loop, thus avoiding
 | 
			
		||||
             * a deadlock. The call to 'prvWriteMessageToBuffer' toward the end of this function with
 | 
			
		||||
             * xRequiredSpace greater than xSpace will suffice in not writing anything to the internal buffer.
 | 
			
		||||
             * Now, the function will return 0 because the message could not be written. Should an error code be
 | 
			
		||||
             * returned instead ??? In my opinion, probably.. But the return type doesn't allow for negative
 | 
			
		||||
             * values to be returned. A confusion could exist to the caller. Returning 0 because a timeout occurred
 | 
			
		||||
             * and a subsequent send attempts could eventually succeed, and returning 0 because a write could never
 | 
			
		||||
             * happen because of the size are two scenarios to me :/ */
 | 
			
		||||
            xIsFeasible = pdFALSE;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            /* It is possible to write the message completely in the buffer. This is the intended route.
 | 
			
		||||
             * Let's continue with the regular timeout logic. */
 | 
			
		||||
            xIsFeasible = pdTRUE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        /* In the case of the stream buffer, not being able to completely write the message in the buffer
 | 
			
		||||
		 * is an acceptable scenario, but it has to be dealt with properly */
 | 
			
		||||
		if(xRequiredSpace > pxStreamBuffer->xLength)
 | 
			
		||||
		{
 | 
			
		||||
			/* Not enough buffer space. We will attempt to write as much as we can in this run
 | 
			
		||||
			 * so that the caller can send the remaining in subsequent calls. We avoid a deadlock by
 | 
			
		||||
			 * offering the possibility to take the 'else' branch in the  'if( xSpace < xRequiredSpace )'
 | 
			
		||||
			 * condition inside the following do..while loop */
 | 
			
		||||
			xRequiredSpace = pxStreamBuffer->xLength;
 | 
			
		||||
			
 | 
			
		||||
			/* TODO FIXME: Is there a check we should do with the xTriggerLevelBytes value ? */
 | 
			
		||||
         * is an acceptable scenario, but it has to be dealt with properly */
 | 
			
		||||
        if( xRequiredSpace > pxStreamBuffer->xLength )
 | 
			
		||||
        {
 | 
			
		||||
            /* Not enough buffer space. We will attempt to write as much as we can in this run
 | 
			
		||||
             * so that the caller can send the remaining in subsequent calls. We avoid a deadlock by
 | 
			
		||||
             * offering the possibility to take the 'else' branch in the  'if( xSpace < xRequiredSpace )'
 | 
			
		||||
             * condition inside the following do..while loop */
 | 
			
		||||
            xRequiredSpace = pxStreamBuffer->xLength;
 | 
			
		||||
 | 
			
		||||
			/* With the adjustment to 'xRequiredSpace', the deadlock is avoided, thus it's now feasible. */
 | 
			
		||||
			xIsFeasible = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			/* It is possible to write the message completely in the buffer. */
 | 
			
		||||
			xIsFeasible = pdTRUE;
 | 
			
		||||
		}
 | 
			
		||||
            /* TODO FIXME: Is there a check we should do with the xTriggerLevelBytes value ? */
 | 
			
		||||
 | 
			
		||||
            /* With the adjustment to 'xRequiredSpace', the deadlock is avoided, thus it's now feasible. */
 | 
			
		||||
            xIsFeasible = pdTRUE;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            /* It is possible to write the message completely in the buffer. */
 | 
			
		||||
            xIsFeasible = pdTRUE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Added check against xIsFeasible. If it's not feasible, don't even wait for notification, let the call to 'prvWriteMessageToBuffer' do nothing and return 0 */
 | 
			
		||||
    if( xTicksToWait != ( TickType_t ) 0 && xIsFeasible == pdTRUE )
 | 
			
		||||
    if( ( xTicksToWait != ( TickType_t ) 0 ) && ( xIsFeasible == pdTRUE ) )
 | 
			
		||||
    {
 | 
			
		||||
        vTaskSetTimeOutState( &xTimeOut );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								tasks.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								tasks.c
									
									
									
									
									
								
							@ -3308,7 +3308,7 @@ void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )
 | 
			
		||||
BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,
 | 
			
		||||
                                 TickType_t * const pxTicksToWait )
 | 
			
		||||
{
 | 
			
		||||
BaseType_t xReturn;
 | 
			
		||||
    BaseType_t xReturn;
 | 
			
		||||
 | 
			
		||||
    configASSERT( pxTimeOut );
 | 
			
		||||
    configASSERT( pxTicksToWait );
 | 
			
		||||
@ -3319,7 +3319,7 @@ BaseType_t xReturn;
 | 
			
		||||
        const TickType_t xConstTickCount = xTickCount;
 | 
			
		||||
        const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;
 | 
			
		||||
 | 
			
		||||
        #if( INCLUDE_xTaskAbortDelay == 1 )
 | 
			
		||||
        #if ( INCLUDE_xTaskAbortDelay == 1 )
 | 
			
		||||
            if( pxCurrentTCB->ucDelayAborted != ( uint8_t ) pdFALSE )
 | 
			
		||||
            {
 | 
			
		||||
                /* The delay was aborted, which is not the same as a time out,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user