Ignore FreeRToS in formatting
As its sensitive to import order
This commit is contained in:
@@ -32,11 +32,11 @@ SOURCE_DRIVERS_DIR = ./Core/Drivers
|
|||||||
INC_PD_DRIVERS_DIR = ./Core/Drivers/FUSB302
|
INC_PD_DRIVERS_DIR = ./Core/Drivers/FUSB302
|
||||||
SOURCE_MIDDLEWARES_DIR = ./Middlewares
|
SOURCE_MIDDLEWARES_DIR = ./Middlewares
|
||||||
# Find-all's used for formatting
|
# Find-all's used for formatting
|
||||||
ALL_INCLUDES = $(shell find ./ -type f -name '*.h') \
|
ALL_INCLUDES = $(shell find ./Core -type f -name '*.h') \
|
||||||
$(shell find ./ -type f -name '*.hpp')
|
$(shell find ./Core -type f -name '*.hpp')
|
||||||
|
|
||||||
ALL_SOURCE = $(shell find ./ -type f -name '*.c') \
|
ALL_SOURCE = $(shell find ./Core -type f -name '*.c') \
|
||||||
$(shell find ./ -type f -name '*.cpp')
|
$(shell find ./Core -type f -name '*.cpp')
|
||||||
# Device dependent settings
|
# Device dependent settings
|
||||||
ifeq ($(model),$(filter $(model),TS100 TS80 TS80P))
|
ifeq ($(model),$(filter $(model),TS100 TS80 TS80P))
|
||||||
$(info Building for Miniware )
|
$(info Building for Miniware )
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -53,7 +53,7 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file cmsis_os.h
|
* @file cmsis_os.h
|
||||||
* @author MCD Application Team
|
* @author MCD Application Team
|
||||||
@@ -99,11 +99,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "event_groups.h"
|
|
||||||
#include "queue.h"
|
|
||||||
#include "semphr.h"
|
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "semphr.h"
|
||||||
|
#include "event_groups.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\page cmsis_os_h Header File Template: cmsis_os.h
|
\page cmsis_os_h Header File Template: cmsis_os.h
|
||||||
@@ -205,9 +205,11 @@ used throughout the whole project.
|
|||||||
#define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available
|
#define osFeature_SysTick 1 ///< osKernelSysTick functions: 1=available, 0=not available
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C"
|
||||||
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// ==== Enumeration, structures, defines ====
|
// ==== Enumeration, structures, defines ====
|
||||||
|
|
||||||
/// Priority used for thread control.
|
/// Priority used for thread control.
|
||||||
@@ -247,11 +249,11 @@ typedef enum {
|
|||||||
os_status_reserved = 0x7FFFFFFF ///< prevent from enum down-size compiler optimization.
|
os_status_reserved = 0x7FFFFFFF ///< prevent from enum down-size compiler optimization.
|
||||||
} osStatus;
|
} osStatus;
|
||||||
|
|
||||||
#if (INCLUDE_eTaskGetState == 1)
|
#if ( INCLUDE_eTaskGetState == 1 )
|
||||||
/* Thread state returned by osThreadGetState */
|
/* Thread state returned by osThreadGetState */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
osThreadRunning = 0x0, /* A thread is querying the state of itself, so must be running. */
|
osThreadRunning = 0x0, /* A thread is querying the state of itself, so must be running. */
|
||||||
osThreadReady = 0x1, /* The thread being queried is in a read or pending ready list. */
|
osThreadReady = 0x1 , /* The thread being queried is in a read or pending ready list. */
|
||||||
osThreadBlocked = 0x2, /* The thread being queried is in the Blocked state. */
|
osThreadBlocked = 0x2, /* The thread being queried is in the Blocked state. */
|
||||||
osThreadSuspended = 0x3, /* The thread being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
|
osThreadSuspended = 0x3, /* The thread being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */
|
||||||
osThreadDeleted = 0x4, /* The thread being queried has been deleted, but its TCB has not yet been freed. */
|
osThreadDeleted = 0x4, /* The thread being queried has been deleted, but its TCB has not yet been freed. */
|
||||||
@@ -268,11 +270,11 @@ typedef enum {
|
|||||||
|
|
||||||
/// Entry point of a thread.
|
/// Entry point of a thread.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b os_pthread shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b os_pthread shall be consistent in every CMSIS-RTOS.
|
||||||
typedef void (*os_pthread)(void const *argument);
|
typedef void (*os_pthread) (void const *argument);
|
||||||
|
|
||||||
/// Entry point of a timer call back function.
|
/// Entry point of a timer call back function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b os_ptimer shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b os_ptimer shall be consistent in every CMSIS-RTOS.
|
||||||
typedef void (*os_ptimer)(void const *argument);
|
typedef void (*os_ptimer) (void const *argument);
|
||||||
|
|
||||||
// >>> the following data type definitions may shall adapted towards a specific RTOS
|
// >>> the following data type definitions may shall adapted towards a specific RTOS
|
||||||
|
|
||||||
@@ -304,7 +306,8 @@ typedef QueueHandle_t osMessageQId;
|
|||||||
/// \note CAN BE CHANGED: \b os_mailQ_cb is implementation specific in every CMSIS-RTOS.
|
/// \note CAN BE CHANGED: \b os_mailQ_cb is implementation specific in every CMSIS-RTOS.
|
||||||
typedef struct os_mailQ_cb *osMailQId;
|
typedef struct os_mailQ_cb *osMailQId;
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
|
||||||
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
|
|
||||||
typedef StaticTask_t osStaticThreadDef_t;
|
typedef StaticTask_t osStaticThreadDef_t;
|
||||||
typedef StaticTimer_t osStaticTimerDef_t;
|
typedef StaticTimer_t osStaticTimerDef_t;
|
||||||
@@ -314,16 +317,19 @@ typedef StaticQueue_t osStaticMessageQDef_t;
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Thread Definition structure contains startup information of a thread.
|
/// Thread Definition structure contains startup information of a thread.
|
||||||
/// \note CAN BE CHANGED: \b os_thread_def is implementation specific in every CMSIS-RTOS.
|
/// \note CAN BE CHANGED: \b os_thread_def is implementation specific in every CMSIS-RTOS.
|
||||||
typedef struct os_thread_def {
|
typedef struct os_thread_def {
|
||||||
char * name; ///< Thread name
|
char *name; ///< Thread name
|
||||||
os_pthread pthread; ///< start address of thread function
|
os_pthread pthread; ///< start address of thread function
|
||||||
osPriority tpriority; ///< initial thread priority
|
osPriority tpriority; ///< initial thread priority
|
||||||
uint32_t instances; ///< maximum number of instances of that thread function
|
uint32_t instances; ///< maximum number of instances of that thread function
|
||||||
uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size
|
uint32_t stacksize; ///< stack size requirements in bytes; 0 is default stack size
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
uint32_t * buffer; ///< stack buffer for static allocation; NULL for dynamic allocation
|
uint32_t *buffer; ///< stack buffer for static allocation; NULL for dynamic allocation
|
||||||
osStaticThreadDef_t *controlblock; ///< control block to hold thread's data for static allocation; NULL for dynamic allocation
|
osStaticThreadDef_t *controlblock; ///< control block to hold thread's data for static allocation; NULL for dynamic allocation
|
||||||
#endif
|
#endif
|
||||||
} osThreadDef_t;
|
} osThreadDef_t;
|
||||||
@@ -332,7 +338,7 @@ typedef struct os_thread_def {
|
|||||||
/// \note CAN BE CHANGED: \b os_timer_def is implementation specific in every CMSIS-RTOS.
|
/// \note CAN BE CHANGED: \b os_timer_def is implementation specific in every CMSIS-RTOS.
|
||||||
typedef struct os_timer_def {
|
typedef struct os_timer_def {
|
||||||
os_ptimer ptimer; ///< start address of a timer function
|
os_ptimer ptimer; ///< start address of a timer function
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
osStaticTimerDef_t *controlblock; ///< control block to hold timer's data for static allocation; NULL for dynamic allocation
|
osStaticTimerDef_t *controlblock; ///< control block to hold timer's data for static allocation; NULL for dynamic allocation
|
||||||
#endif
|
#endif
|
||||||
} osTimerDef_t;
|
} osTimerDef_t;
|
||||||
@@ -341,7 +347,7 @@ typedef struct os_timer_def {
|
|||||||
/// \note CAN BE CHANGED: \b os_mutex_def is implementation specific in every CMSIS-RTOS.
|
/// \note CAN BE CHANGED: \b os_mutex_def is implementation specific in every CMSIS-RTOS.
|
||||||
typedef struct os_mutex_def {
|
typedef struct os_mutex_def {
|
||||||
uint32_t dummy; ///< dummy value.
|
uint32_t dummy; ///< dummy value.
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
osStaticMutexDef_t *controlblock; ///< control block for static allocation; NULL for dynamic allocation
|
osStaticMutexDef_t *controlblock; ///< control block for static allocation; NULL for dynamic allocation
|
||||||
#endif
|
#endif
|
||||||
} osMutexDef_t;
|
} osMutexDef_t;
|
||||||
@@ -350,7 +356,7 @@ typedef struct os_mutex_def {
|
|||||||
/// \note CAN BE CHANGED: \b os_semaphore_def is implementation specific in every CMSIS-RTOS.
|
/// \note CAN BE CHANGED: \b os_semaphore_def is implementation specific in every CMSIS-RTOS.
|
||||||
typedef struct os_semaphore_def {
|
typedef struct os_semaphore_def {
|
||||||
uint32_t dummy; ///< dummy value.
|
uint32_t dummy; ///< dummy value.
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
osStaticSemaphoreDef_t *controlblock; ///< control block for static allocation; NULL for dynamic allocation
|
osStaticSemaphoreDef_t *controlblock; ///< control block for static allocation; NULL for dynamic allocation
|
||||||
#endif
|
#endif
|
||||||
} osSemaphoreDef_t;
|
} osSemaphoreDef_t;
|
||||||
@@ -360,7 +366,7 @@ typedef struct os_semaphore_def {
|
|||||||
typedef struct os_pool_def {
|
typedef struct os_pool_def {
|
||||||
uint32_t pool_sz; ///< number of items (elements) in the pool
|
uint32_t pool_sz; ///< number of items (elements) in the pool
|
||||||
uint32_t item_sz; ///< size of an item
|
uint32_t item_sz; ///< size of an item
|
||||||
void * pool; ///< pointer to memory for pool
|
void *pool; ///< pointer to memory for pool
|
||||||
} osPoolDef_t;
|
} osPoolDef_t;
|
||||||
|
|
||||||
/// Definition structure for message queue.
|
/// Definition structure for message queue.
|
||||||
@@ -368,11 +374,11 @@ typedef struct os_pool_def {
|
|||||||
typedef struct os_messageQ_def {
|
typedef struct os_messageQ_def {
|
||||||
uint32_t queue_sz; ///< number of elements in the queue
|
uint32_t queue_sz; ///< number of elements in the queue
|
||||||
uint32_t item_sz; ///< size of an item
|
uint32_t item_sz; ///< size of an item
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
uint8_t * buffer; ///< buffer for static allocation; NULL for dynamic allocation
|
uint8_t *buffer; ///< buffer for static allocation; NULL for dynamic allocation
|
||||||
osStaticMessageQDef_t *controlblock; ///< control block to hold queue's data for static allocation; NULL for dynamic allocation
|
osStaticMessageQDef_t *controlblock; ///< control block to hold queue's data for static allocation; NULL for dynamic allocation
|
||||||
#endif
|
#endif
|
||||||
// void *pool; ///< memory array for messages
|
//void *pool; ///< memory array for messages
|
||||||
} osMessageQDef_t;
|
} osMessageQDef_t;
|
||||||
|
|
||||||
/// Definition structure for mail queue.
|
/// Definition structure for mail queue.
|
||||||
@@ -390,7 +396,7 @@ typedef struct {
|
|||||||
osStatus status; ///< status code: event or error information
|
osStatus status; ///< status code: event or error information
|
||||||
union {
|
union {
|
||||||
uint32_t v; ///< message as 32-bit value
|
uint32_t v; ///< message as 32-bit value
|
||||||
void * p; ///< message or mail as void pointer
|
void *p; ///< message or mail as void pointer
|
||||||
int32_t signals; ///< signal flags
|
int32_t signals; ///< signal flags
|
||||||
} value; ///< event value
|
} value; ///< event value
|
||||||
union {
|
union {
|
||||||
@@ -399,29 +405,30 @@ typedef struct {
|
|||||||
} def; ///< event definition
|
} def; ///< event definition
|
||||||
} osEvent;
|
} osEvent;
|
||||||
|
|
||||||
|
|
||||||
// ==== Kernel Control Functions ====
|
// ==== Kernel Control Functions ====
|
||||||
|
|
||||||
/// Initialize the RTOS Kernel for creating objects.
|
/// Initialize the RTOS Kernel for creating objects.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osKernelInitialize shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osKernelInitialize shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osKernelInitialize(void);
|
osStatus osKernelInitialize (void);
|
||||||
|
|
||||||
/// Start the RTOS Kernel.
|
/// Start the RTOS Kernel.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osKernelStart shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osKernelStart shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osKernelStart(void);
|
osStatus osKernelStart (void);
|
||||||
|
|
||||||
/// Check if the RTOS kernel is already started.
|
/// Check if the RTOS kernel is already started.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osKernelRunning shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osKernelRunning shall be consistent in every CMSIS-RTOS.
|
||||||
/// \return 0 RTOS is not started, 1 RTOS is started.
|
/// \return 0 RTOS is not started, 1 RTOS is started.
|
||||||
int32_t osKernelRunning(void);
|
int32_t osKernelRunning(void);
|
||||||
|
|
||||||
#if (defined(osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available
|
#if (defined (osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available
|
||||||
|
|
||||||
/// Get the RTOS kernel system timer counter
|
/// Get the RTOS kernel system timer counter
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osKernelSysTick shall be consistent in every CMSIS-RTOS.
|
||||||
/// \return RTOS kernel system timer as 32-bit value
|
/// \return RTOS kernel system timer as 32-bit value
|
||||||
uint32_t osKernelSysTick(void);
|
uint32_t osKernelSysTick (void);
|
||||||
|
|
||||||
/// The RTOS kernel system timer frequency in Hz
|
/// The RTOS kernel system timer frequency in Hz
|
||||||
/// \note Reflects the system timer setting and is typically defined in a configuration file.
|
/// \note Reflects the system timer setting and is typically defined in a configuration file.
|
||||||
@@ -443,18 +450,24 @@ uint32_t osKernelSysTick(void);
|
|||||||
/// \param stacksz stack size (in bytes) requirements for the thread function.
|
/// \param stacksz stack size (in bytes) requirements for the thread function.
|
||||||
/// \note CAN BE CHANGED: The parameters to \b osThreadDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameters to \b osThreadDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osThreadDef(name, thread, priority, instances, stacksz) extern const osThreadDef_t os_thread_def_##name
|
#define osThreadDef(name, thread, priority, instances, stacksz) \
|
||||||
|
extern const osThreadDef_t os_thread_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define osThreadDef(name, thread, priority, instances, stacksz) const osThreadDef_t os_thread_def_##name = {#name, (thread), (priority), (instances), (stacksz), NULL, NULL}
|
#define osThreadDef(name, thread, priority, instances, stacksz) \
|
||||||
|
const osThreadDef_t os_thread_def_##name = \
|
||||||
|
{ #name, (thread), (priority), (instances), (stacksz), NULL, NULL }
|
||||||
|
|
||||||
#define osThreadStaticDef(name, thread, priority, instances, stacksz, buffer, control) \
|
#define osThreadStaticDef(name, thread, priority, instances, stacksz, buffer, control) \
|
||||||
const osThreadDef_t os_thread_def_##name = {(char *)#name, (thread), (priority), (instances), (stacksz), (buffer), (control)}
|
const osThreadDef_t os_thread_def_##name = \
|
||||||
#else // configSUPPORT_STATIC_ALLOCATION == 0
|
{(char*) #name, (thread), (priority), (instances), (stacksz), (buffer), (control) }
|
||||||
|
#else //configSUPPORT_STATIC_ALLOCATION == 0
|
||||||
|
|
||||||
#define osThreadDef(name, thread, priority, instances, stacksz) const osThreadDef_t os_thread_def_##name = {#name, (thread), (priority), (instances), (stacksz)}
|
#define osThreadDef(name, thread, priority, instances, stacksz) \
|
||||||
|
const osThreadDef_t os_thread_def_##name = \
|
||||||
|
{ #name, (thread), (priority), (instances), (stacksz)}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -462,77 +475,87 @@ uint32_t osKernelSysTick(void);
|
|||||||
/// \param name name of the thread definition object.
|
/// \param name name of the thread definition object.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osThread shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osThread shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osThread(name) &os_thread_def_##name
|
#define osThread(name) \
|
||||||
|
&os_thread_def_##name
|
||||||
|
|
||||||
/// Create a thread and add it to Active Threads and set it to state READY.
|
/// Create a thread and add it to Active Threads and set it to state READY.
|
||||||
/// \param[in] thread_def thread definition referenced with \ref osThread.
|
/// \param[in] thread_def thread definition referenced with \ref osThread.
|
||||||
/// \param[in] argument pointer that is passed to the thread function as start argument.
|
/// \param[in] argument pointer that is passed to the thread function as start argument.
|
||||||
/// \return thread ID for reference by other functions or NULL in case of error.
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osThreadCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osThreadCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osThreadId osThreadCreate(const osThreadDef_t *thread_def, void *argument);
|
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument);
|
||||||
|
|
||||||
/// Return the thread ID of the current running thread.
|
/// Return the thread ID of the current running thread.
|
||||||
/// \return thread ID for reference by other functions or NULL in case of error.
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osThreadGetId shall be consistent in every CMSIS-RTOS.
|
||||||
osThreadId osThreadGetId(void);
|
osThreadId osThreadGetId (void);
|
||||||
|
|
||||||
/// Terminate execution of a thread and remove it from Active Threads.
|
/// Terminate execution of a thread and remove it from Active Threads.
|
||||||
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osThreadTerminate shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osThreadTerminate(osThreadId thread_id);
|
osStatus osThreadTerminate (osThreadId thread_id);
|
||||||
|
|
||||||
/// Pass control to next thread that is in state \b READY.
|
/// Pass control to next thread that is in state \b READY.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osThreadYield shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osThreadYield(void);
|
osStatus osThreadYield (void);
|
||||||
|
|
||||||
/// Change priority of an active thread.
|
/// Change priority of an active thread.
|
||||||
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
/// \param[in] priority new priority value for the thread function.
|
/// \param[in] priority new priority value for the thread function.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osThreadSetPriority shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osThreadSetPriority(osThreadId thread_id, osPriority priority);
|
osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority);
|
||||||
|
|
||||||
/// Get current priority of an active thread.
|
/// Get current priority of an active thread.
|
||||||
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
/// \return current priority value of the thread function.
|
/// \return current priority value of the thread function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osThreadGetPriority shall be consistent in every CMSIS-RTOS.
|
||||||
osPriority osThreadGetPriority(osThreadId thread_id);
|
osPriority osThreadGetPriority (osThreadId thread_id);
|
||||||
|
|
||||||
|
|
||||||
// ==== Generic Wait Functions ====
|
// ==== Generic Wait Functions ====
|
||||||
|
|
||||||
/// Wait for Timeout (Time Delay).
|
/// Wait for Timeout (Time Delay).
|
||||||
/// \param[in] millisec time delay value
|
/// \param[in] millisec time delay value
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
osStatus osDelay(uint32_t millisec);
|
osStatus osDelay (uint32_t millisec);
|
||||||
|
|
||||||
#if (defined(osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available
|
#if (defined (osFeature_Wait) && (osFeature_Wait != 0)) // Generic Wait available
|
||||||
|
|
||||||
/// Wait for Signal, Message, Mail, or Timeout.
|
/// Wait for Signal, Message, Mail, or Timeout.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out
|
/// \param[in] millisec timeout value or 0 in case of no time-out
|
||||||
/// \return event that contains signal, message, or mail information or error code.
|
/// \return event that contains signal, message, or mail information or error code.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osWait shall be consistent in every CMSIS-RTOS.
|
||||||
osEvent osWait(uint32_t millisec);
|
osEvent osWait (uint32_t millisec);
|
||||||
|
|
||||||
#endif // Generic Wait available
|
#endif // Generic Wait available
|
||||||
|
|
||||||
|
|
||||||
// ==== Timer Management Functions ====
|
// ==== Timer Management Functions ====
|
||||||
/// Define a Timer object.
|
/// Define a Timer object.
|
||||||
/// \param name name of the timer object.
|
/// \param name name of the timer object.
|
||||||
/// \param function name of the timer call back function.
|
/// \param function name of the timer call back function.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osTimerDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osTimerDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osTimerDef(name, function) extern const osTimerDef_t os_timer_def_##name
|
#define osTimerDef(name, function) \
|
||||||
|
extern const osTimerDef_t os_timer_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define osTimerDef(name, function) const osTimerDef_t os_timer_def_##name = {(function), NULL}
|
#define osTimerDef(name, function) \
|
||||||
|
const osTimerDef_t os_timer_def_##name = \
|
||||||
|
{ (function), NULL }
|
||||||
|
|
||||||
#define osTimerStaticDef(name, function, control) const osTimerDef_t os_timer_def_##name = {(function), (control)}
|
#define osTimerStaticDef(name, function, control) \
|
||||||
#else // configSUPPORT_STATIC_ALLOCATION == 0
|
const osTimerDef_t os_timer_def_##name = \
|
||||||
#define osTimerDef(name, function) const osTimerDef_t os_timer_def_##name = {(function)}
|
{ (function), (control) }
|
||||||
|
#else //configSUPPORT_STATIC_ALLOCATION == 0
|
||||||
|
#define osTimerDef(name, function) \
|
||||||
|
const osTimerDef_t os_timer_def_##name = \
|
||||||
|
{ (function) }
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -540,7 +563,8 @@ osEvent osWait(uint32_t millisec);
|
|||||||
/// \param name name of the timer object.
|
/// \param name name of the timer object.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osTimer shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osTimer shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osTimer(name) &os_timer_def_##name
|
#define osTimer(name) \
|
||||||
|
&os_timer_def_##name
|
||||||
|
|
||||||
/// Create a timer.
|
/// Create a timer.
|
||||||
/// \param[in] timer_def timer object referenced with \ref osTimer.
|
/// \param[in] timer_def timer object referenced with \ref osTimer.
|
||||||
@@ -548,26 +572,27 @@ osEvent osWait(uint32_t millisec);
|
|||||||
/// \param[in] argument argument to the timer call back function.
|
/// \param[in] argument argument to the timer call back function.
|
||||||
/// \return timer ID for reference by other functions or NULL in case of error.
|
/// \return timer ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osTimerCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osTimerId osTimerCreate(const osTimerDef_t *timer_def, os_timer_type type, void *argument);
|
osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument);
|
||||||
|
|
||||||
/// Start or restart a timer.
|
/// Start or restart a timer.
|
||||||
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
||||||
/// \param[in] millisec time delay value of the timer.
|
/// \param[in] millisec time delay value of the timer.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osTimerStart shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osTimerStart(osTimerId timer_id, uint32_t millisec);
|
osStatus osTimerStart (osTimerId timer_id, uint32_t millisec);
|
||||||
|
|
||||||
/// Stop the timer.
|
/// Stop the timer.
|
||||||
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osTimerStop shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osTimerStop(osTimerId timer_id);
|
osStatus osTimerStop (osTimerId timer_id);
|
||||||
|
|
||||||
/// Delete a timer that was created by \ref osTimerCreate.
|
/// Delete a timer that was created by \ref osTimerCreate.
|
||||||
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
/// \param[in] timer_id timer ID obtained by \ref osTimerCreate.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osTimerDelete shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osTimerDelete(osTimerId timer_id);
|
osStatus osTimerDelete (osTimerId timer_id);
|
||||||
|
|
||||||
|
|
||||||
// ==== Signal Management ====
|
// ==== Signal Management ====
|
||||||
|
|
||||||
@@ -576,21 +601,22 @@ osStatus osTimerDelete(osTimerId timer_id);
|
|||||||
/// \param[in] signals specifies the signal flags of the thread that should be set.
|
/// \param[in] signals specifies the signal flags of the thread that should be set.
|
||||||
/// \return osOK if successful, osErrorOS if failed.
|
/// \return osOK if successful, osErrorOS if failed.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSignalSet shall be consistent in every CMSIS-RTOS.
|
||||||
int32_t osSignalSet(osThreadId thread_id, int32_t signals);
|
int32_t osSignalSet (osThreadId thread_id, int32_t signals);
|
||||||
|
|
||||||
/// Clear the specified Signal Flags of an active thread.
|
/// Clear the specified Signal Flags of an active thread.
|
||||||
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
/// \param[in] thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
/// \param[in] signals specifies the signal flags of the thread that shall be cleared.
|
/// \param[in] signals specifies the signal flags of the thread that shall be cleared.
|
||||||
/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
|
/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS.
|
||||||
int32_t osSignalClear(osThreadId thread_id, int32_t signals);
|
int32_t osSignalClear (osThreadId thread_id, int32_t signals);
|
||||||
|
|
||||||
/// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread.
|
/// Wait for one or more Signal Flags to become signaled for the current \b RUNNING thread.
|
||||||
/// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag.
|
/// \param[in] signals wait until all specified signal flags set or 0 for any single signal flag.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
||||||
/// \return event flag information or error code.
|
/// \return event flag information or error code.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSignalWait shall be consistent in every CMSIS-RTOS.
|
||||||
osEvent osSignalWait(int32_t signals, uint32_t millisec);
|
osEvent osSignalWait (int32_t signals, uint32_t millisec);
|
||||||
|
|
||||||
|
|
||||||
// ==== Mutex Management ====
|
// ==== Mutex Management ====
|
||||||
|
|
||||||
@@ -598,16 +624,20 @@ osEvent osSignalWait(int32_t signals, uint32_t millisec);
|
|||||||
/// \param name name of the mutex object.
|
/// \param name name of the mutex object.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osMutexDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osMutexDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osMutexDef(name) extern const osMutexDef_t os_mutex_def_##name
|
#define osMutexDef(name) \
|
||||||
|
extern const osMutexDef_t os_mutex_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define osMutexDef(name) const osMutexDef_t os_mutex_def_##name = {0, NULL}
|
#define osMutexDef(name) \
|
||||||
|
const osMutexDef_t os_mutex_def_##name = { 0, NULL }
|
||||||
|
|
||||||
#define osMutexStaticDef(name, control) const osMutexDef_t os_mutex_def_##name = {0, (control)}
|
#define osMutexStaticDef(name, control) \
|
||||||
#else // configSUPPORT_STATIC_ALLOCATION == 0
|
const osMutexDef_t os_mutex_def_##name = { 0, (control) }
|
||||||
#define osMutexDef(name) const osMutexDef_t os_mutex_def_##name = {0}
|
#else //configSUPPORT_STATIC_ALLOCATION == 0
|
||||||
|
#define osMutexDef(name) \
|
||||||
|
const osMutexDef_t os_mutex_def_##name = { 0 }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -617,52 +647,58 @@ osEvent osSignalWait(int32_t signals, uint32_t millisec);
|
|||||||
/// \param name name of the mutex object.
|
/// \param name name of the mutex object.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osMutex shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osMutex shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osMutex(name) &os_mutex_def_##name
|
#define osMutex(name) \
|
||||||
|
&os_mutex_def_##name
|
||||||
|
|
||||||
/// Create and Initialize a Mutex object.
|
/// Create and Initialize a Mutex object.
|
||||||
/// \param[in] mutex_def mutex definition referenced with \ref osMutex.
|
/// \param[in] mutex_def mutex definition referenced with \ref osMutex.
|
||||||
/// \return mutex ID for reference by other functions or NULL in case of error.
|
/// \return mutex ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMutexCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osMutexId osMutexCreate(const osMutexDef_t *mutex_def);
|
osMutexId osMutexCreate (const osMutexDef_t *mutex_def);
|
||||||
|
|
||||||
/// Wait until a Mutex becomes available.
|
/// Wait until a Mutex becomes available.
|
||||||
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMutexWait shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osMutexWait(osMutexId mutex_id, uint32_t millisec);
|
osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec);
|
||||||
|
|
||||||
/// Release a Mutex that was obtained by \ref osMutexWait.
|
/// Release a Mutex that was obtained by \ref osMutexWait.
|
||||||
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMutexRelease shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osMutexRelease(osMutexId mutex_id);
|
osStatus osMutexRelease (osMutexId mutex_id);
|
||||||
|
|
||||||
/// Delete a Mutex that was created by \ref osMutexCreate.
|
/// Delete a Mutex that was created by \ref osMutexCreate.
|
||||||
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
/// \param[in] mutex_id mutex ID obtained by \ref osMutexCreate.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMutexDelete shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osMutexDelete(osMutexId mutex_id);
|
osStatus osMutexDelete (osMutexId mutex_id);
|
||||||
|
|
||||||
|
|
||||||
// ==== Semaphore Management Functions ====
|
// ==== Semaphore Management Functions ====
|
||||||
|
|
||||||
#if (defined(osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available
|
#if (defined (osFeature_Semaphore) && (osFeature_Semaphore != 0)) // Semaphore available
|
||||||
|
|
||||||
/// Define a Semaphore object.
|
/// Define a Semaphore object.
|
||||||
/// \param name name of the semaphore object.
|
/// \param name name of the semaphore object.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osSemaphoreDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osSemaphoreDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osSemaphoreDef(name) extern const osSemaphoreDef_t os_semaphore_def_##name
|
#define osSemaphoreDef(name) \
|
||||||
|
extern const osSemaphoreDef_t os_semaphore_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define osSemaphoreDef(name) const osSemaphoreDef_t os_semaphore_def_##name = {0, NULL}
|
#define osSemaphoreDef(name) \
|
||||||
|
const osSemaphoreDef_t os_semaphore_def_##name = { 0, NULL }
|
||||||
|
|
||||||
#define osSemaphoreStaticDef(name, control) const osSemaphoreDef_t os_semaphore_def_##name = {0, (control)}
|
#define osSemaphoreStaticDef(name, control) \
|
||||||
|
const osSemaphoreDef_t os_semaphore_def_##name = { 0, (control) }
|
||||||
|
|
||||||
#else // configSUPPORT_STATIC_ALLOCATION == 0
|
#else //configSUPPORT_STATIC_ALLOCATION == 0
|
||||||
#define osSemaphoreDef(name) const osSemaphoreDef_t os_semaphore_def_##name = {0}
|
#define osSemaphoreDef(name) \
|
||||||
|
const osSemaphoreDef_t os_semaphore_def_##name = { 0 }
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -670,39 +706,41 @@ osStatus osMutexDelete(osMutexId mutex_id);
|
|||||||
/// \param name name of the semaphore object.
|
/// \param name name of the semaphore object.
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osSemaphore shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osSemaphore shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osSemaphore(name) &os_semaphore_def_##name
|
#define osSemaphore(name) \
|
||||||
|
&os_semaphore_def_##name
|
||||||
|
|
||||||
/// Create and Initialize a Semaphore object used for managing resources.
|
/// Create and Initialize a Semaphore object used for managing resources.
|
||||||
/// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore.
|
/// \param[in] semaphore_def semaphore definition referenced with \ref osSemaphore.
|
||||||
/// \param[in] count number of available resources.
|
/// \param[in] count number of available resources.
|
||||||
/// \return semaphore ID for reference by other functions or NULL in case of error.
|
/// \return semaphore ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osSemaphoreId osSemaphoreCreate(const osSemaphoreDef_t *semaphore_def, int32_t count);
|
osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count);
|
||||||
|
|
||||||
/// Wait until a Semaphore token becomes available.
|
/// Wait until a Semaphore token becomes available.
|
||||||
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
||||||
/// \return number of available tokens, or -1 in case of incorrect parameters.
|
/// \return number of available tokens, or -1 in case of incorrect parameters.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreWait shall be consistent in every CMSIS-RTOS.
|
||||||
int32_t osSemaphoreWait(osSemaphoreId semaphore_id, uint32_t millisec);
|
int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec);
|
||||||
|
|
||||||
/// Release a Semaphore token.
|
/// Release a Semaphore token.
|
||||||
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osSemaphoreRelease(osSemaphoreId semaphore_id);
|
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id);
|
||||||
|
|
||||||
/// Delete a Semaphore that was created by \ref osSemaphoreCreate.
|
/// Delete a Semaphore that was created by \ref osSemaphoreCreate.
|
||||||
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
/// \param[in] semaphore_id semaphore object referenced with \ref osSemaphoreCreate.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osSemaphoreDelete shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osSemaphoreDelete(osSemaphoreId semaphore_id);
|
osStatus osSemaphoreDelete (osSemaphoreId semaphore_id);
|
||||||
|
|
||||||
#endif // Semaphore available
|
#endif // Semaphore available
|
||||||
|
|
||||||
|
|
||||||
// ==== Memory Pool Management Functions ====
|
// ==== Memory Pool Management Functions ====
|
||||||
|
|
||||||
#if (defined(osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available
|
#if (defined (osFeature_Pool) && (osFeature_Pool != 0)) // Memory Pool Management available
|
||||||
|
|
||||||
/// \brief Define a Memory Pool.
|
/// \brief Define a Memory Pool.
|
||||||
/// \param name name of the memory pool.
|
/// \param name name of the memory pool.
|
||||||
@@ -710,48 +748,53 @@ osStatus osSemaphoreDelete(osSemaphoreId semaphore_id);
|
|||||||
/// \param type data type of a single block (object).
|
/// \param type data type of a single block (object).
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osPoolDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osPoolDef(name, no, type) extern const osPoolDef_t os_pool_def_##name
|
#define osPoolDef(name, no, type) \
|
||||||
|
extern const osPoolDef_t os_pool_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
#define osPoolDef(name, no, type) const osPoolDef_t os_pool_def_##name = {(no), sizeof(type), NULL}
|
#define osPoolDef(name, no, type) \
|
||||||
|
const osPoolDef_t os_pool_def_##name = \
|
||||||
|
{ (no), sizeof(type), NULL }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// \brief Access a Memory Pool definition.
|
/// \brief Access a Memory Pool definition.
|
||||||
/// \param name name of the memory pool
|
/// \param name name of the memory pool
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osPool shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osPool(name) &os_pool_def_##name
|
#define osPool(name) \
|
||||||
|
&os_pool_def_##name
|
||||||
|
|
||||||
/// Create and Initialize a memory pool.
|
/// Create and Initialize a memory pool.
|
||||||
/// \param[in] pool_def memory pool definition referenced with \ref osPool.
|
/// \param[in] pool_def memory pool definition referenced with \ref osPool.
|
||||||
/// \return memory pool ID for reference by other functions or NULL in case of error.
|
/// \return memory pool ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osPoolCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osPoolId osPoolCreate(const osPoolDef_t *pool_def);
|
osPoolId osPoolCreate (const osPoolDef_t *pool_def);
|
||||||
|
|
||||||
/// Allocate a memory block from a memory pool.
|
/// Allocate a memory block from a memory pool.
|
||||||
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
||||||
/// \return address of the allocated memory block or NULL in case of no memory available.
|
/// \return address of the allocated memory block or NULL in case of no memory available.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osPoolAlloc shall be consistent in every CMSIS-RTOS.
|
||||||
void *osPoolAlloc(osPoolId pool_id);
|
void *osPoolAlloc (osPoolId pool_id);
|
||||||
|
|
||||||
/// Allocate a memory block from a memory pool and set memory block to zero.
|
/// Allocate a memory block from a memory pool and set memory block to zero.
|
||||||
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
||||||
/// \return address of the allocated memory block or NULL in case of no memory available.
|
/// \return address of the allocated memory block or NULL in case of no memory available.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osPoolCAlloc shall be consistent in every CMSIS-RTOS.
|
||||||
void *osPoolCAlloc(osPoolId pool_id);
|
void *osPoolCAlloc (osPoolId pool_id);
|
||||||
|
|
||||||
/// Return an allocated memory block back to a specific memory pool.
|
/// Return an allocated memory block back to a specific memory pool.
|
||||||
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
/// \param[in] pool_id memory pool ID obtain referenced with \ref osPoolCreate.
|
||||||
/// \param[in] block address of the allocated memory block that is returned to the memory pool.
|
/// \param[in] block address of the allocated memory block that is returned to the memory pool.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osPoolFree shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osPoolFree(osPoolId pool_id, void *block);
|
osStatus osPoolFree (osPoolId pool_id, void *block);
|
||||||
|
|
||||||
#endif // Memory Pool Management available
|
#endif // Memory Pool Management available
|
||||||
|
|
||||||
|
|
||||||
// ==== Message Queue Management Functions ====
|
// ==== Message Queue Management Functions ====
|
||||||
|
|
||||||
#if (defined(osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available
|
#if (defined (osFeature_MessageQ) && (osFeature_MessageQ != 0)) // Message Queues available
|
||||||
|
|
||||||
/// \brief Create a Message Queue Definition.
|
/// \brief Create a Message Queue Definition.
|
||||||
/// \param name name of the queue.
|
/// \param name name of the queue.
|
||||||
@@ -759,15 +802,22 @@ osStatus osPoolFree(osPoolId pool_id, void *block);
|
|||||||
/// \param type data type of a single message element (for debugger).
|
/// \param type data type of a single message element (for debugger).
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osMessageQDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osMessageQDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osMessageQDef(name, queue_sz, type) extern const osMessageQDef_t os_messageQ_def_##name
|
#define osMessageQDef(name, queue_sz, type) \
|
||||||
|
extern const osMessageQDef_t os_messageQ_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define osMessageQDef(name, queue_sz, type) const osMessageQDef_t os_messageQ_def_##name = {(queue_sz), sizeof(type), NULL, NULL}
|
#define osMessageQDef(name, queue_sz, type) \
|
||||||
|
const osMessageQDef_t os_messageQ_def_##name = \
|
||||||
|
{ (queue_sz), sizeof (type), NULL, NULL }
|
||||||
|
|
||||||
#define osMessageQStaticDef(name, queue_sz, type, buffer, control) const osMessageQDef_t os_messageQ_def_##name = {(queue_sz), sizeof(type), (buffer), (control)}
|
#define osMessageQStaticDef(name, queue_sz, type, buffer, control) \
|
||||||
#else // configSUPPORT_STATIC_ALLOCATION == 1
|
const osMessageQDef_t os_messageQ_def_##name = \
|
||||||
#define osMessageQDef(name, queue_sz, type) const osMessageQDef_t os_messageQ_def_##name = {(queue_sz), sizeof(type)}
|
{ (queue_sz), sizeof (type) , (buffer), (control)}
|
||||||
|
#else //configSUPPORT_STATIC_ALLOCATION == 1
|
||||||
|
#define osMessageQDef(name, queue_sz, type) \
|
||||||
|
const osMessageQDef_t os_messageQ_def_##name = \
|
||||||
|
{ (queue_sz), sizeof (type) }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -776,14 +826,15 @@ osStatus osPoolFree(osPoolId pool_id, void *block);
|
|||||||
/// \param name name of the queue
|
/// \param name name of the queue
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osMessageQ shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osMessageQ shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osMessageQ(name) &os_messageQ_def_##name
|
#define osMessageQ(name) \
|
||||||
|
&os_messageQ_def_##name
|
||||||
|
|
||||||
/// Create and Initialize a Message Queue.
|
/// Create and Initialize a Message Queue.
|
||||||
/// \param[in] queue_def queue definition referenced with \ref osMessageQ.
|
/// \param[in] queue_def queue definition referenced with \ref osMessageQ.
|
||||||
/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
|
/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
|
||||||
/// \return message queue ID for reference by other functions or NULL in case of error.
|
/// \return message queue ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMessageCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osMessageQId osMessageCreate(const osMessageQDef_t *queue_def, osThreadId thread_id);
|
osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id);
|
||||||
|
|
||||||
/// Put a Message to a Queue.
|
/// Put a Message to a Queue.
|
||||||
/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
|
/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
@@ -791,20 +842,21 @@ osMessageQId osMessageCreate(const osMessageQDef_t *queue_def, osThreadId thread
|
|||||||
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMessagePut shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osMessagePut(osMessageQId queue_id, uint32_t info, uint32_t millisec);
|
osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec);
|
||||||
|
|
||||||
/// Get a Message or Wait for a Message from a Queue.
|
/// Get a Message or Wait for a Message from a Queue.
|
||||||
/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
|
/// \param[in] queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
/// \param[in] millisec timeout value or 0 in case of no time-out.
|
||||||
/// \return event information that includes status code.
|
/// \return event information that includes status code.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMessageGet shall be consistent in every CMSIS-RTOS.
|
||||||
osEvent osMessageGet(osMessageQId queue_id, uint32_t millisec);
|
osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
#endif // Message Queues available
|
#endif // Message Queues available
|
||||||
|
|
||||||
|
|
||||||
// ==== Mail Queue Management Functions ====
|
// ==== Mail Queue Management Functions ====
|
||||||
|
|
||||||
#if (defined(osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available
|
#if (defined (osFeature_MailQ) && (osFeature_MailQ != 0)) // Mail Queues available
|
||||||
|
|
||||||
/// \brief Create a Mail Queue Definition.
|
/// \brief Create a Mail Queue Definition.
|
||||||
/// \param name name of the queue
|
/// \param name name of the queue
|
||||||
@@ -812,200 +864,204 @@ osEvent osMessageGet(osMessageQId queue_id, uint32_t millisec);
|
|||||||
/// \param type data type of a single message element
|
/// \param type data type of a single message element
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osMailQDef shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osMailQDef shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#if defined(osObjectsExternal) // object is external
|
#if defined (osObjectsExternal) // object is external
|
||||||
#define osMailQDef(name, queue_sz, type) extern struct os_mailQ_cb *os_mailQ_cb_##name extern osMailQDef_t os_mailQ_def_##name
|
#define osMailQDef(name, queue_sz, type) \
|
||||||
|
extern struct os_mailQ_cb *os_mailQ_cb_##name \
|
||||||
|
extern osMailQDef_t os_mailQ_def_##name
|
||||||
#else // define the object
|
#else // define the object
|
||||||
#define osMailQDef(name, queue_sz, type) \
|
#define osMailQDef(name, queue_sz, type) \
|
||||||
struct os_mailQ_cb *os_mailQ_cb_##name; \
|
struct os_mailQ_cb *os_mailQ_cb_##name; \
|
||||||
const osMailQDef_t os_mailQ_def_##name = {(queue_sz), sizeof(type), (&os_mailQ_cb_##name)}
|
const osMailQDef_t os_mailQ_def_##name = \
|
||||||
|
{ (queue_sz), sizeof (type), (&os_mailQ_cb_##name) }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// \brief Access a Mail Queue Definition.
|
/// \brief Access a Mail Queue Definition.
|
||||||
/// \param name name of the queue
|
/// \param name name of the queue
|
||||||
/// \note CAN BE CHANGED: The parameter to \b osMailQ shall be consistent but the
|
/// \note CAN BE CHANGED: The parameter to \b osMailQ shall be consistent but the
|
||||||
/// macro body is implementation specific in every CMSIS-RTOS.
|
/// macro body is implementation specific in every CMSIS-RTOS.
|
||||||
#define osMailQ(name) &os_mailQ_def_##name
|
#define osMailQ(name) \
|
||||||
|
&os_mailQ_def_##name
|
||||||
|
|
||||||
/// Create and Initialize mail queue.
|
/// Create and Initialize mail queue.
|
||||||
/// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ
|
/// \param[in] queue_def reference to the mail queue definition obtain with \ref osMailQ
|
||||||
/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
|
/// \param[in] thread_id thread ID (obtained by \ref osThreadCreate or \ref osThreadGetId) or NULL.
|
||||||
/// \return mail queue ID for reference by other functions or NULL in case of error.
|
/// \return mail queue ID for reference by other functions or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMailCreate shall be consistent in every CMSIS-RTOS.
|
||||||
osMailQId osMailCreate(const osMailQDef_t *queue_def, osThreadId thread_id);
|
osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id);
|
||||||
|
|
||||||
/// Allocate a memory block from a mail.
|
/// Allocate a memory block from a mail.
|
||||||
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out
|
/// \param[in] millisec timeout value or 0 in case of no time-out
|
||||||
/// \return pointer to memory block that can be filled with mail or NULL in case of error.
|
/// \return pointer to memory block that can be filled with mail or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMailAlloc shall be consistent in every CMSIS-RTOS.
|
||||||
void *osMailAlloc(osMailQId queue_id, uint32_t millisec);
|
void *osMailAlloc (osMailQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
/// Allocate a memory block from a mail and set memory block to zero.
|
/// Allocate a memory block from a mail and set memory block to zero.
|
||||||
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out
|
/// \param[in] millisec timeout value or 0 in case of no time-out
|
||||||
/// \return pointer to memory block that can be filled with mail or NULL in case of error.
|
/// \return pointer to memory block that can be filled with mail or NULL in case of error.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMailCAlloc shall be consistent in every CMSIS-RTOS.
|
||||||
void *osMailCAlloc(osMailQId queue_id, uint32_t millisec);
|
void *osMailCAlloc (osMailQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
/// Put a mail to a queue.
|
/// Put a mail to a queue.
|
||||||
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
/// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc.
|
/// \param[in] mail memory block previously allocated with \ref osMailAlloc or \ref osMailCAlloc.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMailPut shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osMailPut(osMailQId queue_id, void *mail);
|
osStatus osMailPut (osMailQId queue_id, void *mail);
|
||||||
|
|
||||||
/// Get a mail from a queue.
|
/// Get a mail from a queue.
|
||||||
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
/// \param[in] millisec timeout value or 0 in case of no time-out
|
/// \param[in] millisec timeout value or 0 in case of no time-out
|
||||||
/// \return event that contains mail information or error code.
|
/// \return event that contains mail information or error code.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMailGet shall be consistent in every CMSIS-RTOS.
|
||||||
osEvent osMailGet(osMailQId queue_id, uint32_t millisec);
|
osEvent osMailGet (osMailQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
/// Free a memory block from a mail.
|
/// Free a memory block from a mail.
|
||||||
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
/// \param[in] queue_id mail queue ID obtained with \ref osMailCreate.
|
||||||
/// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet.
|
/// \param[in] mail pointer to the memory block that was obtained with \ref osMailGet.
|
||||||
/// \return status code that indicates the execution status of the function.
|
/// \return status code that indicates the execution status of the function.
|
||||||
/// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS.
|
/// \note MUST REMAIN UNCHANGED: \b osMailFree shall be consistent in every CMSIS-RTOS.
|
||||||
osStatus osMailFree(osMailQId queue_id, void *mail);
|
osStatus osMailFree (osMailQId queue_id, void *mail);
|
||||||
|
|
||||||
#endif // Mail Queues available
|
#endif // Mail Queues available
|
||||||
|
|
||||||
/*************************** Additional specific APIs to Free RTOS ************/
|
/*************************** Additional specific APIs to Free RTOS ************/
|
||||||
/**
|
/**
|
||||||
* @brief Handles the tick increment
|
* @brief Handles the tick increment
|
||||||
* @param none.
|
* @param none.
|
||||||
* @retval none.
|
* @retval none.
|
||||||
*/
|
*/
|
||||||
void osSystickHandler(void);
|
void osSystickHandler(void);
|
||||||
|
|
||||||
#if (INCLUDE_eTaskGetState == 1)
|
#if ( INCLUDE_eTaskGetState == 1 )
|
||||||
/**
|
/**
|
||||||
* @brief Obtain the state of any thread.
|
* @brief Obtain the state of any thread.
|
||||||
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
* @retval the stae of the thread, states are encoded by the osThreadState enumerated type.
|
* @retval the stae of the thread, states are encoded by the osThreadState enumerated type.
|
||||||
*/
|
*/
|
||||||
osThreadState osThreadGetState(osThreadId thread_id);
|
osThreadState osThreadGetState(osThreadId thread_id);
|
||||||
#endif /* INCLUDE_eTaskGetState */
|
#endif /* INCLUDE_eTaskGetState */
|
||||||
|
|
||||||
#if (INCLUDE_eTaskGetState == 1)
|
#if ( INCLUDE_eTaskGetState == 1 )
|
||||||
/**
|
/**
|
||||||
* @brief Check if a thread is already suspended or not.
|
* @brief Check if a thread is already suspended or not.
|
||||||
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
osStatus osThreadIsSuspended(osThreadId thread_id);
|
osStatus osThreadIsSuspended(osThreadId thread_id);
|
||||||
|
|
||||||
#endif /* INCLUDE_eTaskGetState */
|
#endif /* INCLUDE_eTaskGetState */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Suspend execution of a thread.
|
* @brief Suspend execution of a thread.
|
||||||
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osThreadSuspend(osThreadId thread_id);
|
osStatus osThreadSuspend (osThreadId thread_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Resume execution of a suspended thread.
|
* @brief Resume execution of a suspended thread.
|
||||||
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osThreadResume(osThreadId thread_id);
|
osStatus osThreadResume (osThreadId thread_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Suspend execution of a all active threads.
|
* @brief Suspend execution of a all active threads.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osThreadSuspendAll(void);
|
osStatus osThreadSuspendAll (void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Resume execution of a all suspended threads.
|
* @brief Resume execution of a all suspended threads.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osThreadResumeAll(void);
|
osStatus osThreadResumeAll (void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Delay a task until a specified time
|
* @brief Delay a task until a specified time
|
||||||
* @param PreviousWakeTime Pointer to a variable that holds the time at which the
|
* @param PreviousWakeTime Pointer to a variable that holds the time at which the
|
||||||
* task was last unblocked. PreviousWakeTime must be initialised with the current time
|
* task was last unblocked. PreviousWakeTime must be initialised with the current time
|
||||||
* prior to its first use (PreviousWakeTime = osKernelSysTick() )
|
* prior to its first use (PreviousWakeTime = osKernelSysTick() )
|
||||||
* @param millisec time delay value
|
* @param millisec time delay value
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osDelayUntil(uint32_t *PreviousWakeTime, uint32_t millisec);
|
osStatus osDelayUntil (uint32_t *PreviousWakeTime, uint32_t millisec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Abort the delay for a specific thread
|
* @brief Abort the delay for a specific thread
|
||||||
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId
|
* @param thread_id thread ID obtained by \ref osThreadCreate or \ref osThreadGetId
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osAbortDelay(osThreadId thread_id);
|
osStatus osAbortDelay(osThreadId thread_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Lists all the current threads, along with their current state
|
* @brief Lists all the current threads, along with their current state
|
||||||
* and stack usage high water mark.
|
* and stack usage high water mark.
|
||||||
* @param buffer A buffer into which the above mentioned details
|
* @param buffer A buffer into which the above mentioned details
|
||||||
* will be written
|
* will be written
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osThreadList(uint8_t *buffer);
|
osStatus osThreadList (uint8_t *buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Receive an item from a queue without removing the item from the queue.
|
* @brief Receive an item from a queue without removing the item from the queue.
|
||||||
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
* @param millisec timeout value or 0 in case of no time-out.
|
* @param millisec timeout value or 0 in case of no time-out.
|
||||||
* @retval event information that includes status code.
|
* @retval event information that includes status code.
|
||||||
*/
|
*/
|
||||||
osEvent osMessagePeek(osMessageQId queue_id, uint32_t millisec);
|
osEvent osMessagePeek (osMessageQId queue_id, uint32_t millisec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the number of messaged stored in a queue.
|
* @brief Get the number of messaged stored in a queue.
|
||||||
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
* @retval number of messages stored in a queue.
|
* @retval number of messages stored in a queue.
|
||||||
*/
|
*/
|
||||||
uint32_t osMessageWaiting(osMessageQId queue_id);
|
uint32_t osMessageWaiting(osMessageQId queue_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the available space in a message queue.
|
* @brief Get the available space in a message queue.
|
||||||
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
* @retval available space in a message queue.
|
* @retval available space in a message queue.
|
||||||
*/
|
*/
|
||||||
uint32_t osMessageAvailableSpace(osMessageQId queue_id);
|
uint32_t osMessageAvailableSpace(osMessageQId queue_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Delete a Message Queue
|
* @brief Delete a Message Queue
|
||||||
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
* @param queue_id message queue ID obtained with \ref osMessageCreate.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osMessageDelete(osMessageQId queue_id);
|
osStatus osMessageDelete (osMessageQId queue_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Create and Initialize a Recursive Mutex
|
* @brief Create and Initialize a Recursive Mutex
|
||||||
* @param mutex_def mutex definition referenced with \ref osMutex.
|
* @param mutex_def mutex definition referenced with \ref osMutex.
|
||||||
* @retval mutex ID for reference by other functions or NULL in case of error..
|
* @retval mutex ID for reference by other functions or NULL in case of error..
|
||||||
*/
|
*/
|
||||||
osMutexId osRecursiveMutexCreate(const osMutexDef_t *mutex_def);
|
osMutexId osRecursiveMutexCreate (const osMutexDef_t *mutex_def);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Release a Recursive Mutex
|
* @brief Release a Recursive Mutex
|
||||||
* @param mutex_id mutex ID obtained by \ref osRecursiveMutexCreate.
|
* @param mutex_id mutex ID obtained by \ref osRecursiveMutexCreate.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osRecursiveMutexRelease(osMutexId mutex_id);
|
osStatus osRecursiveMutexRelease (osMutexId mutex_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Release a Recursive Mutex
|
* @brief Release a Recursive Mutex
|
||||||
* @param mutex_id mutex ID obtained by \ref osRecursiveMutexCreate.
|
* @param mutex_id mutex ID obtained by \ref osRecursiveMutexCreate.
|
||||||
* @param millisec timeout value or 0 in case of no time-out.
|
* @param millisec timeout value or 0 in case of no time-out.
|
||||||
* @retval status code that indicates the execution status of the function.
|
* @retval status code that indicates the execution status of the function.
|
||||||
*/
|
*/
|
||||||
osStatus osRecursiveMutexWait(osMutexId mutex_id, uint32_t millisec);
|
osStatus osRecursiveMutexWait (osMutexId mutex_id, uint32_t millisec);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the current count value of a counting semaphore
|
* @brief Returns the current count value of a counting semaphore
|
||||||
* @param semaphore_id semaphore_id ID obtained by \ref osSemaphoreCreate.
|
* @param semaphore_id semaphore_id ID obtained by \ref osSemaphoreCreate.
|
||||||
* @retval count value
|
* @retval count value
|
||||||
*/
|
*/
|
||||||
uint32_t osSemaphoreGetCount(osSemaphoreId semaphore_id);
|
uint32_t osSemaphoreGetCount(osSemaphoreId semaphore_id);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -25,29 +25,29 @@
|
|||||||
* 1 tab == 4 spaces!
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "croutine.h"
|
|
||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
#include "croutine.h"
|
||||||
|
|
||||||
/* Remove the whole file is co-routines are not being used. */
|
/* Remove the whole file is co-routines are not being used. */
|
||||||
#if (configUSE_CO_ROUTINES != 0)
|
#if( configUSE_CO_ROUTINES != 0 )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some kernel aware debuggers require data to be viewed to be global, rather
|
* Some kernel aware debuggers require data to be viewed to be global, rather
|
||||||
* than file scope.
|
* than file scope.
|
||||||
*/
|
*/
|
||||||
#ifdef portREMOVE_STATIC_QUALIFIER
|
#ifdef portREMOVE_STATIC_QUALIFIER
|
||||||
#define static
|
#define static
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Lists for ready and blocked co-routines. --------------------*/
|
/* Lists for ready and blocked co-routines. --------------------*/
|
||||||
static List_t pxReadyCoRoutineLists[configMAX_CO_ROUTINE_PRIORITIES]; /*< Prioritised ready co-routines. */
|
static List_t pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /*< Prioritised ready co-routines. */
|
||||||
static List_t xDelayedCoRoutineList1; /*< Delayed co-routines. */
|
static List_t xDelayedCoRoutineList1; /*< Delayed co-routines. */
|
||||||
static List_t xDelayedCoRoutineList2; /*< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */
|
static List_t xDelayedCoRoutineList2; /*< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */
|
||||||
static List_t *pxDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used. */
|
static List_t * pxDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used. */
|
||||||
static List_t *pxOverflowDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */
|
static List_t * pxOverflowDelayedCoRoutineList; /*< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */
|
||||||
static List_t xPendingReadyCoRoutineList; /*< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by
|
static List_t xPendingReadyCoRoutineList; /*< Holds co-routines that have been readied by an external event. They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */
|
||||||
interrupts. */
|
|
||||||
|
|
||||||
/* Other file private variables. --------------------------------*/
|
/* Other file private variables. --------------------------------*/
|
||||||
CRCB_t * pxCurrentCoRoutine = NULL;
|
CRCB_t * pxCurrentCoRoutine = NULL;
|
||||||
@@ -55,7 +55,7 @@ static UBaseType_t uxTopCoRoutineReadyPriority = 0;
|
|||||||
static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0;
|
static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0;
|
||||||
|
|
||||||
/* The initial state of the co-routine when it is created. */
|
/* The initial state of the co-routine when it is created. */
|
||||||
#define corINITIAL_STATE (0)
|
#define corINITIAL_STATE ( 0 )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Place the co-routine represented by pxCRCB into the appropriate ready queue
|
* Place the co-routine represented by pxCRCB into the appropriate ready queue
|
||||||
@@ -64,19 +64,20 @@ static TickType_t xCoRoutineTickCount = 0, xLastTickCount = 0, xPassedTicks = 0
|
|||||||
* This macro accesses the co-routine ready lists and therefore must not be
|
* This macro accesses the co-routine ready lists and therefore must not be
|
||||||
* used from within an ISR.
|
* used from within an ISR.
|
||||||
*/
|
*/
|
||||||
#define prvAddCoRoutineToReadyQueue(pxCRCB) \
|
#define prvAddCoRoutineToReadyQueue( pxCRCB ) \
|
||||||
|
{ \
|
||||||
|
if( pxCRCB->uxPriority > uxTopCoRoutineReadyPriority ) \
|
||||||
{ \
|
{ \
|
||||||
if (pxCRCB->uxPriority > uxTopCoRoutineReadyPriority) { \
|
|
||||||
uxTopCoRoutineReadyPriority = pxCRCB->uxPriority; \
|
uxTopCoRoutineReadyPriority = pxCRCB->uxPriority; \
|
||||||
} \
|
} \
|
||||||
vListInsertEnd((List_t *)&(pxReadyCoRoutineLists[pxCRCB->uxPriority]), &(pxCRCB->xGenericListItem)); \
|
vListInsertEnd( ( List_t * ) &( pxReadyCoRoutineLists[ pxCRCB->uxPriority ] ), &( pxCRCB->xGenericListItem ) ); \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Utility to ready all the lists used by the scheduler. This is called
|
* Utility to ready all the lists used by the scheduler. This is called
|
||||||
* automatically upon the creation of the first co-routine.
|
* automatically upon the creation of the first co-routine.
|
||||||
*/
|
*/
|
||||||
static void prvInitialiseCoRoutineLists(void);
|
static void prvInitialiseCoRoutineLists( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Co-routines that are readied by an interrupt cannot be placed directly into
|
* Co-routines that are readied by an interrupt cannot be placed directly into
|
||||||
@@ -84,7 +85,7 @@ static void prvInitialiseCoRoutineLists(void);
|
|||||||
* in the pending ready list in order that they can later be moved to the ready
|
* in the pending ready list in order that they can later be moved to the ready
|
||||||
* list by the co-routine scheduler.
|
* list by the co-routine scheduler.
|
||||||
*/
|
*/
|
||||||
static void prvCheckPendingReadyList(void);
|
static void prvCheckPendingReadyList( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Macro that looks at the list of co-routines that are currently delayed to
|
* Macro that looks at the list of co-routines that are currently delayed to
|
||||||
@@ -94,26 +95,30 @@ static void prvCheckPendingReadyList(void);
|
|||||||
* meaning once one co-routine has been found whose timer has not expired
|
* meaning once one co-routine has been found whose timer has not expired
|
||||||
* we need not look any further down the list.
|
* we need not look any further down the list.
|
||||||
*/
|
*/
|
||||||
static void prvCheckDelayedList(void);
|
static void prvCheckDelayedList( void );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex) {
|
BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPriority, UBaseType_t uxIndex )
|
||||||
BaseType_t xReturn;
|
{
|
||||||
CRCB_t * pxCoRoutine;
|
BaseType_t xReturn;
|
||||||
|
CRCB_t *pxCoRoutine;
|
||||||
|
|
||||||
/* Allocate the memory that will store the co-routine control block. */
|
/* Allocate the memory that will store the co-routine control block. */
|
||||||
pxCoRoutine = (CRCB_t *)pvPortMalloc(sizeof(CRCB_t));
|
pxCoRoutine = ( CRCB_t * ) pvPortMalloc( sizeof( CRCB_t ) );
|
||||||
if (pxCoRoutine) {
|
if( pxCoRoutine )
|
||||||
|
{
|
||||||
/* If pxCurrentCoRoutine is NULL then this is the first co-routine to
|
/* If pxCurrentCoRoutine is NULL then this is the first co-routine to
|
||||||
be created and the co-routine data structures need initialising. */
|
be created and the co-routine data structures need initialising. */
|
||||||
if (pxCurrentCoRoutine == NULL) {
|
if( pxCurrentCoRoutine == NULL )
|
||||||
|
{
|
||||||
pxCurrentCoRoutine = pxCoRoutine;
|
pxCurrentCoRoutine = pxCoRoutine;
|
||||||
prvInitialiseCoRoutineLists();
|
prvInitialiseCoRoutineLists();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check the priority is within limits. */
|
/* Check the priority is within limits. */
|
||||||
if (uxPriority >= configMAX_CO_ROUTINE_PRIORITIES) {
|
if( uxPriority >= configMAX_CO_ROUTINE_PRIORITIES )
|
||||||
|
{
|
||||||
uxPriority = configMAX_CO_ROUTINE_PRIORITIES - 1;
|
uxPriority = configMAX_CO_ROUTINE_PRIORITIES - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,24 +129,26 @@ BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPrio
|
|||||||
pxCoRoutine->pxCoRoutineFunction = pxCoRoutineCode;
|
pxCoRoutine->pxCoRoutineFunction = pxCoRoutineCode;
|
||||||
|
|
||||||
/* Initialise all the other co-routine control block parameters. */
|
/* Initialise all the other co-routine control block parameters. */
|
||||||
vListInitialiseItem(&(pxCoRoutine->xGenericListItem));
|
vListInitialiseItem( &( pxCoRoutine->xGenericListItem ) );
|
||||||
vListInitialiseItem(&(pxCoRoutine->xEventListItem));
|
vListInitialiseItem( &( pxCoRoutine->xEventListItem ) );
|
||||||
|
|
||||||
/* Set the co-routine control block as a link back from the ListItem_t.
|
/* Set the co-routine control block as a link back from the ListItem_t.
|
||||||
This is so we can get back to the containing CRCB from a generic item
|
This is so we can get back to the containing CRCB from a generic item
|
||||||
in a list. */
|
in a list. */
|
||||||
listSET_LIST_ITEM_OWNER(&(pxCoRoutine->xGenericListItem), pxCoRoutine);
|
listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xGenericListItem ), pxCoRoutine );
|
||||||
listSET_LIST_ITEM_OWNER(&(pxCoRoutine->xEventListItem), pxCoRoutine);
|
listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xEventListItem ), pxCoRoutine );
|
||||||
|
|
||||||
/* Event lists are always in priority order. */
|
/* Event lists are always in priority order. */
|
||||||
listSET_LIST_ITEM_VALUE(&(pxCoRoutine->xEventListItem), ((TickType_t)configMAX_CO_ROUTINE_PRIORITIES - (TickType_t)uxPriority));
|
listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), ( ( TickType_t ) configMAX_CO_ROUTINE_PRIORITIES - ( TickType_t ) uxPriority ) );
|
||||||
|
|
||||||
/* Now the co-routine has been initialised it can be added to the ready
|
/* Now the co-routine has been initialised it can be added to the ready
|
||||||
list at the correct priority. */
|
list at the correct priority. */
|
||||||
prvAddCoRoutineToReadyQueue(pxCoRoutine);
|
prvAddCoRoutineToReadyQueue( pxCoRoutine );
|
||||||
|
|
||||||
xReturn = pdPASS;
|
xReturn = pdPASS;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
|
xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,8 +156,9 @@ BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPrio
|
|||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vCoRoutineAddToDelayedList(TickType_t xTicksToDelay, List_t *pxEventList) {
|
void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay, List_t *pxEventList )
|
||||||
TickType_t xTimeToWake;
|
{
|
||||||
|
TickType_t xTimeToWake;
|
||||||
|
|
||||||
/* Calculate the time to wake - this may overflow but this is
|
/* Calculate the time to wake - this may overflow but this is
|
||||||
not a problem. */
|
not a problem. */
|
||||||
@@ -159,61 +167,70 @@ void vCoRoutineAddToDelayedList(TickType_t xTicksToDelay, List_t *pxEventList) {
|
|||||||
/* We must remove ourselves from the ready list before adding
|
/* We must remove ourselves from the ready list before adding
|
||||||
ourselves to the blocked list as the same list item is used for
|
ourselves to the blocked list as the same list item is used for
|
||||||
both lists. */
|
both lists. */
|
||||||
(void)uxListRemove((ListItem_t *)&(pxCurrentCoRoutine->xGenericListItem));
|
( void ) uxListRemove( ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) );
|
||||||
|
|
||||||
/* The list item will be inserted in wake time order. */
|
/* The list item will be inserted in wake time order. */
|
||||||
listSET_LIST_ITEM_VALUE(&(pxCurrentCoRoutine->xGenericListItem), xTimeToWake);
|
listSET_LIST_ITEM_VALUE( &( pxCurrentCoRoutine->xGenericListItem ), xTimeToWake );
|
||||||
|
|
||||||
if (xTimeToWake < xCoRoutineTickCount) {
|
if( xTimeToWake < xCoRoutineTickCount )
|
||||||
|
{
|
||||||
/* Wake time has overflowed. Place this item in the
|
/* Wake time has overflowed. Place this item in the
|
||||||
overflow list. */
|
overflow list. */
|
||||||
vListInsert((List_t *)pxOverflowDelayedCoRoutineList, (ListItem_t *)&(pxCurrentCoRoutine->xGenericListItem));
|
vListInsert( ( List_t * ) pxOverflowDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) );
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* The wake time has not overflowed, so we can use the
|
/* The wake time has not overflowed, so we can use the
|
||||||
current block list. */
|
current block list. */
|
||||||
vListInsert((List_t *)pxDelayedCoRoutineList, (ListItem_t *)&(pxCurrentCoRoutine->xGenericListItem));
|
vListInsert( ( List_t * ) pxDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pxEventList) {
|
if( pxEventList )
|
||||||
|
{
|
||||||
/* Also add the co-routine to an event list. If this is done then the
|
/* Also add the co-routine to an event list. If this is done then the
|
||||||
function must be called with interrupts disabled. */
|
function must be called with interrupts disabled. */
|
||||||
vListInsert(pxEventList, &(pxCurrentCoRoutine->xEventListItem));
|
vListInsert( pxEventList, &( pxCurrentCoRoutine->xEventListItem ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvCheckPendingReadyList(void) {
|
static void prvCheckPendingReadyList( void )
|
||||||
|
{
|
||||||
/* Are there any co-routines waiting to get moved to the ready list? These
|
/* Are there any co-routines waiting to get moved to the ready list? These
|
||||||
are co-routines that have been readied by an ISR. The ISR cannot access
|
are co-routines that have been readied by an ISR. The ISR cannot access
|
||||||
the ready lists itself. */
|
the ready lists itself. */
|
||||||
while (listLIST_IS_EMPTY(&xPendingReadyCoRoutineList) == pdFALSE) {
|
while( listLIST_IS_EMPTY( &xPendingReadyCoRoutineList ) == pdFALSE )
|
||||||
|
{
|
||||||
CRCB_t *pxUnblockedCRCB;
|
CRCB_t *pxUnblockedCRCB;
|
||||||
|
|
||||||
/* The pending ready list can be accessed by an ISR. */
|
/* The pending ready list can be accessed by an ISR. */
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
{
|
{
|
||||||
pxUnblockedCRCB = (CRCB_t *)listGET_OWNER_OF_HEAD_ENTRY((&xPendingReadyCoRoutineList));
|
pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( (&xPendingReadyCoRoutineList) );
|
||||||
(void)uxListRemove(&(pxUnblockedCRCB->xEventListItem));
|
( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) );
|
||||||
}
|
}
|
||||||
portENABLE_INTERRUPTS();
|
portENABLE_INTERRUPTS();
|
||||||
|
|
||||||
(void)uxListRemove(&(pxUnblockedCRCB->xGenericListItem));
|
( void ) uxListRemove( &( pxUnblockedCRCB->xGenericListItem ) );
|
||||||
prvAddCoRoutineToReadyQueue(pxUnblockedCRCB);
|
prvAddCoRoutineToReadyQueue( pxUnblockedCRCB );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvCheckDelayedList(void) {
|
static void prvCheckDelayedList( void )
|
||||||
CRCB_t *pxCRCB;
|
{
|
||||||
|
CRCB_t *pxCRCB;
|
||||||
|
|
||||||
xPassedTicks = xTaskGetTickCount() - xLastTickCount;
|
xPassedTicks = xTaskGetTickCount() - xLastTickCount;
|
||||||
while (xPassedTicks) {
|
while( xPassedTicks )
|
||||||
|
{
|
||||||
xCoRoutineTickCount++;
|
xCoRoutineTickCount++;
|
||||||
xPassedTicks--;
|
xPassedTicks--;
|
||||||
|
|
||||||
/* If the tick count has overflowed we need to swap the ready lists. */
|
/* If the tick count has overflowed we need to swap the ready lists. */
|
||||||
if (xCoRoutineTickCount == 0) {
|
if( xCoRoutineTickCount == 0 )
|
||||||
List_t *pxTemp;
|
{
|
||||||
|
List_t * pxTemp;
|
||||||
|
|
||||||
/* Tick count has overflowed so we need to swap the delay lists. If there are
|
/* Tick count has overflowed so we need to swap the delay lists. If there are
|
||||||
any items in pxDelayedCoRoutineList here then there is an error! */
|
any items in pxDelayedCoRoutineList here then there is an error! */
|
||||||
@@ -223,10 +240,12 @@ static void prvCheckDelayedList(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* See if this tick has made a timeout expire. */
|
/* See if this tick has made a timeout expire. */
|
||||||
while (listLIST_IS_EMPTY(pxDelayedCoRoutineList) == pdFALSE) {
|
while( listLIST_IS_EMPTY( pxDelayedCoRoutineList ) == pdFALSE )
|
||||||
pxCRCB = (CRCB_t *)listGET_OWNER_OF_HEAD_ENTRY(pxDelayedCoRoutineList);
|
{
|
||||||
|
pxCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedCoRoutineList );
|
||||||
|
|
||||||
if (xCoRoutineTickCount < listGET_LIST_ITEM_VALUE(&(pxCRCB->xGenericListItem))) {
|
if( xCoRoutineTickCount < listGET_LIST_ITEM_VALUE( &( pxCRCB->xGenericListItem ) ) )
|
||||||
|
{
|
||||||
/* Timeout not yet expired. */
|
/* Timeout not yet expired. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -238,16 +257,17 @@ static void prvCheckDelayedList(void) {
|
|||||||
have been moved to the pending ready list and the following
|
have been moved to the pending ready list and the following
|
||||||
line is still valid. Also the pvContainer parameter will have
|
line is still valid. Also the pvContainer parameter will have
|
||||||
been set to NULL so the following lines are also valid. */
|
been set to NULL so the following lines are also valid. */
|
||||||
(void)uxListRemove(&(pxCRCB->xGenericListItem));
|
( void ) uxListRemove( &( pxCRCB->xGenericListItem ) );
|
||||||
|
|
||||||
/* Is the co-routine waiting on an event also? */
|
/* Is the co-routine waiting on an event also? */
|
||||||
if (pxCRCB->xEventListItem.pxContainer) {
|
if( pxCRCB->xEventListItem.pxContainer )
|
||||||
(void)uxListRemove(&(pxCRCB->xEventListItem));
|
{
|
||||||
|
( void ) uxListRemove( &( pxCRCB->xEventListItem ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
portENABLE_INTERRUPTS();
|
portENABLE_INTERRUPTS();
|
||||||
|
|
||||||
prvAddCoRoutineToReadyQueue(pxCRCB);
|
prvAddCoRoutineToReadyQueue( pxCRCB );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,7 +275,8 @@ static void prvCheckDelayedList(void) {
|
|||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vCoRoutineSchedule(void) {
|
void vCoRoutineSchedule( void )
|
||||||
|
{
|
||||||
/* See if any co-routines readied by events need moving to the ready lists. */
|
/* See if any co-routines readied by events need moving to the ready lists. */
|
||||||
prvCheckPendingReadyList();
|
prvCheckPendingReadyList();
|
||||||
|
|
||||||
@@ -263,8 +284,10 @@ void vCoRoutineSchedule(void) {
|
|||||||
prvCheckDelayedList();
|
prvCheckDelayedList();
|
||||||
|
|
||||||
/* Find the highest priority queue that contains ready co-routines. */
|
/* Find the highest priority queue that contains ready co-routines. */
|
||||||
while (listLIST_IS_EMPTY(&(pxReadyCoRoutineLists[uxTopCoRoutineReadyPriority]))) {
|
while( listLIST_IS_EMPTY( &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ) )
|
||||||
if (uxTopCoRoutineReadyPriority == 0) {
|
{
|
||||||
|
if( uxTopCoRoutineReadyPriority == 0 )
|
||||||
|
{
|
||||||
/* No more co-routines to check. */
|
/* No more co-routines to check. */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -273,25 +296,27 @@ void vCoRoutineSchedule(void) {
|
|||||||
|
|
||||||
/* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the co-routines
|
/* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the co-routines
|
||||||
of the same priority get an equal share of the processor time. */
|
of the same priority get an equal share of the processor time. */
|
||||||
listGET_OWNER_OF_NEXT_ENTRY(pxCurrentCoRoutine, &(pxReadyCoRoutineLists[uxTopCoRoutineReadyPriority]));
|
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentCoRoutine, &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) );
|
||||||
|
|
||||||
/* Call the co-routine. */
|
/* Call the co-routine. */
|
||||||
(pxCurrentCoRoutine->pxCoRoutineFunction)(pxCurrentCoRoutine, pxCurrentCoRoutine->uxIndex);
|
( pxCurrentCoRoutine->pxCoRoutineFunction )( pxCurrentCoRoutine, pxCurrentCoRoutine->uxIndex );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvInitialiseCoRoutineLists(void) {
|
static void prvInitialiseCoRoutineLists( void )
|
||||||
UBaseType_t uxPriority;
|
{
|
||||||
|
UBaseType_t uxPriority;
|
||||||
|
|
||||||
for (uxPriority = 0; uxPriority < configMAX_CO_ROUTINE_PRIORITIES; uxPriority++) {
|
for( uxPriority = 0; uxPriority < configMAX_CO_ROUTINE_PRIORITIES; uxPriority++ )
|
||||||
vListInitialise((List_t *)&(pxReadyCoRoutineLists[uxPriority]));
|
{
|
||||||
|
vListInitialise( ( List_t * ) &( pxReadyCoRoutineLists[ uxPriority ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
vListInitialise((List_t *)&xDelayedCoRoutineList1);
|
vListInitialise( ( List_t * ) &xDelayedCoRoutineList1 );
|
||||||
vListInitialise((List_t *)&xDelayedCoRoutineList2);
|
vListInitialise( ( List_t * ) &xDelayedCoRoutineList2 );
|
||||||
vListInitialise((List_t *)&xPendingReadyCoRoutineList);
|
vListInitialise( ( List_t * ) &xPendingReadyCoRoutineList );
|
||||||
|
|
||||||
/* Start with pxDelayedCoRoutineList using list1 and the
|
/* Start with pxDelayedCoRoutineList using list1 and the
|
||||||
pxOverflowDelayedCoRoutineList using list2. */
|
pxOverflowDelayedCoRoutineList using list2. */
|
||||||
@@ -300,20 +325,24 @@ static void prvInitialiseCoRoutineLists(void) {
|
|||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
BaseType_t xCoRoutineRemoveFromEventList(const List_t *pxEventList) {
|
BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList )
|
||||||
CRCB_t * pxUnblockedCRCB;
|
{
|
||||||
BaseType_t xReturn;
|
CRCB_t *pxUnblockedCRCB;
|
||||||
|
BaseType_t xReturn;
|
||||||
|
|
||||||
/* This function is called from within an interrupt. It can only access
|
/* This function is called from within an interrupt. It can only access
|
||||||
event lists and the pending ready list. This function assumes that a
|
event lists and the pending ready list. This function assumes that a
|
||||||
check has already been made to ensure pxEventList is not empty. */
|
check has already been made to ensure pxEventList is not empty. */
|
||||||
pxUnblockedCRCB = (CRCB_t *)listGET_OWNER_OF_HEAD_ENTRY(pxEventList);
|
pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList );
|
||||||
(void)uxListRemove(&(pxUnblockedCRCB->xEventListItem));
|
( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) );
|
||||||
vListInsertEnd((List_t *)&(xPendingReadyCoRoutineList), &(pxUnblockedCRCB->xEventListItem));
|
vListInsertEnd( ( List_t * ) &( xPendingReadyCoRoutineList ), &( pxUnblockedCRCB->xEventListItem ) );
|
||||||
|
|
||||||
if (pxUnblockedCRCB->uxPriority >= pxCurrentCoRoutine->uxPriority) {
|
if( pxUnblockedCRCB->uxPriority >= pxCurrentCoRoutine->uxPriority )
|
||||||
|
{
|
||||||
xReturn = pdTRUE;
|
xReturn = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
xReturn = pdFALSE;
|
xReturn = pdFALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,3 +350,4 @@ BaseType_t xCoRoutineRemoveFromEventList(const List_t *pxEventList) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configUSE_CO_ROUTINES == 0 */
|
#endif /* configUSE_CO_ROUTINES == 0 */
|
||||||
|
|
||||||
|
|||||||
@@ -35,9 +35,9 @@ task.h is included from an application file. */
|
|||||||
|
|
||||||
/* FreeRTOS includes. */
|
/* FreeRTOS includes. */
|
||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "event_groups.h"
|
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
|
#include "event_groups.h"
|
||||||
|
|
||||||
/* Lint e961, e750 and e9021 are suppressed as a MISRA exception justified
|
/* Lint e961, e750 and e9021 are suppressed as a MISRA exception justified
|
||||||
because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined
|
because the MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined
|
||||||
@@ -49,28 +49,29 @@ correct privileged Vs unprivileged linkage and placement. */
|
|||||||
item value. It is important they don't clash with the
|
item value. It is important they don't clash with the
|
||||||
taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */
|
taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */
|
||||||
#if configUSE_16_BIT_TICKS == 1
|
#if configUSE_16_BIT_TICKS == 1
|
||||||
#define eventCLEAR_EVENTS_ON_EXIT_BIT 0x0100U
|
#define eventCLEAR_EVENTS_ON_EXIT_BIT 0x0100U
|
||||||
#define eventUNBLOCKED_DUE_TO_BIT_SET 0x0200U
|
#define eventUNBLOCKED_DUE_TO_BIT_SET 0x0200U
|
||||||
#define eventWAIT_FOR_ALL_BITS 0x0400U
|
#define eventWAIT_FOR_ALL_BITS 0x0400U
|
||||||
#define eventEVENT_BITS_CONTROL_BYTES 0xff00U
|
#define eventEVENT_BITS_CONTROL_BYTES 0xff00U
|
||||||
#else
|
#else
|
||||||
#define eventCLEAR_EVENTS_ON_EXIT_BIT 0x01000000UL
|
#define eventCLEAR_EVENTS_ON_EXIT_BIT 0x01000000UL
|
||||||
#define eventUNBLOCKED_DUE_TO_BIT_SET 0x02000000UL
|
#define eventUNBLOCKED_DUE_TO_BIT_SET 0x02000000UL
|
||||||
#define eventWAIT_FOR_ALL_BITS 0x04000000UL
|
#define eventWAIT_FOR_ALL_BITS 0x04000000UL
|
||||||
#define eventEVENT_BITS_CONTROL_BYTES 0xff000000UL
|
#define eventEVENT_BITS_CONTROL_BYTES 0xff000000UL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct EventGroupDef_t {
|
typedef struct EventGroupDef_t
|
||||||
|
{
|
||||||
EventBits_t uxEventBits;
|
EventBits_t uxEventBits;
|
||||||
List_t xTasksWaitingForBits; /*< List of tasks waiting for a bit to be set. */
|
List_t xTasksWaitingForBits; /*< List of tasks waiting for a bit to be set. */
|
||||||
|
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
UBaseType_t uxEventGroupNumber;
|
UBaseType_t uxEventGroupNumber;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ((configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1))
|
#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
|
||||||
uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the event group is statically allocated to ensure no attempt is made to free the memory. */
|
uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the event group is statically allocated to ensure no attempt is made to free the memory. */
|
||||||
#endif
|
#endif
|
||||||
} EventGroup_t;
|
} EventGroup_t;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
@@ -83,47 +84,50 @@ typedef struct EventGroupDef_t {
|
|||||||
* wait condition is met if any of the bits set in uxBitsToWait for are also set
|
* wait condition is met if any of the bits set in uxBitsToWait for are also set
|
||||||
* in uxCurrentEventBits.
|
* in uxCurrentEventBits.
|
||||||
*/
|
*/
|
||||||
static BaseType_t prvTestWaitCondition(const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits) PRIVILEGED_FUNCTION;
|
static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
|
|
||||||
EventGroupHandle_t xEventGroupCreateStatic(StaticEventGroup_t *pxEventGroupBuffer) {
|
EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer )
|
||||||
|
{
|
||||||
EventGroup_t *pxEventBits;
|
EventGroup_t *pxEventBits;
|
||||||
|
|
||||||
/* A StaticEventGroup_t object must be provided. */
|
/* A StaticEventGroup_t object must be provided. */
|
||||||
configASSERT(pxEventGroupBuffer);
|
configASSERT( pxEventGroupBuffer );
|
||||||
|
|
||||||
#if (configASSERT_DEFINED == 1)
|
#if( configASSERT_DEFINED == 1 )
|
||||||
{
|
{
|
||||||
/* Sanity check that the size of the structure used to declare a
|
/* Sanity check that the size of the structure used to declare a
|
||||||
variable of type StaticEventGroup_t equals the size of the real
|
variable of type StaticEventGroup_t equals the size of the real
|
||||||
event group structure. */
|
event group structure. */
|
||||||
volatile size_t xSize = sizeof(StaticEventGroup_t);
|
volatile size_t xSize = sizeof( StaticEventGroup_t );
|
||||||
configASSERT(xSize == sizeof(EventGroup_t));
|
configASSERT( xSize == sizeof( EventGroup_t ) );
|
||||||
} /*lint !e529 xSize is referenced if configASSERT() is defined. */
|
} /*lint !e529 xSize is referenced if configASSERT() is defined. */
|
||||||
#endif /* configASSERT_DEFINED */
|
#endif /* configASSERT_DEFINED */
|
||||||
|
|
||||||
/* The user has provided a statically allocated event group - use it. */
|
/* The user has provided a statically allocated event group - use it. */
|
||||||
pxEventBits = (EventGroup_t *)pxEventGroupBuffer; /*lint !e740 !e9087 EventGroup_t and StaticEventGroup_t are deliberately aliased for data hiding purposes and guaranteed to have the same size and
|
pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer; /*lint !e740 !e9087 EventGroup_t and StaticEventGroup_t are deliberately aliased for data hiding purposes and guaranteed to have the same size and alignment requirement - checked by configASSERT(). */
|
||||||
alignment requirement - checked by configASSERT(). */
|
|
||||||
|
|
||||||
if (pxEventBits != NULL) {
|
if( pxEventBits != NULL )
|
||||||
|
{
|
||||||
pxEventBits->uxEventBits = 0;
|
pxEventBits->uxEventBits = 0;
|
||||||
vListInitialise(&(pxEventBits->xTasksWaitingForBits));
|
vListInitialise( &( pxEventBits->xTasksWaitingForBits ) );
|
||||||
|
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
{
|
{
|
||||||
/* Both static and dynamic allocation can be used, so note that
|
/* Both static and dynamic allocation can be used, so note that
|
||||||
this event group was created statically in case the event group
|
this event group was created statically in case the event group
|
||||||
is later deleted. */
|
is later deleted. */
|
||||||
pxEventBits->ucStaticallyAllocated = pdTRUE;
|
pxEventBits->ucStaticallyAllocated = pdTRUE;
|
||||||
}
|
}
|
||||||
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
||||||
|
|
||||||
traceEVENT_GROUP_CREATE(pxEventBits);
|
traceEVENT_GROUP_CREATE( pxEventBits );
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* xEventGroupCreateStatic should only ever be called with
|
/* xEventGroupCreateStatic should only ever be called with
|
||||||
pxEventGroupBuffer pointing to a pre-allocated (compile time
|
pxEventGroupBuffer pointing to a pre-allocated (compile time
|
||||||
allocated) StaticEventGroup_t variable. */
|
allocated) StaticEventGroup_t variable. */
|
||||||
@@ -131,14 +135,15 @@ EventGroupHandle_t xEventGroupCreateStatic(StaticEventGroup_t *pxEventGroupBuffe
|
|||||||
}
|
}
|
||||||
|
|
||||||
return pxEventBits;
|
return pxEventBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
|
|
||||||
EventGroupHandle_t xEventGroupCreate(void) {
|
EventGroupHandle_t xEventGroupCreate( void )
|
||||||
|
{
|
||||||
EventGroup_t *pxEventBits;
|
EventGroup_t *pxEventBits;
|
||||||
|
|
||||||
/* Allocate the event group. Justification for MISRA deviation as
|
/* Allocate the event group. Justification for MISRA deviation as
|
||||||
@@ -154,74 +159,86 @@ EventGroupHandle_t xEventGroupCreate(void) {
|
|||||||
sizeof( TickType_t ), the TickType_t variables will be accessed in two
|
sizeof( TickType_t ), the TickType_t variables will be accessed in two
|
||||||
or more reads operations, and the alignment requirements is only that
|
or more reads operations, and the alignment requirements is only that
|
||||||
of each individual read. */
|
of each individual read. */
|
||||||
pxEventBits = (EventGroup_t *)pvPortMalloc(sizeof(EventGroup_t)); /*lint !e9087 !e9079 see comment above. */
|
pxEventBits = ( EventGroup_t * ) pvPortMalloc( sizeof( EventGroup_t ) ); /*lint !e9087 !e9079 see comment above. */
|
||||||
|
|
||||||
if (pxEventBits != NULL) {
|
if( pxEventBits != NULL )
|
||||||
|
{
|
||||||
pxEventBits->uxEventBits = 0;
|
pxEventBits->uxEventBits = 0;
|
||||||
vListInitialise(&(pxEventBits->xTasksWaitingForBits));
|
vListInitialise( &( pxEventBits->xTasksWaitingForBits ) );
|
||||||
|
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
{
|
{
|
||||||
/* Both static and dynamic allocation can be used, so note this
|
/* Both static and dynamic allocation can be used, so note this
|
||||||
event group was allocated statically in case the event group is
|
event group was allocated statically in case the event group is
|
||||||
later deleted. */
|
later deleted. */
|
||||||
pxEventBits->ucStaticallyAllocated = pdFALSE;
|
pxEventBits->ucStaticallyAllocated = pdFALSE;
|
||||||
}
|
}
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
traceEVENT_GROUP_CREATE(pxEventBits);
|
traceEVENT_GROUP_CREATE( pxEventBits );
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
traceEVENT_GROUP_CREATE_FAILED(); /*lint !e9063 Else branch only exists to allow tracing and does not generate code if trace macros are not defined. */
|
traceEVENT_GROUP_CREATE_FAILED(); /*lint !e9063 Else branch only exists to allow tracing and does not generate code if trace macros are not defined. */
|
||||||
}
|
}
|
||||||
|
|
||||||
return pxEventBits;
|
return pxEventBits;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait) {
|
EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait )
|
||||||
EventBits_t uxOriginalBitValue, uxReturn;
|
{
|
||||||
EventGroup_t *pxEventBits = xEventGroup;
|
EventBits_t uxOriginalBitValue, uxReturn;
|
||||||
BaseType_t xAlreadyYielded;
|
EventGroup_t *pxEventBits = xEventGroup;
|
||||||
BaseType_t xTimeoutOccurred = pdFALSE;
|
BaseType_t xAlreadyYielded;
|
||||||
|
BaseType_t xTimeoutOccurred = pdFALSE;
|
||||||
|
|
||||||
configASSERT((uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES) == 0);
|
configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
|
||||||
configASSERT(uxBitsToWaitFor != 0);
|
configASSERT( uxBitsToWaitFor != 0 );
|
||||||
#if ((INCLUDE_xTaskGetSchedulerState == 1) || (configUSE_TIMERS == 1))
|
#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
|
||||||
{ configASSERT(!((xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED) && (xTicksToWait != 0))); }
|
{
|
||||||
#endif
|
configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
vTaskSuspendAll();
|
vTaskSuspendAll();
|
||||||
{
|
{
|
||||||
uxOriginalBitValue = pxEventBits->uxEventBits;
|
uxOriginalBitValue = pxEventBits->uxEventBits;
|
||||||
|
|
||||||
(void)xEventGroupSetBits(xEventGroup, uxBitsToSet);
|
( void ) xEventGroupSetBits( xEventGroup, uxBitsToSet );
|
||||||
|
|
||||||
if (((uxOriginalBitValue | uxBitsToSet) & uxBitsToWaitFor) == uxBitsToWaitFor) {
|
if( ( ( uxOriginalBitValue | uxBitsToSet ) & uxBitsToWaitFor ) == uxBitsToWaitFor )
|
||||||
|
{
|
||||||
/* All the rendezvous bits are now set - no need to block. */
|
/* All the rendezvous bits are now set - no need to block. */
|
||||||
uxReturn = (uxOriginalBitValue | uxBitsToSet);
|
uxReturn = ( uxOriginalBitValue | uxBitsToSet );
|
||||||
|
|
||||||
/* Rendezvous always clear the bits. They will have been cleared
|
/* Rendezvous always clear the bits. They will have been cleared
|
||||||
already unless this is the only task in the rendezvous. */
|
already unless this is the only task in the rendezvous. */
|
||||||
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
||||||
|
|
||||||
xTicksToWait = 0;
|
xTicksToWait = 0;
|
||||||
} else {
|
}
|
||||||
if (xTicksToWait != (TickType_t)0) {
|
else
|
||||||
traceEVENT_GROUP_SYNC_BLOCK(xEventGroup, uxBitsToSet, uxBitsToWaitFor);
|
{
|
||||||
|
if( xTicksToWait != ( TickType_t ) 0 )
|
||||||
|
{
|
||||||
|
traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor );
|
||||||
|
|
||||||
/* Store the bits that the calling task is waiting for in the
|
/* Store the bits that the calling task is waiting for in the
|
||||||
task's event list item so the kernel knows when a match is
|
task's event list item so the kernel knows when a match is
|
||||||
found. Then enter the blocked state. */
|
found. Then enter the blocked state. */
|
||||||
vTaskPlaceOnUnorderedEventList(&(pxEventBits->xTasksWaitingForBits), (uxBitsToWaitFor | eventCLEAR_EVENTS_ON_EXIT_BIT | eventWAIT_FOR_ALL_BITS), xTicksToWait);
|
vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | eventCLEAR_EVENTS_ON_EXIT_BIT | eventWAIT_FOR_ALL_BITS ), xTicksToWait );
|
||||||
|
|
||||||
/* This assignment is obsolete as uxReturn will get set after
|
/* This assignment is obsolete as uxReturn will get set after
|
||||||
the task unblocks, but some compilers mistakenly generate a
|
the task unblocks, but some compilers mistakenly generate a
|
||||||
warning about uxReturn being returned without being set if the
|
warning about uxReturn being returned without being set if the
|
||||||
assignment is omitted. */
|
assignment is omitted. */
|
||||||
uxReturn = 0;
|
uxReturn = 0;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* The rendezvous bits were not set, but no block time was
|
/* The rendezvous bits were not set, but no block time was
|
||||||
specified - just return the current event bit value. */
|
specified - just return the current event bit value. */
|
||||||
uxReturn = pxEventBits->uxEventBits;
|
uxReturn = pxEventBits->uxEventBits;
|
||||||
@@ -231,10 +248,14 @@ EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t ux
|
|||||||
}
|
}
|
||||||
xAlreadyYielded = xTaskResumeAll();
|
xAlreadyYielded = xTaskResumeAll();
|
||||||
|
|
||||||
if (xTicksToWait != (TickType_t)0) {
|
if( xTicksToWait != ( TickType_t ) 0 )
|
||||||
if (xAlreadyYielded == pdFALSE) {
|
{
|
||||||
|
if( xAlreadyYielded == pdFALSE )
|
||||||
|
{
|
||||||
portYIELD_WITHIN_API();
|
portYIELD_WITHIN_API();
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,7 +265,8 @@ EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t ux
|
|||||||
event list item, and they should now be retrieved then cleared. */
|
event list item, and they should now be retrieved then cleared. */
|
||||||
uxReturn = uxTaskResetEventItemValue();
|
uxReturn = uxTaskResetEventItemValue();
|
||||||
|
|
||||||
if ((uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET) == (EventBits_t)0) {
|
if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 )
|
||||||
|
{
|
||||||
/* The task timed out, just return the current event bit value. */
|
/* The task timed out, just return the current event bit value. */
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
@@ -254,16 +276,21 @@ EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t ux
|
|||||||
bits it was waiting for were set, it is possible that since it
|
bits it was waiting for were set, it is possible that since it
|
||||||
unblocked another task has set the bits. If this is the case
|
unblocked another task has set the bits. If this is the case
|
||||||
then it needs to clear the bits before exiting. */
|
then it needs to clear the bits before exiting. */
|
||||||
if ((uxReturn & uxBitsToWaitFor) == uxBitsToWaitFor) {
|
if( ( uxReturn & uxBitsToWaitFor ) == uxBitsToWaitFor )
|
||||||
|
{
|
||||||
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
taskEXIT_CRITICAL();
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
xTimeoutOccurred = pdTRUE;
|
xTimeoutOccurred = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* The task unblocked because the bits were set. */
|
/* The task unblocked because the bits were set. */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,90 +299,111 @@ EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t ux
|
|||||||
uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;
|
uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;
|
||||||
}
|
}
|
||||||
|
|
||||||
traceEVENT_GROUP_SYNC_END(xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred);
|
traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred );
|
||||||
|
|
||||||
/* Prevent compiler warnings when trace macros are not used. */
|
/* Prevent compiler warnings when trace macros are not used. */
|
||||||
(void)xTimeoutOccurred;
|
( void ) xTimeoutOccurred;
|
||||||
|
|
||||||
return uxReturn;
|
return uxReturn;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait) {
|
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait )
|
||||||
EventGroup_t *pxEventBits = xEventGroup;
|
{
|
||||||
EventBits_t uxReturn, uxControlBits = 0;
|
EventGroup_t *pxEventBits = xEventGroup;
|
||||||
BaseType_t xWaitConditionMet, xAlreadyYielded;
|
EventBits_t uxReturn, uxControlBits = 0;
|
||||||
BaseType_t xTimeoutOccurred = pdFALSE;
|
BaseType_t xWaitConditionMet, xAlreadyYielded;
|
||||||
|
BaseType_t xTimeoutOccurred = pdFALSE;
|
||||||
|
|
||||||
/* Check the user is not attempting to wait on the bits used by the kernel
|
/* Check the user is not attempting to wait on the bits used by the kernel
|
||||||
itself, and that at least one bit is being requested. */
|
itself, and that at least one bit is being requested. */
|
||||||
configASSERT(xEventGroup);
|
configASSERT( xEventGroup );
|
||||||
configASSERT((uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES) == 0);
|
configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
|
||||||
configASSERT(uxBitsToWaitFor != 0);
|
configASSERT( uxBitsToWaitFor != 0 );
|
||||||
#if ((INCLUDE_xTaskGetSchedulerState == 1) || (configUSE_TIMERS == 1))
|
#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
|
||||||
{ configASSERT(!((xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED) && (xTicksToWait != 0))); }
|
{
|
||||||
#endif
|
configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
vTaskSuspendAll();
|
vTaskSuspendAll();
|
||||||
{
|
{
|
||||||
const EventBits_t uxCurrentEventBits = pxEventBits->uxEventBits;
|
const EventBits_t uxCurrentEventBits = pxEventBits->uxEventBits;
|
||||||
|
|
||||||
/* Check to see if the wait condition is already met or not. */
|
/* Check to see if the wait condition is already met or not. */
|
||||||
xWaitConditionMet = prvTestWaitCondition(uxCurrentEventBits, uxBitsToWaitFor, xWaitForAllBits);
|
xWaitConditionMet = prvTestWaitCondition( uxCurrentEventBits, uxBitsToWaitFor, xWaitForAllBits );
|
||||||
|
|
||||||
if (xWaitConditionMet != pdFALSE) {
|
if( xWaitConditionMet != pdFALSE )
|
||||||
|
{
|
||||||
/* The wait condition has already been met so there is no need to
|
/* The wait condition has already been met so there is no need to
|
||||||
block. */
|
block. */
|
||||||
uxReturn = uxCurrentEventBits;
|
uxReturn = uxCurrentEventBits;
|
||||||
xTicksToWait = (TickType_t)0;
|
xTicksToWait = ( TickType_t ) 0;
|
||||||
|
|
||||||
/* Clear the wait bits if requested to do so. */
|
/* Clear the wait bits if requested to do so. */
|
||||||
if (xClearOnExit != pdFALSE) {
|
if( xClearOnExit != pdFALSE )
|
||||||
|
{
|
||||||
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
} else if (xTicksToWait == (TickType_t)0) {
|
}
|
||||||
|
else if( xTicksToWait == ( TickType_t ) 0 )
|
||||||
|
{
|
||||||
/* The wait condition has not been met, but no block time was
|
/* The wait condition has not been met, but no block time was
|
||||||
specified, so just return the current value. */
|
specified, so just return the current value. */
|
||||||
uxReturn = uxCurrentEventBits;
|
uxReturn = uxCurrentEventBits;
|
||||||
xTimeoutOccurred = pdTRUE;
|
xTimeoutOccurred = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* The task is going to block to wait for its required bits to be
|
/* The task is going to block to wait for its required bits to be
|
||||||
set. uxControlBits are used to remember the specified behaviour of
|
set. uxControlBits are used to remember the specified behaviour of
|
||||||
this call to xEventGroupWaitBits() - for use when the event bits
|
this call to xEventGroupWaitBits() - for use when the event bits
|
||||||
unblock the task. */
|
unblock the task. */
|
||||||
if (xClearOnExit != pdFALSE) {
|
if( xClearOnExit != pdFALSE )
|
||||||
|
{
|
||||||
uxControlBits |= eventCLEAR_EVENTS_ON_EXIT_BIT;
|
uxControlBits |= eventCLEAR_EVENTS_ON_EXIT_BIT;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xWaitForAllBits != pdFALSE) {
|
if( xWaitForAllBits != pdFALSE )
|
||||||
|
{
|
||||||
uxControlBits |= eventWAIT_FOR_ALL_BITS;
|
uxControlBits |= eventWAIT_FOR_ALL_BITS;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Store the bits that the calling task is waiting for in the
|
/* Store the bits that the calling task is waiting for in the
|
||||||
task's event list item so the kernel knows when a match is
|
task's event list item so the kernel knows when a match is
|
||||||
found. Then enter the blocked state. */
|
found. Then enter the blocked state. */
|
||||||
vTaskPlaceOnUnorderedEventList(&(pxEventBits->xTasksWaitingForBits), (uxBitsToWaitFor | uxControlBits), xTicksToWait);
|
vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xTicksToWait );
|
||||||
|
|
||||||
/* This is obsolete as it will get set after the task unblocks, but
|
/* This is obsolete as it will get set after the task unblocks, but
|
||||||
some compilers mistakenly generate a warning about the variable
|
some compilers mistakenly generate a warning about the variable
|
||||||
being returned without being set if it is not done. */
|
being returned without being set if it is not done. */
|
||||||
uxReturn = 0;
|
uxReturn = 0;
|
||||||
|
|
||||||
traceEVENT_GROUP_WAIT_BITS_BLOCK(xEventGroup, uxBitsToWaitFor);
|
traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xAlreadyYielded = xTaskResumeAll();
|
xAlreadyYielded = xTaskResumeAll();
|
||||||
|
|
||||||
if (xTicksToWait != (TickType_t)0) {
|
if( xTicksToWait != ( TickType_t ) 0 )
|
||||||
if (xAlreadyYielded == pdFALSE) {
|
{
|
||||||
|
if( xAlreadyYielded == pdFALSE )
|
||||||
|
{
|
||||||
portYIELD_WITHIN_API();
|
portYIELD_WITHIN_API();
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,7 +413,8 @@ EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup, const EventBits_
|
|||||||
event list item, and they should now be retrieved then cleared. */
|
event list item, and they should now be retrieved then cleared. */
|
||||||
uxReturn = uxTaskResetEventItemValue();
|
uxReturn = uxTaskResetEventItemValue();
|
||||||
|
|
||||||
if ((uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET) == (EventBits_t)0) {
|
if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 )
|
||||||
|
{
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
/* The task timed out, just return the current event bit value. */
|
/* The task timed out, just return the current event bit value. */
|
||||||
@@ -373,46 +422,55 @@ EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup, const EventBits_
|
|||||||
|
|
||||||
/* It is possible that the event bits were updated between this
|
/* It is possible that the event bits were updated between this
|
||||||
task leaving the Blocked state and running again. */
|
task leaving the Blocked state and running again. */
|
||||||
if (prvTestWaitCondition(uxReturn, uxBitsToWaitFor, xWaitForAllBits) != pdFALSE) {
|
if( prvTestWaitCondition( uxReturn, uxBitsToWaitFor, xWaitForAllBits ) != pdFALSE )
|
||||||
if (xClearOnExit != pdFALSE) {
|
{
|
||||||
|
if( xClearOnExit != pdFALSE )
|
||||||
|
{
|
||||||
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
xTimeoutOccurred = pdTRUE;
|
xTimeoutOccurred = pdTRUE;
|
||||||
}
|
}
|
||||||
taskEXIT_CRITICAL();
|
taskEXIT_CRITICAL();
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* The task unblocked because the bits were set. */
|
/* The task unblocked because the bits were set. */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The task blocked so control bits may have been set. */
|
/* The task blocked so control bits may have been set. */
|
||||||
uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;
|
uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;
|
||||||
}
|
}
|
||||||
traceEVENT_GROUP_WAIT_BITS_END(xEventGroup, uxBitsToWaitFor, xTimeoutOccurred);
|
traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred );
|
||||||
|
|
||||||
/* Prevent compiler warnings when trace macros are not used. */
|
/* Prevent compiler warnings when trace macros are not used. */
|
||||||
(void)xTimeoutOccurred;
|
( void ) xTimeoutOccurred;
|
||||||
|
|
||||||
return uxReturn;
|
return uxReturn;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear) {
|
EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear )
|
||||||
EventGroup_t *pxEventBits = xEventGroup;
|
{
|
||||||
EventBits_t uxReturn;
|
EventGroup_t *pxEventBits = xEventGroup;
|
||||||
|
EventBits_t uxReturn;
|
||||||
|
|
||||||
/* Check the user is not attempting to clear the bits used by the kernel
|
/* Check the user is not attempting to clear the bits used by the kernel
|
||||||
itself. */
|
itself. */
|
||||||
configASSERT(xEventGroup);
|
configASSERT( xEventGroup );
|
||||||
configASSERT((uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES) == 0);
|
configASSERT( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
|
||||||
|
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
traceEVENT_GROUP_CLEAR_BITS(xEventGroup, uxBitsToClear);
|
traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear );
|
||||||
|
|
||||||
/* The value returned is the event group value prior to the bits being
|
/* The value returned is the event group value prior to the bits being
|
||||||
cleared. */
|
cleared. */
|
||||||
@@ -427,87 +485,104 @@ EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup, const EventBits
|
|||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configUSE_TRACE_FACILITY == 1) && (INCLUDE_xTimerPendFunctionCall == 1) && (configUSE_TIMERS == 1))
|
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) )
|
||||||
|
|
||||||
BaseType_t xEventGroupClearBitsFromISR(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear) {
|
BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear )
|
||||||
|
{
|
||||||
BaseType_t xReturn;
|
BaseType_t xReturn;
|
||||||
|
|
||||||
traceEVENT_GROUP_CLEAR_BITS_FROM_ISR(xEventGroup, uxBitsToClear);
|
traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear );
|
||||||
xReturn = xTimerPendFunctionCallFromISR(vEventGroupClearBitsCallback, (void *)xEventGroup, (uint32_t)uxBitsToClear,
|
xReturn = xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL ); /*lint !e9087 Can't avoid cast to void* as a generic callback function not specific to this use case. Callback casts back to original type so safe. */
|
||||||
NULL); /*lint !e9087 Can't avoid cast to void* as a generic callback function not specific to this use case. Callback casts back to original type so safe. */
|
|
||||||
|
|
||||||
return xReturn;
|
return xReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup) {
|
EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup )
|
||||||
UBaseType_t uxSavedInterruptStatus;
|
{
|
||||||
EventGroup_t const *const pxEventBits = xEventGroup;
|
UBaseType_t uxSavedInterruptStatus;
|
||||||
EventBits_t uxReturn;
|
EventGroup_t const * const pxEventBits = xEventGroup;
|
||||||
|
EventBits_t uxReturn;
|
||||||
|
|
||||||
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
|
uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
|
||||||
{ uxReturn = pxEventBits->uxEventBits; }
|
{
|
||||||
portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedInterruptStatus);
|
uxReturn = pxEventBits->uxEventBits;
|
||||||
|
}
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
|
||||||
|
|
||||||
return uxReturn;
|
return uxReturn;
|
||||||
} /*lint !e818 EventGroupHandle_t is a typedef used in other functions to so can't be pointer to const. */
|
} /*lint !e818 EventGroupHandle_t is a typedef used in other functions to so can't be pointer to const. */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet) {
|
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet )
|
||||||
ListItem_t * pxListItem, *pxNext;
|
{
|
||||||
ListItem_t const *pxListEnd;
|
ListItem_t *pxListItem, *pxNext;
|
||||||
List_t const * pxList;
|
ListItem_t const *pxListEnd;
|
||||||
EventBits_t uxBitsToClear = 0, uxBitsWaitedFor, uxControlBits;
|
List_t const * pxList;
|
||||||
EventGroup_t * pxEventBits = xEventGroup;
|
EventBits_t uxBitsToClear = 0, uxBitsWaitedFor, uxControlBits;
|
||||||
BaseType_t xMatchFound = pdFALSE;
|
EventGroup_t *pxEventBits = xEventGroup;
|
||||||
|
BaseType_t xMatchFound = pdFALSE;
|
||||||
|
|
||||||
/* Check the user is not attempting to set the bits used by the kernel
|
/* Check the user is not attempting to set the bits used by the kernel
|
||||||
itself. */
|
itself. */
|
||||||
configASSERT(xEventGroup);
|
configASSERT( xEventGroup );
|
||||||
configASSERT((uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES) == 0);
|
configASSERT( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
|
||||||
|
|
||||||
pxList = &(pxEventBits->xTasksWaitingForBits);
|
pxList = &( pxEventBits->xTasksWaitingForBits );
|
||||||
pxListEnd = listGET_END_MARKER(pxList); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
pxListEnd = listGET_END_MARKER( pxList ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
||||||
vTaskSuspendAll();
|
vTaskSuspendAll();
|
||||||
{
|
{
|
||||||
traceEVENT_GROUP_SET_BITS(xEventGroup, uxBitsToSet);
|
traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet );
|
||||||
|
|
||||||
pxListItem = listGET_HEAD_ENTRY(pxList);
|
pxListItem = listGET_HEAD_ENTRY( pxList );
|
||||||
|
|
||||||
/* Set the bits. */
|
/* Set the bits. */
|
||||||
pxEventBits->uxEventBits |= uxBitsToSet;
|
pxEventBits->uxEventBits |= uxBitsToSet;
|
||||||
|
|
||||||
/* See if the new bit value should unblock any tasks. */
|
/* See if the new bit value should unblock any tasks. */
|
||||||
while (pxListItem != pxListEnd) {
|
while( pxListItem != pxListEnd )
|
||||||
pxNext = listGET_NEXT(pxListItem);
|
{
|
||||||
uxBitsWaitedFor = listGET_LIST_ITEM_VALUE(pxListItem);
|
pxNext = listGET_NEXT( pxListItem );
|
||||||
|
uxBitsWaitedFor = listGET_LIST_ITEM_VALUE( pxListItem );
|
||||||
xMatchFound = pdFALSE;
|
xMatchFound = pdFALSE;
|
||||||
|
|
||||||
/* Split the bits waited for from the control bits. */
|
/* Split the bits waited for from the control bits. */
|
||||||
uxControlBits = uxBitsWaitedFor & eventEVENT_BITS_CONTROL_BYTES;
|
uxControlBits = uxBitsWaitedFor & eventEVENT_BITS_CONTROL_BYTES;
|
||||||
uxBitsWaitedFor &= ~eventEVENT_BITS_CONTROL_BYTES;
|
uxBitsWaitedFor &= ~eventEVENT_BITS_CONTROL_BYTES;
|
||||||
|
|
||||||
if ((uxControlBits & eventWAIT_FOR_ALL_BITS) == (EventBits_t)0) {
|
if( ( uxControlBits & eventWAIT_FOR_ALL_BITS ) == ( EventBits_t ) 0 )
|
||||||
|
{
|
||||||
/* Just looking for single bit being set. */
|
/* Just looking for single bit being set. */
|
||||||
if ((uxBitsWaitedFor & pxEventBits->uxEventBits) != (EventBits_t)0) {
|
if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) != ( EventBits_t ) 0 )
|
||||||
|
{
|
||||||
xMatchFound = pdTRUE;
|
xMatchFound = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
} else if ((uxBitsWaitedFor & pxEventBits->uxEventBits) == uxBitsWaitedFor) {
|
}
|
||||||
|
else if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) == uxBitsWaitedFor )
|
||||||
|
{
|
||||||
/* All bits are set. */
|
/* All bits are set. */
|
||||||
xMatchFound = pdTRUE;
|
xMatchFound = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* Need all bits to be set, but not all the bits were set. */
|
/* Need all bits to be set, but not all the bits were set. */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xMatchFound != pdFALSE) {
|
if( xMatchFound != pdFALSE )
|
||||||
|
{
|
||||||
/* The bits match. Should the bits be cleared on exit? */
|
/* The bits match. Should the bits be cleared on exit? */
|
||||||
if ((uxControlBits & eventCLEAR_EVENTS_ON_EXIT_BIT) != (EventBits_t)0) {
|
if( ( uxControlBits & eventCLEAR_EVENTS_ON_EXIT_BIT ) != ( EventBits_t ) 0 )
|
||||||
|
{
|
||||||
uxBitsToClear |= uxBitsWaitedFor;
|
uxBitsToClear |= uxBitsWaitedFor;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -516,7 +591,7 @@ EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t
|
|||||||
eventUNBLOCKED_DUE_TO_BIT_SET bit is set so the task knows
|
eventUNBLOCKED_DUE_TO_BIT_SET bit is set so the task knows
|
||||||
that is was unblocked due to its required bits matching, rather
|
that is was unblocked due to its required bits matching, rather
|
||||||
than because it timed out. */
|
than because it timed out. */
|
||||||
vTaskRemoveFromUnorderedEventList(pxListItem, pxEventBits->uxEventBits | eventUNBLOCKED_DUE_TO_BIT_SET);
|
vTaskRemoveFromUnorderedEventList( pxListItem, pxEventBits->uxEventBits | eventUNBLOCKED_DUE_TO_BIT_SET );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move onto the next list item. Note pxListItem->pxNext is not
|
/* Move onto the next list item. Note pxListItem->pxNext is not
|
||||||
@@ -529,80 +604,97 @@ EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t
|
|||||||
bit was set in the control word. */
|
bit was set in the control word. */
|
||||||
pxEventBits->uxEventBits &= ~uxBitsToClear;
|
pxEventBits->uxEventBits &= ~uxBitsToClear;
|
||||||
}
|
}
|
||||||
(void)xTaskResumeAll();
|
( void ) xTaskResumeAll();
|
||||||
|
|
||||||
return pxEventBits->uxEventBits;
|
return pxEventBits->uxEventBits;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vEventGroupDelete(EventGroupHandle_t xEventGroup) {
|
void vEventGroupDelete( EventGroupHandle_t xEventGroup )
|
||||||
EventGroup_t *pxEventBits = xEventGroup;
|
{
|
||||||
const List_t *pxTasksWaitingForBits = &(pxEventBits->xTasksWaitingForBits);
|
EventGroup_t *pxEventBits = xEventGroup;
|
||||||
|
const List_t *pxTasksWaitingForBits = &( pxEventBits->xTasksWaitingForBits );
|
||||||
|
|
||||||
vTaskSuspendAll();
|
vTaskSuspendAll();
|
||||||
{
|
{
|
||||||
traceEVENT_GROUP_DELETE(xEventGroup);
|
traceEVENT_GROUP_DELETE( xEventGroup );
|
||||||
|
|
||||||
while (listCURRENT_LIST_LENGTH(pxTasksWaitingForBits) > (UBaseType_t)0) {
|
while( listCURRENT_LIST_LENGTH( pxTasksWaitingForBits ) > ( UBaseType_t ) 0 )
|
||||||
|
{
|
||||||
/* Unblock the task, returning 0 as the event list is being deleted
|
/* Unblock the task, returning 0 as the event list is being deleted
|
||||||
and cannot therefore have any bits set. */
|
and cannot therefore have any bits set. */
|
||||||
configASSERT(pxTasksWaitingForBits->xListEnd.pxNext != (const ListItem_t *)&(pxTasksWaitingForBits->xListEnd));
|
configASSERT( pxTasksWaitingForBits->xListEnd.pxNext != ( const ListItem_t * ) &( pxTasksWaitingForBits->xListEnd ) );
|
||||||
vTaskRemoveFromUnorderedEventList(pxTasksWaitingForBits->xListEnd.pxNext, eventUNBLOCKED_DUE_TO_BIT_SET);
|
vTaskRemoveFromUnorderedEventList( pxTasksWaitingForBits->xListEnd.pxNext, eventUNBLOCKED_DUE_TO_BIT_SET );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ((configSUPPORT_DYNAMIC_ALLOCATION == 1) && (configSUPPORT_STATIC_ALLOCATION == 0))
|
#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) )
|
||||||
{
|
{
|
||||||
/* The event group can only have been allocated dynamically - free
|
/* The event group can only have been allocated dynamically - free
|
||||||
it again. */
|
it again. */
|
||||||
vPortFree(pxEventBits);
|
vPortFree( pxEventBits );
|
||||||
}
|
}
|
||||||
#elif ((configSUPPORT_DYNAMIC_ALLOCATION == 1) && (configSUPPORT_STATIC_ALLOCATION == 1))
|
#elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||||
{
|
{
|
||||||
/* The event group could have been allocated statically or
|
/* The event group could have been allocated statically or
|
||||||
dynamically, so check before attempting to free the memory. */
|
dynamically, so check before attempting to free the memory. */
|
||||||
if (pxEventBits->ucStaticallyAllocated == (uint8_t)pdFALSE) {
|
if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE )
|
||||||
vPortFree(pxEventBits);
|
{
|
||||||
} else {
|
vPortFree( pxEventBits );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
#endif /* configSUPPORT_DYNAMIC_ALLOCATION */
|
||||||
}
|
}
|
||||||
(void)xTaskResumeAll();
|
( void ) xTaskResumeAll();
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* For internal use only - execute a 'set bits' command that was pended from
|
/* For internal use only - execute a 'set bits' command that was pended from
|
||||||
an interrupt. */
|
an interrupt. */
|
||||||
void vEventGroupSetBitsCallback(void *pvEventGroup, const uint32_t ulBitsToSet) {
|
void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet )
|
||||||
(void)xEventGroupSetBits(pvEventGroup, (EventBits_t)ulBitsToSet); /*lint !e9079 Can't avoid cast to void* as a generic timer callback prototype. Callback casts back to original type so safe. */
|
{
|
||||||
|
( void ) xEventGroupSetBits( pvEventGroup, ( EventBits_t ) ulBitsToSet ); /*lint !e9079 Can't avoid cast to void* as a generic timer callback prototype. Callback casts back to original type so safe. */
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* For internal use only - execute a 'clear bits' command that was pended from
|
/* For internal use only - execute a 'clear bits' command that was pended from
|
||||||
an interrupt. */
|
an interrupt. */
|
||||||
void vEventGroupClearBitsCallback(void *pvEventGroup, const uint32_t ulBitsToClear) {
|
void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear )
|
||||||
(void)xEventGroupClearBits(pvEventGroup, (EventBits_t)ulBitsToClear); /*lint !e9079 Can't avoid cast to void* as a generic timer callback prototype. Callback casts back to original type so safe. */
|
{
|
||||||
|
( void ) xEventGroupClearBits( pvEventGroup, ( EventBits_t ) ulBitsToClear ); /*lint !e9079 Can't avoid cast to void* as a generic timer callback prototype. Callback casts back to original type so safe. */
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static BaseType_t prvTestWaitCondition(const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits) {
|
static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits )
|
||||||
BaseType_t xWaitConditionMet = pdFALSE;
|
{
|
||||||
|
BaseType_t xWaitConditionMet = pdFALSE;
|
||||||
|
|
||||||
if (xWaitForAllBits == pdFALSE) {
|
if( xWaitForAllBits == pdFALSE )
|
||||||
|
{
|
||||||
/* Task only has to wait for one bit within uxBitsToWaitFor to be
|
/* Task only has to wait for one bit within uxBitsToWaitFor to be
|
||||||
set. Is one already set? */
|
set. Is one already set? */
|
||||||
if ((uxCurrentEventBits & uxBitsToWaitFor) != (EventBits_t)0) {
|
if( ( uxCurrentEventBits & uxBitsToWaitFor ) != ( EventBits_t ) 0 )
|
||||||
|
{
|
||||||
xWaitConditionMet = pdTRUE;
|
xWaitConditionMet = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* Task has to wait for all the bits in uxBitsToWaitFor to be set.
|
/* Task has to wait for all the bits in uxBitsToWaitFor to be set.
|
||||||
Are they set already? */
|
Are they set already? */
|
||||||
if ((uxCurrentEventBits & uxBitsToWaitFor) == uxBitsToWaitFor) {
|
if( ( uxCurrentEventBits & uxBitsToWaitFor ) == uxBitsToWaitFor )
|
||||||
|
{
|
||||||
xWaitConditionMet = pdTRUE;
|
xWaitConditionMet = pdTRUE;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -611,47 +703,51 @@ static BaseType_t prvTestWaitCondition(const EventBits_t uxCurrentEventBits, con
|
|||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configUSE_TRACE_FACILITY == 1) && (INCLUDE_xTimerPendFunctionCall == 1) && (configUSE_TIMERS == 1))
|
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) )
|
||||||
|
|
||||||
BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken) {
|
BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken )
|
||||||
|
{
|
||||||
BaseType_t xReturn;
|
BaseType_t xReturn;
|
||||||
|
|
||||||
traceEVENT_GROUP_SET_BITS_FROM_ISR(xEventGroup, uxBitsToSet);
|
traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet );
|
||||||
xReturn = xTimerPendFunctionCallFromISR(
|
xReturn = xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken ); /*lint !e9087 Can't avoid cast to void* as a generic callback function not specific to this use case. Callback casts back to original type so safe. */
|
||||||
vEventGroupSetBitsCallback, (void *)xEventGroup, (uint32_t)uxBitsToSet,
|
|
||||||
pxHigherPriorityTaskWoken); /*lint !e9087 Can't avoid cast to void* as a generic callback function not specific to this use case. Callback casts back to original type so safe. */
|
|
||||||
|
|
||||||
return xReturn;
|
return xReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if (configUSE_TRACE_FACILITY == 1)
|
||||||
|
|
||||||
UBaseType_t uxEventGroupGetNumber(void *xEventGroup) {
|
UBaseType_t uxEventGroupGetNumber( void* xEventGroup )
|
||||||
|
{
|
||||||
UBaseType_t xReturn;
|
UBaseType_t xReturn;
|
||||||
EventGroup_t const *pxEventBits
|
EventGroup_t const *pxEventBits = ( EventGroup_t * ) xEventGroup; /*lint !e9087 !e9079 EventGroupHandle_t is a pointer to an EventGroup_t, but EventGroupHandle_t is kept opaque outside of this file for data hiding purposes. */
|
||||||
= (EventGroup_t *)xEventGroup; /*lint !e9087 !e9079 EventGroupHandle_t is a pointer to an EventGroup_t, but EventGroupHandle_t is kept opaque outside of this file for data hiding purposes. */
|
|
||||||
|
|
||||||
if (xEventGroup == NULL) {
|
if( xEventGroup == NULL )
|
||||||
|
{
|
||||||
xReturn = 0;
|
xReturn = 0;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
xReturn = pxEventBits->uxEventGroupNumber;
|
xReturn = pxEventBits->uxEventGroupNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
return xReturn;
|
return xReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configUSE_TRACE_FACILITY */
|
#endif /* configUSE_TRACE_FACILITY */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if ( configUSE_TRACE_FACILITY == 1 )
|
||||||
|
|
||||||
void vEventGroupSetNumber(void *xEventGroup, UBaseType_t uxEventGroupNumber) {
|
void vEventGroupSetNumber( void * xEventGroup, UBaseType_t uxEventGroupNumber )
|
||||||
((EventGroup_t *)xEventGroup)->uxEventGroupNumber
|
{
|
||||||
= uxEventGroupNumber; /*lint !e9087 !e9079 EventGroupHandle_t is a pointer to an EventGroup_t, but EventGroupHandle_t is kept opaque outside of this file for data hiding purposes. */
|
( ( EventGroup_t * ) xEventGroup )->uxEventGroupNumber = uxEventGroupNumber; /*lint !e9087 !e9079 EventGroupHandle_t is a pointer to an EventGroup_t, but EventGroupHandle_t is kept opaque outside of this file for data hiding purposes. */
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configUSE_TRACE_FACILITY */
|
#endif /* configUSE_TRACE_FACILITY */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -29,7 +29,7 @@
|
|||||||
#define STACK_MACROS_H
|
#define STACK_MACROS_H
|
||||||
|
|
||||||
#ifndef _MSC_VER /* Visual Studio doesn't support #warning. */
|
#ifndef _MSC_VER /* Visual Studio doesn't support #warning. */
|
||||||
#warning The name of this file has changed to stack_macros.h. Please update your code accordingly. This source file (which has the original name) will be removed in future released.
|
#warning The name of this file has changed to stack_macros.h. Please update your code accordingly. This source file (which has the original name) will be removed in future released.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -48,64 +48,74 @@
|
|||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW == 1) && (portSTACK_GROWTH < 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH < 0 ) )
|
||||||
|
|
||||||
/* Only the current stack state is to be checked. */
|
/* Only the current stack state is to be checked. */
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
/* Is the currently saved stack pointer within the stack limit? */ \
|
/* Is the currently saved stack pointer within the stack limit? */ \
|
||||||
if (pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack) { \
|
if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack ) \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW == 1) && (portSTACK_GROWTH > 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH > 0 ) )
|
||||||
|
|
||||||
/* Only the current stack state is to be checked. */
|
/* Only the current stack state is to be checked. */
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
\
|
\
|
||||||
/* Is the currently saved stack pointer within the stack limit? */ \
|
/* Is the currently saved stack pointer within the stack limit? */ \
|
||||||
if (pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack) { \
|
if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW > 1) && (portSTACK_GROWTH < 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )
|
||||||
|
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
const uint32_t *const pulStack = (uint32_t *)pxCurrentTCB->pxStack; \
|
const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \
|
||||||
const uint32_t ulCheckValue = (uint32_t)0xa5a5a5a5; \
|
const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5; \
|
||||||
\
|
\
|
||||||
if ((pulStack[0] != ulCheckValue) || (pulStack[1] != ulCheckValue) || (pulStack[2] != ulCheckValue) || (pulStack[3] != ulCheckValue)) { \
|
if( ( pulStack[ 0 ] != ulCheckValue ) || \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
( pulStack[ 1 ] != ulCheckValue ) || \
|
||||||
|
( pulStack[ 2 ] != ulCheckValue ) || \
|
||||||
|
( pulStack[ 3 ] != ulCheckValue ) ) \
|
||||||
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
|
#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW > 1) && (portSTACK_GROWTH > 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) )
|
||||||
|
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
int8_t * pcEndOfStack = (int8_t *)pxCurrentTCB->pxEndOfStack; \
|
int8_t *pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack; \
|
||||||
static const uint8_t ucExpectedStackBytes[] = {tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE}; \
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \
|
||||||
\
|
\
|
||||||
pcEndOfStack -= sizeof(ucExpectedStackBytes); \
|
\
|
||||||
|
pcEndOfStack -= sizeof( ucExpectedStackBytes ); \
|
||||||
\
|
\
|
||||||
/* Has the extremity of the task stack ever been written over? */ \
|
/* Has the extremity of the task stack ever been written over? */ \
|
||||||
if (memcmp((void *)pcEndOfStack, (void *)ucExpectedStackBytes, sizeof(ucExpectedStackBytes)) != 0) { \
|
if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +124,10 @@
|
|||||||
|
|
||||||
/* Remove stack overflow macro if not being used. */
|
/* Remove stack overflow macro if not being used. */
|
||||||
#ifndef taskCHECK_FOR_STACK_OVERFLOW
|
#ifndef taskCHECK_FOR_STACK_OVERFLOW
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW()
|
#define taskCHECK_FOR_STACK_OVERFLOW()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* STACK_MACROS_H */
|
#endif /* STACK_MACROS_H */
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
#define ATOMIC_H
|
#define ATOMIC_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h must appear in source files before include atomic.h"
|
#error "include FreeRTOS.h must appear in source files before include atomic.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Standard includes. */
|
/* Standard includes. */
|
||||||
@@ -56,18 +56,20 @@ extern "C" {
|
|||||||
* ATOMIC_ENTER_CRITICAL().
|
* 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. */
|
/* Nested interrupt scheme is supported in this port. */
|
||||||
#define ATOMIC_ENTER_CRITICAL() UBaseType_t uxCriticalSectionType = portSET_INTERRUPT_MASK_FROM_ISR()
|
#define ATOMIC_ENTER_CRITICAL() \
|
||||||
|
UBaseType_t uxCriticalSectionType = portSET_INTERRUPT_MASK_FROM_ISR()
|
||||||
|
|
||||||
#define ATOMIC_EXIT_CRITICAL() portCLEAR_INTERRUPT_MASK_FROM_ISR(uxCriticalSectionType)
|
#define ATOMIC_EXIT_CRITICAL() \
|
||||||
|
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxCriticalSectionType )
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* Nested interrupt scheme is NOT supported in this port. */
|
/* Nested interrupt scheme is NOT supported in this port. */
|
||||||
#define ATOMIC_ENTER_CRITICAL() portENTER_CRITICAL()
|
#define ATOMIC_ENTER_CRITICAL() portENTER_CRITICAL()
|
||||||
#define ATOMIC_EXIT_CRITICAL() portEXIT_CRITICAL()
|
#define ATOMIC_EXIT_CRITICAL() portEXIT_CRITICAL()
|
||||||
|
|
||||||
#endif /* portSET_INTERRUPT_MASK_FROM_ISR() */
|
#endif /* portSET_INTERRUPT_MASK_FROM_ISR() */
|
||||||
|
|
||||||
@@ -79,7 +81,7 @@ extern "C" {
|
|||||||
* instead of resulting error, simply define it away.
|
* instead of resulting error, simply define it away.
|
||||||
*/
|
*/
|
||||||
#ifndef portFORCE_INLINE
|
#ifndef portFORCE_INLINE
|
||||||
#define portFORCE_INLINE
|
#define portFORCE_INLINE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ATOMIC_COMPARE_AND_SWAP_SUCCESS 0x1U /**< Compare and swap succeeded, swapped. */
|
#define ATOMIC_COMPARE_AND_SWAP_SUCCESS 0x1U /**< Compare and swap succeeded, swapped. */
|
||||||
@@ -102,15 +104,21 @@ extern "C" {
|
|||||||
* @note This function only swaps *pulDestination with ulExchange, if previous
|
* @note This function only swaps *pulDestination with ulExchange, if previous
|
||||||
* *pulDestination value equals ulComparand.
|
* *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 ulReturnValue;
|
uint32_t ulExchange,
|
||||||
|
uint32_t ulComparand )
|
||||||
|
{
|
||||||
|
uint32_t ulReturnValue;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
if (*pulDestination == ulComparand) {
|
if( *pulDestination == ulComparand )
|
||||||
|
{
|
||||||
*pulDestination = ulExchange;
|
*pulDestination = ulExchange;
|
||||||
ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
|
ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
|
ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -132,8 +140,10 @@ static portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32(uint32_t volatile *pu
|
|||||||
*
|
*
|
||||||
* @return The initial value of *ppvDestination.
|
* @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 *pReturnValue;
|
void * pvExchange )
|
||||||
|
{
|
||||||
|
void * pReturnValue;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
@@ -162,12 +172,16 @@ static portFORCE_INLINE void *Atomic_SwapPointers_p32(void *volatile *ppvDestina
|
|||||||
* @note This function only swaps *ppvDestination with pvExchange, if previous
|
* @note This function only swaps *ppvDestination with pvExchange, if previous
|
||||||
* *ppvDestination value equals pvComparand.
|
* *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,
|
||||||
uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
|
void * pvExchange,
|
||||||
|
void * pvComparand )
|
||||||
|
{
|
||||||
|
uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
if (*ppvDestination == pvComparand) {
|
if( *ppvDestination == pvComparand )
|
||||||
|
{
|
||||||
*ppvDestination = pvExchange;
|
*ppvDestination = pvExchange;
|
||||||
ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
|
ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -177,6 +191,7 @@ static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32(void *volatil
|
|||||||
return ulReturnValue;
|
return ulReturnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------- Arithmetic ------------------------------*/
|
/*----------------------------- Arithmetic ------------------------------*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -190,7 +205,9 @@ static portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32(void *volatil
|
|||||||
*
|
*
|
||||||
* @return previous *pulAddend value.
|
* @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;
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
@@ -216,7 +233,9 @@ static portFORCE_INLINE uint32_t Atomic_Add_u32(uint32_t volatile *pulAddend, ui
|
|||||||
*
|
*
|
||||||
* @return previous *pulAddend value.
|
* @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;
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
@@ -240,8 +259,9 @@ static portFORCE_INLINE uint32_t Atomic_Subtract_u32(uint32_t volatile *pulAdden
|
|||||||
*
|
*
|
||||||
* @return *pulAddend value before increment.
|
* @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;
|
{
|
||||||
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
@@ -264,8 +284,9 @@ static portFORCE_INLINE uint32_t Atomic_Increment_u32(uint32_t volatile *pulAdde
|
|||||||
*
|
*
|
||||||
* @return *pulAddend value before decrement.
|
* @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;
|
{
|
||||||
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
@@ -290,8 +311,10 @@ static portFORCE_INLINE uint32_t Atomic_Decrement_u32(uint32_t volatile *pulAdde
|
|||||||
*
|
*
|
||||||
* @return The original value of *pulDestination.
|
* @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 ulCurrent;
|
uint32_t ulValue )
|
||||||
|
{
|
||||||
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
@@ -315,8 +338,10 @@ static portFORCE_INLINE uint32_t Atomic_OR_u32(uint32_t volatile *pulDestination
|
|||||||
*
|
*
|
||||||
* @return The original value of *pulDestination.
|
* @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 ulCurrent;
|
uint32_t ulValue )
|
||||||
|
{
|
||||||
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
@@ -340,13 +365,15 @@ static portFORCE_INLINE uint32_t Atomic_AND_u32(uint32_t volatile *pulDestinatio
|
|||||||
*
|
*
|
||||||
* @return The original value of *pulDestination.
|
* @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 ulCurrent;
|
uint32_t ulValue )
|
||||||
|
{
|
||||||
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
ulCurrent = *pulDestination;
|
ulCurrent = *pulDestination;
|
||||||
*pulDestination = ~(ulCurrent & ulValue);
|
*pulDestination = ~( ulCurrent & ulValue );
|
||||||
}
|
}
|
||||||
ATOMIC_EXIT_CRITICAL();
|
ATOMIC_EXIT_CRITICAL();
|
||||||
|
|
||||||
@@ -365,8 +392,10 @@ static portFORCE_INLINE uint32_t Atomic_NAND_u32(uint32_t volatile *pulDestinati
|
|||||||
*
|
*
|
||||||
* @return The original value of *pulDestination.
|
* @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 ulCurrent;
|
uint32_t ulValue )
|
||||||
|
{
|
||||||
|
uint32_t ulCurrent;
|
||||||
|
|
||||||
ATOMIC_ENTER_CRITICAL();
|
ATOMIC_ENTER_CRITICAL();
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
#define CO_ROUTINE_H
|
#define CO_ROUTINE_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h must appear in source files before include croutine.h"
|
#error "include FreeRTOS.h must appear in source files before include croutine.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
@@ -41,12 +41,13 @@ extern "C" {
|
|||||||
/* Used to hide the implementation of the co-routine control block. The
|
/* 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
|
control block structure however has to be included in the header due to
|
||||||
the macro implementation of the co-routine functionality. */
|
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. */
|
/* 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 {
|
typedef struct corCoRoutineControlBlock
|
||||||
|
{
|
||||||
crCOROUTINE_CODE pxCoRoutineFunction;
|
crCOROUTINE_CODE pxCoRoutineFunction;
|
||||||
ListItem_t xGenericListItem; /*< List item used to place the CRCB in ready and blocked queues. */
|
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. */
|
ListItem_t xEventListItem; /*< List item used to place the CRCB in event lists. */
|
||||||
@@ -127,7 +128,8 @@ typedef struct corCoRoutineControlBlock {
|
|||||||
* \defgroup xCoRoutineCreate xCoRoutineCreate
|
* \defgroup xCoRoutineCreate xCoRoutineCreate
|
||||||
* \ingroup Tasks
|
* \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 );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -168,7 +170,7 @@ BaseType_t xCoRoutineCreate(crCOROUTINE_CODE pxCoRoutineCode, UBaseType_t uxPrio
|
|||||||
* \defgroup vCoRoutineSchedule vCoRoutineSchedule
|
* \defgroup vCoRoutineSchedule vCoRoutineSchedule
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
void vCoRoutineSchedule(void);
|
void vCoRoutineSchedule( void );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -199,9 +201,7 @@ void vCoRoutineSchedule(void);
|
|||||||
* \defgroup crSTART crSTART
|
* \defgroup crSTART crSTART
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
#define crSTART(pxCRCB) \
|
#define crSTART( pxCRCB ) switch( ( ( CRCB_t * )( pxCRCB ) )->uxState ) { case 0:
|
||||||
switch (((CRCB_t *)(pxCRCB))->uxState) { \
|
|
||||||
case 0:
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -238,14 +238,8 @@ void vCoRoutineSchedule(void);
|
|||||||
* These macros are intended for internal use by the co-routine implementation
|
* These macros are intended for internal use by the co-routine implementation
|
||||||
* only. The macros should not be used directly by application writers.
|
* 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):
|
||||||
((CRCB_t *)(xHandle))->uxState = (__LINE__ * 2); \
|
#define crSET_STATE1( xHandle ) ( ( CRCB_t * )( xHandle ) )->uxState = ((__LINE__ * 2)+1); return; case ((__LINE__ * 2)+1):
|
||||||
return; \
|
|
||||||
case (__LINE__ * 2):
|
|
||||||
#define crSET_STATE1(xHandle) \
|
|
||||||
((CRCB_t *)(xHandle))->uxState = ((__LINE__ * 2) + 1); \
|
|
||||||
return; \
|
|
||||||
case ((__LINE__ * 2) + 1):
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -293,11 +287,12 @@ void vCoRoutineSchedule(void);
|
|||||||
* \defgroup crDELAY crDELAY
|
* \defgroup crDELAY crDELAY
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
#define crDELAY(xHandle, xTicksToDelay) \
|
#define crDELAY( xHandle, xTicksToDelay ) \
|
||||||
if ((xTicksToDelay) > 0) { \
|
if( ( xTicksToDelay ) > 0 ) \
|
||||||
vCoRoutineAddToDelayedList((xTicksToDelay), NULL); \
|
{ \
|
||||||
|
vCoRoutineAddToDelayedList( ( xTicksToDelay ), NULL ); \
|
||||||
} \
|
} \
|
||||||
crSET_STATE0((xHandle));
|
crSET_STATE0( ( xHandle ) );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <pre>
|
* <pre>
|
||||||
@@ -382,18 +377,20 @@ void vCoRoutineSchedule(void);
|
|||||||
* \defgroup crQUEUE_SEND crQUEUE_SEND
|
* \defgroup crQUEUE_SEND crQUEUE_SEND
|
||||||
* \ingroup Tasks
|
* \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 ) \
|
||||||
{ \
|
{ \
|
||||||
*(pxResult) = xQueueCRSend((pxQueue), (pvItemToQueue), (xTicksToWait)); \
|
crSET_STATE0( ( xHandle ) ); \
|
||||||
if (*(pxResult) == errQUEUE_BLOCKED) { \
|
*pxResult = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), 0 ); \
|
||||||
crSET_STATE0((xHandle)); \
|
|
||||||
*pxResult = xQueueCRSend((pxQueue), (pvItemToQueue), 0); \
|
|
||||||
} \
|
} \
|
||||||
if (*pxResult == errQUEUE_YIELD) { \
|
if( *pxResult == errQUEUE_YIELD ) \
|
||||||
crSET_STATE1((xHandle)); \
|
{ \
|
||||||
|
crSET_STATE1( ( xHandle ) ); \
|
||||||
*pxResult = pdPASS; \
|
*pxResult = pdPASS; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -472,18 +469,20 @@ void vCoRoutineSchedule(void);
|
|||||||
* \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE
|
* \defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE
|
||||||
* \ingroup Tasks
|
* \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 ) \
|
||||||
{ \
|
{ \
|
||||||
*(pxResult) = xQueueCRReceive((pxQueue), (pvBuffer), (xTicksToWait)); \
|
crSET_STATE0( ( xHandle ) ); \
|
||||||
if (*(pxResult) == errQUEUE_BLOCKED) { \
|
*( pxResult ) = xQueueCRReceive( ( pxQueue) , ( pvBuffer ), 0 ); \
|
||||||
crSET_STATE0((xHandle)); \
|
|
||||||
*(pxResult) = xQueueCRReceive((pxQueue), (pvBuffer), 0); \
|
|
||||||
} \
|
} \
|
||||||
if (*(pxResult) == errQUEUE_YIELD) { \
|
if( *( pxResult ) == errQUEUE_YIELD ) \
|
||||||
crSET_STATE1((xHandle)); \
|
{ \
|
||||||
*(pxResult) = pdPASS; \
|
crSET_STATE1( ( xHandle ) ); \
|
||||||
|
*( pxResult ) = pdPASS; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -579,7 +578,8 @@ void vCoRoutineSchedule(void);
|
|||||||
* \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR
|
* \defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR
|
||||||
* \ingroup Tasks
|
* \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 ) )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* croutine. h
|
* croutine. h
|
||||||
@@ -691,7 +691,7 @@ void vCoRoutineSchedule(void);
|
|||||||
* \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR
|
* \defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR
|
||||||
* \ingroup Tasks
|
* \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.
|
* This function is intended for internal use by the co-routine macros only.
|
||||||
@@ -702,7 +702,7 @@ void vCoRoutineSchedule(void);
|
|||||||
* Removes the current co-routine from its ready list and places it in the
|
* Removes the current co-routine from its ready list and places it in the
|
||||||
* appropriate delayed list.
|
* 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.
|
* This function is intended for internal use by the queue implementation only.
|
||||||
@@ -711,7 +711,7 @@ void vCoRoutineAddToDelayedList(TickType_t xTicksToDelay, List_t *pxEventList);
|
|||||||
* Removes the highest priority co-routine from the event list and places it in
|
* Removes the highest priority co-routine from the event list and places it in
|
||||||
* the pending ready list.
|
* the pending ready list.
|
||||||
*/
|
*/
|
||||||
BaseType_t xCoRoutineRemoveFromEventList(const List_t *pxEventList);
|
BaseType_t xCoRoutineRemoveFromEventList( const List_t *pxEventList );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
#define EVENT_GROUPS_H
|
#define EVENT_GROUPS_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h" must appear in source files before "include event_groups.h"
|
#error "include FreeRTOS.h" must appear in source files before "include event_groups.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* FreeRTOS includes. */
|
/* FreeRTOS includes. */
|
||||||
@@ -66,6 +66,8 @@ extern "C" {
|
|||||||
* \defgroup EventGroup
|
* \defgroup EventGroup
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
*
|
*
|
||||||
@@ -77,7 +79,7 @@ extern "C" {
|
|||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
struct EventGroupDef_t;
|
struct EventGroupDef_t;
|
||||||
typedef struct EventGroupDef_t *EventGroupHandle_t;
|
typedef struct EventGroupDef_t * EventGroupHandle_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The type that holds event bits always matches TickType_t - therefore the
|
* The type that holds event bits always matches TickType_t - therefore the
|
||||||
@@ -141,8 +143,8 @@ typedef TickType_t EventBits_t;
|
|||||||
* \defgroup xEventGroupCreate xEventGroupCreate
|
* \defgroup xEventGroupCreate xEventGroupCreate
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
EventGroupHandle_t xEventGroupCreate(void) PRIVILEGED_FUNCTION;
|
EventGroupHandle_t xEventGroupCreate( void ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -194,8 +196,8 @@ EventGroupHandle_t xEventGroupCreate(void) PRIVILEGED_FUNCTION;
|
|||||||
xEventGroup = xEventGroupCreateStatic( &xEventGroupBuffer );
|
xEventGroup = xEventGroupCreateStatic( &xEventGroupBuffer );
|
||||||
</pre>
|
</pre>
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
EventGroupHandle_t xEventGroupCreateStatic(StaticEventGroup_t *pxEventGroupBuffer) PRIVILEGED_FUNCTION;
|
EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -290,8 +292,7 @@ EventGroupHandle_t xEventGroupCreateStatic(StaticEventGroup_t *pxEventGroupBuffe
|
|||||||
* \defgroup xEventGroupWaitBits xEventGroupWaitBits
|
* \defgroup xEventGroupWaitBits xEventGroupWaitBits
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits,
|
EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
@@ -348,7 +349,7 @@ EventBits_t xEventGroupWaitBits(EventGroupHandle_t xEventGroup, const EventBits_
|
|||||||
* \defgroup xEventGroupClearBits xEventGroupClearBits
|
* \defgroup xEventGroupClearBits xEventGroupClearBits
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear) PRIVILEGED_FUNCTION;
|
EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
@@ -403,10 +404,10 @@ EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup, const EventBits
|
|||||||
* \defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR
|
* \defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
BaseType_t xEventGroupClearBitsFromISR(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear) PRIVILEGED_FUNCTION;
|
BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;
|
||||||
#else
|
#else
|
||||||
#define xEventGroupClearBitsFromISR(xEventGroup, uxBitsToClear) xTimerPendFunctionCallFromISR(vEventGroupClearBitsCallback, (void *)xEventGroup, (uint32_t)uxBitsToClear, NULL)
|
#define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -481,7 +482,7 @@ BaseType_t xEventGroupClearBitsFromISR(EventGroupHandle_t xEventGroup, const Eve
|
|||||||
* \defgroup xEventGroupSetBits xEventGroupSetBits
|
* \defgroup xEventGroupSetBits xEventGroupSetBits
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet) PRIVILEGED_FUNCTION;
|
EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
@@ -555,11 +556,10 @@ EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t
|
|||||||
* \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR
|
* \defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION;
|
BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
||||||
#else
|
#else
|
||||||
#define xEventGroupSetBitsFromISR(xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken) \
|
#define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken )
|
||||||
xTimerPendFunctionCallFromISR(vEventGroupSetBitsCallback, (void *)xEventGroup, (uint32_t)uxBitsToSet, pxHigherPriorityTaskWoken)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -686,7 +686,8 @@ BaseType_t xEventGroupSetBitsFromISR(EventGroupHandle_t xEventGroup, const Event
|
|||||||
* \defgroup xEventGroupSync xEventGroupSync
|
* \defgroup xEventGroupSync xEventGroupSync
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
@@ -704,7 +705,7 @@ EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t ux
|
|||||||
* \defgroup xEventGroupGetBits xEventGroupGetBits
|
* \defgroup xEventGroupGetBits xEventGroupGetBits
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
#define xEventGroupGetBits(xEventGroup) xEventGroupClearBits(xEventGroup, 0)
|
#define xEventGroupGetBits( xEventGroup ) xEventGroupClearBits( xEventGroup, 0 )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
@@ -721,7 +722,7 @@ EventBits_t xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t ux
|
|||||||
* \defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR
|
* \defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR
|
||||||
* \ingroup EventGroup
|
* \ingroup EventGroup
|
||||||
*/
|
*/
|
||||||
EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup) PRIVILEGED_FUNCTION;
|
EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* event_groups.h
|
* event_groups.h
|
||||||
@@ -735,15 +736,16 @@ EventBits_t xEventGroupGetBitsFromISR(EventGroupHandle_t xEventGroup) PRIVILEGED
|
|||||||
*
|
*
|
||||||
* @param xEventGroup The event group being deleted.
|
* @param xEventGroup The event group being deleted.
|
||||||
*/
|
*/
|
||||||
void vEventGroupDelete(EventGroupHandle_t xEventGroup) PRIVILEGED_FUNCTION;
|
void vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* For internal use only. */
|
/* For internal use only. */
|
||||||
void vEventGroupSetBitsCallback(void *pvEventGroup, const uint32_t ulBitsToSet) PRIVILEGED_FUNCTION;
|
void vEventGroupSetBitsCallback( void *pvEventGroup, const uint32_t ulBitsToSet ) PRIVILEGED_FUNCTION;
|
||||||
void vEventGroupClearBitsCallback(void *pvEventGroup, const uint32_t ulBitsToClear) PRIVILEGED_FUNCTION;
|
void vEventGroupClearBitsCallback( void *pvEventGroup, const uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if (configUSE_TRACE_FACILITY == 1)
|
||||||
UBaseType_t uxEventGroupGetNumber(void *xEventGroup) PRIVILEGED_FUNCTION;
|
UBaseType_t uxEventGroupGetNumber( void* xEventGroup ) PRIVILEGED_FUNCTION;
|
||||||
void vEventGroupSetNumber(void *xEventGroup, UBaseType_t uxEventGroupNumber) PRIVILEGED_FUNCTION;
|
void vEventGroupSetNumber( void* xEventGroup, UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -751,3 +753,5 @@ void vEventGroupSetNumber(void *xEventGroup, UBaseType_t uxEventGroupNumb
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* EVENT_GROUPS_H */
|
#endif /* EVENT_GROUPS_H */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error FreeRTOS.h must be included before list.h
|
#error FreeRTOS.h must be included before list.h
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LIST_H
|
#ifndef LIST_H
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
* "#define configLIST_VOLATILE volatile"
|
* "#define configLIST_VOLATILE volatile"
|
||||||
*/
|
*/
|
||||||
#ifndef configLIST_VOLATILE
|
#ifndef configLIST_VOLATILE
|
||||||
#define configLIST_VOLATILE
|
#define configLIST_VOLATILE
|
||||||
#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */
|
#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -101,67 +101,71 @@ 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
|
the application. These may catch the list data structures being overwritten in
|
||||||
memory. They will not catch data errors caused by incorrect configuration or
|
memory. They will not catch data errors caused by incorrect configuration or
|
||||||
use of FreeRTOS.*/
|
use of FreeRTOS.*/
|
||||||
#if (configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0)
|
#if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )
|
||||||
/* Define the macros to do nothing. */
|
/* Define the macros to do nothing. */
|
||||||
#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
|
#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
|
||||||
#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
|
#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
|
||||||
#define listFIRST_LIST_INTEGRITY_CHECK_VALUE
|
#define listFIRST_LIST_INTEGRITY_CHECK_VALUE
|
||||||
#define listSECOND_LIST_INTEGRITY_CHECK_VALUE
|
#define listSECOND_LIST_INTEGRITY_CHECK_VALUE
|
||||||
#define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE(pxItem)
|
#define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
|
||||||
#define listSET_SECOND_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_1_VALUE( pxList )
|
||||||
#define listSET_LIST_INTEGRITY_CHECK_2_VALUE(pxList)
|
#define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )
|
||||||
#define listTEST_LIST_ITEM_INTEGRITY(pxItem)
|
#define listTEST_LIST_ITEM_INTEGRITY( pxItem )
|
||||||
#define listTEST_LIST_INTEGRITY(pxList)
|
#define listTEST_LIST_INTEGRITY( pxList )
|
||||||
#else
|
#else
|
||||||
/* Define macros that add new members into the list structures. */
|
/* Define macros that add new members into the list structures. */
|
||||||
#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1;
|
#define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1;
|
||||||
#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2;
|
#define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2;
|
||||||
#define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1;
|
#define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1;
|
||||||
#define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2;
|
#define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2;
|
||||||
|
|
||||||
/* Define macros that set the new structure members to known values. */
|
/* 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_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_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_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
|
||||||
#define listSET_LIST_INTEGRITY_CHECK_2_VALUE(pxList) (pxList)->xListIntegrityValue2 = 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
|
/* Define macros that will assert if one of the structure members does not
|
||||||
contain its expected value. */
|
contain its expected value. */
|
||||||
#define listTEST_LIST_ITEM_INTEGRITY(pxItem) configASSERT(((pxItem)->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE) && ((pxItem)->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_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))
|
#define listTEST_LIST_INTEGRITY( pxList ) configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )
|
||||||
#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */
|
#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definition of the only type of object that a list can contain.
|
* Definition of the only type of object that a list can contain.
|
||||||
*/
|
*/
|
||||||
struct xLIST;
|
struct xLIST;
|
||||||
struct xLIST_ITEM {
|
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. */
|
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. */
|
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 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. */
|
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. */
|
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). */
|
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. */
|
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. */
|
typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */
|
||||||
|
|
||||||
struct xMINI_LIST_ITEM {
|
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. */
|
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;
|
configLIST_VOLATILE TickType_t xItemValue;
|
||||||
struct xLIST_ITEM *configLIST_VOLATILE pxNext;
|
struct xLIST_ITEM * configLIST_VOLATILE pxNext;
|
||||||
struct xLIST_ITEM *configLIST_VOLATILE pxPrevious;
|
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
|
||||||
};
|
};
|
||||||
typedef struct xMINI_LIST_ITEM MiniListItem_t;
|
typedef struct xMINI_LIST_ITEM MiniListItem_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definition of the type of queue used by the scheduler.
|
* Definition of the type of queue used by the scheduler.
|
||||||
*/
|
*/
|
||||||
typedef struct xLIST {
|
typedef struct xLIST
|
||||||
|
{
|
||||||
listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
|
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;
|
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 (). */
|
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. */
|
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. */
|
listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
|
||||||
} List_t;
|
} List_t;
|
||||||
@@ -173,7 +177,7 @@ typedef struct xLIST {
|
|||||||
* \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
|
* \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
|
||||||
* \ingroup LinkedList
|
* \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
|
* Access macro to get the owner of a list item. The owner of a list item
|
||||||
@@ -182,7 +186,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
|
* \page listGET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
|
||||||
* \ingroup LinkedList
|
* \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
|
* Access macro to set the value of the list item. In most cases the value is
|
||||||
@@ -191,7 +195,7 @@ typedef struct xLIST {
|
|||||||
* \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE
|
* \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE
|
||||||
* \ingroup LinkedList
|
* \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
|
* Access macro to retrieve the value of the list item. The value can
|
||||||
@@ -201,7 +205,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
||||||
* \ingroup LinkedList
|
* \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
|
* Access macro to retrieve the value of the list item at the head of a given
|
||||||
@@ -210,7 +214,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
||||||
* \ingroup LinkedList
|
* \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.
|
* Return the list item at the head of the list.
|
||||||
@@ -218,7 +222,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY
|
* \page listGET_HEAD_ENTRY listGET_HEAD_ENTRY
|
||||||
* \ingroup LinkedList
|
* \ingroup LinkedList
|
||||||
*/
|
*/
|
||||||
#define listGET_HEAD_ENTRY(pxList) (((pxList)->xListEnd).pxNext)
|
#define listGET_HEAD_ENTRY( pxList ) ( ( ( pxList )->xListEnd ).pxNext )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the next list item.
|
* Return the next list item.
|
||||||
@@ -226,7 +230,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_NEXT listGET_NEXT
|
* \page listGET_NEXT listGET_NEXT
|
||||||
* \ingroup LinkedList
|
* \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
|
* Return the list item that marks the end of the list
|
||||||
@@ -234,7 +238,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_END_MARKER listGET_END_MARKER
|
* \page listGET_END_MARKER listGET_END_MARKER
|
||||||
* \ingroup LinkedList
|
* \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
|
* Access macro to determine if a list contains any items. The macro will
|
||||||
@@ -243,12 +247,12 @@ typedef struct xLIST {
|
|||||||
* \page listLIST_IS_EMPTY listLIST_IS_EMPTY
|
* \page listLIST_IS_EMPTY listLIST_IS_EMPTY
|
||||||
* \ingroup LinkedList
|
* \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.
|
* 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.
|
* Access function to obtain the owner of the next entry in a list.
|
||||||
@@ -270,17 +274,19 @@ typedef struct xLIST {
|
|||||||
* \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
|
* \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
|
||||||
* \ingroup LinkedList
|
* \ingroup LinkedList
|
||||||
*/
|
*/
|
||||||
#define listGET_OWNER_OF_NEXT_ENTRY(pxTCB, pxList) \
|
#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList ) \
|
||||||
{ \
|
{ \
|
||||||
List_t *const pxConstList = (pxList); \
|
List_t * const pxConstList = ( pxList ); \
|
||||||
/* Increment the index to the next item and return the item, ensuring */ \
|
/* Increment the index to the next item and return the item, ensuring */ \
|
||||||
/* we don't return the marker used at the end of the list. */ \
|
/* we don't return the marker used at the end of the list. */ \
|
||||||
(pxConstList)->pxIndex = (pxConstList)->pxIndex->pxNext; \
|
( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \
|
||||||
if ((void *)(pxConstList)->pxIndex == (void *)&((pxConstList)->xListEnd)) { \
|
if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) ) \
|
||||||
(pxConstList)->pxIndex = (pxConstList)->pxIndex->pxNext; \
|
{ \
|
||||||
|
( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext; \
|
||||||
} \
|
} \
|
||||||
(pxTCB) = (pxConstList)->pxIndex->pvOwner; \
|
( pxTCB ) = ( pxConstList )->pxIndex->pvOwner; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Access function to obtain the owner of the first entry in a list. Lists
|
* Access function to obtain the owner of the first entry in a list. Lists
|
||||||
@@ -298,7 +304,7 @@ typedef struct xLIST {
|
|||||||
* \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY
|
* \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY
|
||||||
* \ingroup LinkedList
|
* \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
|
* Check to see if a list item is within a list. The list item maintains a
|
||||||
@@ -309,7 +315,7 @@ typedef struct xLIST {
|
|||||||
* @param pxListItem The list item we want to know if is in the list.
|
* @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.
|
* @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).
|
* Return the list a list item is contained within (referenced from).
|
||||||
@@ -317,14 +323,14 @@ typedef struct xLIST {
|
|||||||
* @param pxListItem The list item being queried.
|
* @param pxListItem The list item being queried.
|
||||||
* @return A pointer to the List_t object that references the pxListItem
|
* @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
|
* 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()
|
* pxList->xListEnd.xItemValue is set to portMAX_DELAY by the vListInitialise()
|
||||||
* function.
|
* 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
|
* Must be called before a list is used! This initialises all the members
|
||||||
@@ -336,7 +342,7 @@ typedef struct xLIST {
|
|||||||
* \page vListInitialise vListInitialise
|
* \page vListInitialise vListInitialise
|
||||||
* \ingroup LinkedList
|
* \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
|
* Must be called before a list item is used. This sets the list container to
|
||||||
@@ -347,7 +353,7 @@ void vListInitialise(List_t *const pxList) PRIVILEGED_FUNCTION;
|
|||||||
* \page vListInitialiseItem vListInitialiseItem
|
* \page vListInitialiseItem vListInitialiseItem
|
||||||
* \ingroup LinkedList
|
* \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
|
* Insert a list item into a list. The item will be inserted into the list in
|
||||||
@@ -360,7 +366,7 @@ void vListInitialiseItem(ListItem_t *const pxItem) PRIVILEGED_FUNCTION;
|
|||||||
* \page vListInsert vListInsert
|
* \page vListInsert vListInsert
|
||||||
* \ingroup LinkedList
|
* \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
|
* Insert a list item into a list. The item will be inserted in a position
|
||||||
@@ -381,7 +387,7 @@ void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem) PRIVILEG
|
|||||||
* \page vListInsertEnd vListInsertEnd
|
* \page vListInsertEnd vListInsertEnd
|
||||||
* \ingroup LinkedList
|
* \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
|
* Remove an item from a list. The list item has a pointer to the list that
|
||||||
@@ -396,10 +402,11 @@ void vListInsertEnd(List_t *const pxList, ListItem_t *const pxNewListItem) PRIVI
|
|||||||
* \page uxListRemove uxListRemove
|
* \page uxListRemove uxListRemove
|
||||||
* \ingroup LinkedList
|
* \ingroup LinkedList
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxListRemove(ListItem_t *const pxItemToRemove) PRIVILEGED_FUNCTION;
|
UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
* 1 tab == 4 spaces!
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Message buffers build functionality on top of FreeRTOS stream buffers.
|
* Message buffers build functionality on top of FreeRTOS stream buffers.
|
||||||
* Whereas stream buffers are used to send a continuous stream of data from one
|
* Whereas stream buffers are used to send a continuous stream of data from one
|
||||||
@@ -62,13 +63,13 @@
|
|||||||
#define FREERTOS_MESSAGE_BUFFER_H
|
#define FREERTOS_MESSAGE_BUFFER_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h must appear in source files before include message_buffer.h"
|
#error "include FreeRTOS.h must appear in source files before include message_buffer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Message buffers are built onto of stream buffers. */
|
/* Message buffers are built onto of stream buffers. */
|
||||||
#include "stream_buffer.h"
|
#include "stream_buffer.h"
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined( __cplusplus )
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -78,7 +79,7 @@ extern "C" {
|
|||||||
* then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(),
|
* then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(),
|
||||||
* etc.
|
* etc.
|
||||||
*/
|
*/
|
||||||
typedef void *MessageBufferHandle_t;
|
typedef void * MessageBufferHandle_t;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -138,7 +139,7 @@ const size_t xMessageBufferSizeBytes = 100;
|
|||||||
* \defgroup xMessageBufferCreate xMessageBufferCreate
|
* \defgroup xMessageBufferCreate xMessageBufferCreate
|
||||||
* \ingroup MessageBufferManagement
|
* \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
|
* message_buffer.h
|
||||||
@@ -204,8 +205,7 @@ MessageBufferHandle_t xMessageBuffer;
|
|||||||
* \defgroup xMessageBufferCreateStatic xMessageBufferCreateStatic
|
* \defgroup xMessageBufferCreateStatic xMessageBufferCreateStatic
|
||||||
* \ingroup MessageBufferManagement
|
* \ingroup MessageBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferCreateStatic(xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer) \
|
#define xMessageBufferCreateStatic( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer ) ( MessageBufferHandle_t ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, 0, pdTRUE, pucMessageBufferStorageArea, pxStaticMessageBuffer )
|
||||||
(MessageBufferHandle_t) xStreamBufferGenericCreateStatic(xBufferSizeBytes, 0, pdTRUE, pucMessageBufferStorageArea, pxStaticMessageBuffer)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -304,7 +304,7 @@ const TickType_t x100ms = pdMS_TO_TICKS( 100 );
|
|||||||
* \defgroup xMessageBufferSend xMessageBufferSend
|
* \defgroup xMessageBufferSend xMessageBufferSend
|
||||||
* \ingroup MessageBufferManagement
|
* \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
|
* message_buffer.h
|
||||||
@@ -408,8 +408,7 @@ BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.
|
|||||||
* \defgroup xMessageBufferSendFromISR xMessageBufferSendFromISR
|
* \defgroup xMessageBufferSendFromISR xMessageBufferSendFromISR
|
||||||
* \ingroup MessageBufferManagement
|
* \ingroup MessageBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferSendFromISR(xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken) \
|
#define xMessageBufferSendFromISR( xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) xStreamBufferSendFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken )
|
||||||
xStreamBufferSendFromISR((StreamBufferHandle_t)xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -497,7 +496,8 @@ const TickType_t xBlockTime = pdMS_TO_TICKS( 20 );
|
|||||||
* \defgroup xMessageBufferReceive xMessageBufferReceive
|
* \defgroup xMessageBufferReceive xMessageBufferReceive
|
||||||
* \ingroup MessageBufferManagement
|
* \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 )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -597,8 +597,7 @@ BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.
|
|||||||
* \defgroup xMessageBufferReceiveFromISR xMessageBufferReceiveFromISR
|
* \defgroup xMessageBufferReceiveFromISR xMessageBufferReceiveFromISR
|
||||||
* \ingroup MessageBufferManagement
|
* \ingroup MessageBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferReceiveFromISR(xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken) \
|
#define xMessageBufferReceiveFromISR( xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) xStreamBufferReceiveFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken )
|
||||||
xStreamBufferReceiveFromISR((StreamBufferHandle_t)xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -618,7 +617,7 @@ void vMessageBufferDelete( MessageBufferHandle_t xMessageBuffer );
|
|||||||
* @param xMessageBuffer The handle of the message buffer to be deleted.
|
* @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
|
* message_buffer.h
|
||||||
@@ -635,7 +634,7 @@ BaseType_t xMessageBufferIsFull( MessageBufferHandle_t xMessageBuffer ) );
|
|||||||
* @return If the message buffer referenced by xMessageBuffer is full then
|
* @return If the message buffer referenced by xMessageBuffer is full then
|
||||||
* pdTRUE is returned. Otherwise pdFALSE is returned.
|
* pdTRUE is returned. Otherwise pdFALSE is returned.
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferIsFull(xMessageBuffer) xStreamBufferIsFull((StreamBufferHandle_t)xMessageBuffer)
|
#define xMessageBufferIsFull( xMessageBuffer ) xStreamBufferIsFull( ( StreamBufferHandle_t ) xMessageBuffer )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -651,7 +650,7 @@ BaseType_t xMessageBufferIsEmpty( MessageBufferHandle_t xMessageBuffer ) );
|
|||||||
* pdTRUE is returned. Otherwise pdFALSE is returned.
|
* pdTRUE is returned. Otherwise pdFALSE is returned.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferIsEmpty(xMessageBuffer) xStreamBufferIsEmpty((StreamBufferHandle_t)xMessageBuffer)
|
#define xMessageBufferIsEmpty( xMessageBuffer ) xStreamBufferIsEmpty( ( StreamBufferHandle_t ) xMessageBuffer )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -674,7 +673,8 @@ BaseType_t xMessageBufferReset( MessageBufferHandle_t xMessageBuffer );
|
|||||||
* \defgroup xMessageBufferReset xMessageBufferReset
|
* \defgroup xMessageBufferReset xMessageBufferReset
|
||||||
* \ingroup MessageBufferManagement
|
* \ingroup MessageBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferReset(xMessageBuffer) xStreamBufferReset((StreamBufferHandle_t)xMessageBuffer)
|
#define xMessageBufferReset( xMessageBuffer ) xStreamBufferReset( ( StreamBufferHandle_t ) xMessageBuffer )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -695,8 +695,8 @@ size_t xMessageBufferSpaceAvailable( MessageBufferHandle_t xMessageBuffer ) );
|
|||||||
* \defgroup xMessageBufferSpaceAvailable xMessageBufferSpaceAvailable
|
* \defgroup xMessageBufferSpaceAvailable xMessageBufferSpaceAvailable
|
||||||
* \ingroup MessageBufferManagement
|
* \ingroup MessageBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferSpaceAvailable(xMessageBuffer) xStreamBufferSpacesAvailable((StreamBufferHandle_t)xMessageBuffer)
|
#define xMessageBufferSpaceAvailable( xMessageBuffer ) xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer )
|
||||||
#define xMessageBufferSpacesAvailable(xMessageBuffer) xStreamBufferSpacesAvailable((StreamBufferHandle_t)xMessageBuffer) /* Corrects typo in original macro name. */
|
#define xMessageBufferSpacesAvailable( xMessageBuffer ) xStreamBufferSpacesAvailable( ( StreamBufferHandle_t ) xMessageBuffer ) /* Corrects typo in original macro name. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -715,7 +715,7 @@ size_t xMessageBufferSpaceAvailable( MessageBufferHandle_t xMessageBuffer ) );
|
|||||||
* \defgroup xMessageBufferNextLengthBytes xMessageBufferNextLengthBytes
|
* \defgroup xMessageBufferNextLengthBytes xMessageBufferNextLengthBytes
|
||||||
* \ingroup MessageBufferManagement
|
* \ingroup MessageBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferNextLengthBytes(xMessageBuffer) xStreamBufferNextMessageLengthBytes((StreamBufferHandle_t)xMessageBuffer) PRIVILEGED_FUNCTION;
|
#define xMessageBufferNextLengthBytes( xMessageBuffer ) xStreamBufferNextMessageLengthBytes( ( StreamBufferHandle_t ) xMessageBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -754,7 +754,7 @@ BaseType_t xMessageBufferSendCompletedFromISR( MessageBufferHandle_t xStreamBuff
|
|||||||
* \defgroup xMessageBufferSendCompletedFromISR xMessageBufferSendCompletedFromISR
|
* \defgroup xMessageBufferSendCompletedFromISR xMessageBufferSendCompletedFromISR
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferSendCompletedFromISR(xMessageBuffer, pxHigherPriorityTaskWoken) xStreamBufferSendCompletedFromISR((StreamBufferHandle_t)xMessageBuffer, pxHigherPriorityTaskWoken)
|
#define xMessageBufferSendCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) xStreamBufferSendCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -794,9 +794,9 @@ BaseType_t xMessageBufferReceiveCompletedFromISR( MessageBufferHandle_t xStreamB
|
|||||||
* \defgroup xMessageBufferReceiveCompletedFromISR xMessageBufferReceiveCompletedFromISR
|
* \defgroup xMessageBufferReceiveCompletedFromISR xMessageBufferReceiveCompletedFromISR
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xMessageBufferReceiveCompletedFromISR(xMessageBuffer, pxHigherPriorityTaskWoken) xStreamBufferReceiveCompletedFromISR((StreamBufferHandle_t)xMessageBuffer, pxHigherPriorityTaskWoken)
|
#define xMessageBufferReceiveCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) xStreamBufferReceiveCompletedFromISR( ( StreamBufferHandle_t ) xMessageBuffer, pxHigherPriorityTaskWoken )
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined( __cplusplus )
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -33,132 +33,128 @@
|
|||||||
* so the kernel code always runs will full privileges.
|
* so the kernel code always runs will full privileges.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef MPU_PROTOTYPES_H
|
#ifndef MPU_PROTOTYPES_H
|
||||||
#define MPU_PROTOTYPES_H
|
#define MPU_PROTOTYPES_H
|
||||||
|
|
||||||
/* MPU versions of tasks.h API functions. */
|
/* MPU versions of tasks.h API functions. */
|
||||||
BaseType_t MPU_xTaskCreate(TaskFunction_t pxTaskCode, const char *const pcName, const uint16_t usStackDepth, void *const pvParameters, UBaseType_t uxPriority,
|
BaseType_t MPU_xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t *const pxCreatedTask) FREERTOS_SYSTEM_CALL;
|
TaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode, const char * const pcName, const uint32_t ulStackDepth, void * const pvParameters, UBaseType_t uxPriority, StackType_t * const puxStackBuffer, StaticTask_t * const pxTaskBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t MPU_xTaskCreateStatic(TaskFunction_t pxTaskCode, const char *const pcName, const uint32_t ulStackDepth, void *const pvParameters, UBaseType_t uxPriority,
|
BaseType_t MPU_xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) FREERTOS_SYSTEM_CALL;
|
||||||
StackType_t *const puxStackBuffer, StaticTask_t *const pxTaskBuffer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskCreateRestricted(const TaskParameters_t *const pxTaskDefinition, TaskHandle_t *pxCreatedTask) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskCreateRestrictedStatic(const TaskParameters_t *const pxTaskDefinition, TaskHandle_t *pxCreatedTask) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskDelete( TaskHandle_t xTaskToDelete ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskAllocateMPURegions(TaskHandle_t xTask, const MemoryRegion_t *const pxRegions) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskDelay( const TickType_t xTicksToDelay ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskDelete(TaskHandle_t xTaskToDelete) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskDelay(const TickType_t xTicksToDelay) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskDelayUntil(TickType_t *const pxPreviousWakeTime, const TickType_t xTimeIncrement) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxTaskPriorityGet( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskAbortDelay(TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
eTaskState MPU_eTaskGetState( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxTaskPriorityGet(const TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) FREERTOS_SYSTEM_CALL;
|
||||||
eTaskState MPU_eTaskGetState(TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskGetInfo(TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskSuspend( TaskHandle_t xTaskToSuspend ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskResume( TaskHandle_t xTaskToResume ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskSuspend(TaskHandle_t xTaskToSuspend) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskStartScheduler( void ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskResume(TaskHandle_t xTaskToResume) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskSuspendAll( void ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskStartScheduler(void) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskResumeAll( void ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskSuspendAll(void) FREERTOS_SYSTEM_CALL;
|
TickType_t MPU_xTaskGetTickCount( void ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskResumeAll(void) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxTaskGetNumberOfTasks( void ) FREERTOS_SYSTEM_CALL;
|
||||||
TickType_t MPU_xTaskGetTickCount(void) FREERTOS_SYSTEM_CALL;
|
char * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxTaskGetNumberOfTasks(void) FREERTOS_SYSTEM_CALL;
|
TaskHandle_t MPU_xTaskGetHandle( const char *pcNameToQuery ) FREERTOS_SYSTEM_CALL;
|
||||||
char * MPU_pcTaskGetName(TaskHandle_t xTaskToQuery) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t MPU_xTaskGetHandle(const char *pcNameToQuery) FREERTOS_SYSTEM_CALL;
|
configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxTaskGetStackHighWaterMark(TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) FREERTOS_SYSTEM_CALL;
|
||||||
configSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2(TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
TaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskSetApplicationTaskTag(TaskHandle_t xTask, TaskHookFunction_t pxHookFunction) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHookFunction_t MPU_xTaskGetApplicationTaskTag(TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
void * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskSetThreadLocalStoragePointer(TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) FREERTOS_SYSTEM_CALL;
|
||||||
void * MPU_pvTaskGetThreadLocalStoragePointer(TaskHandle_t xTaskToQuery, BaseType_t xIndex) FREERTOS_SYSTEM_CALL;
|
TaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskCallApplicationTaskHook(TaskHandle_t xTask, void *pvParameter) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t MPU_xTaskGetIdleTaskHandle(void) FREERTOS_SYSTEM_CALL;
|
uint32_t MPU_ulTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxTaskGetSystemState(TaskStatus_t *const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t *const pulTotalRunTime) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskList( char * pcWriteBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
uint32_t MPU_ulTaskGetIdleRunTimeCounter(void) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskGetRunTimeStats( char *pcWriteBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskList(char *pcWriteBuffer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskGetRunTimeStats(char *pcWriteBuffer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskGenericNotify(TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue) FREERTOS_SYSTEM_CALL;
|
uint32_t MPU_ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskNotifyWait(uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskNotifyStateClear( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;
|
||||||
uint32_t MPU_ulTaskNotifyTake(BaseType_t xClearCountOnExit, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
uint32_t MPU_ulTaskNotifyValueClear( TaskHandle_t xTask, uint32_t ulBitsToClear ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskNotifyStateClear(TaskHandle_t xTask) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskIncrementTick( void ) FREERTOS_SYSTEM_CALL;
|
||||||
uint32_t MPU_ulTaskNotifyValueClear(TaskHandle_t xTask, uint32_t ulBitsToClear) FREERTOS_SYSTEM_CALL;
|
TaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskIncrementTick(void) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t MPU_xTaskGetCurrentTaskHandle(void) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskSetTimeOutState(TimeOut_t *const pxTimeOut) FREERTOS_SYSTEM_CALL;
|
void MPU_vTaskMissedYield( void ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskCheckForTimeOut(TimeOut_t *const pxTimeOut, TickType_t *const pxTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskGetSchedulerState( void ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTaskMissedYield(void) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTaskGetSchedulerState(void) FREERTOS_SYSTEM_CALL;
|
|
||||||
BaseType_t MPU_xTaskCatchUpTicks(TickType_t xTicksToCatchUp) FREERTOS_SYSTEM_CALL;
|
|
||||||
|
|
||||||
/* MPU versions of queue.h API functions. */
|
/* MPU versions of queue.h API functions. */
|
||||||
BaseType_t MPU_xQueueGenericSend(QueueHandle_t xQueue, const void *const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueReceive(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueuePeek(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueSemaphoreTake(QueueHandle_t xQueue, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxQueueMessagesWaiting(const QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxQueueSpacesAvailable(const QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vQueueDelete(QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
void MPU_vQueueDelete( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueHandle_t MPU_xQueueCreateMutex(const uint8_t ucQueueType) FREERTOS_SYSTEM_CALL;
|
QueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueHandle_t MPU_xQueueCreateMutexStatic(const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue) FREERTOS_SYSTEM_CALL;
|
QueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueHandle_t MPU_xQueueCreateCountingSemaphore(const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount) FREERTOS_SYSTEM_CALL;
|
QueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic(const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue) FREERTOS_SYSTEM_CALL;
|
QueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t MPU_xQueueGetMutexHolder(QueueHandle_t xSemaphore) FREERTOS_SYSTEM_CALL;
|
TaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueTakeMutexRecursive(QueueHandle_t xMutex, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueGiveMutexRecursive(QueueHandle_t pxMutex) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vQueueAddToRegistry(QueueHandle_t xQueue, const char *pcName) FREERTOS_SYSTEM_CALL;
|
void MPU_vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcName ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vQueueUnregisterQueue(QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
void MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
const char * MPU_pcQueueGetName(QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
const char * MPU_pcQueueGetName( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueHandle_t MPU_xQueueGenericCreate(const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType) FREERTOS_SYSTEM_CALL;
|
QueueHandle_t MPU_xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueHandle_t MPU_xQueueGenericCreateStatic(const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue,
|
QueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) FREERTOS_SYSTEM_CALL;
|
||||||
const uint8_t ucQueueType) FREERTOS_SYSTEM_CALL;
|
QueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueSetHandle_t MPU_xQueueCreateSet(const UBaseType_t uxEventQueueLength) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet) FREERTOS_SYSTEM_CALL;
|
QueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
QueueSetMemberHandle_t MPU_xQueueSelectFromSet(QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xQueueGenericReset(QueueHandle_t xQueue, BaseType_t xNewQueue) FREERTOS_SYSTEM_CALL;
|
void MPU_vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vQueueSetQueueNumber(QueueHandle_t xQueue, UBaseType_t uxQueueNumber) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxQueueGetQueueNumber( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxQueueGetQueueNumber(QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
uint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;
|
||||||
uint8_t MPU_ucQueueGetQueueType(QueueHandle_t xQueue) FREERTOS_SYSTEM_CALL;
|
|
||||||
|
|
||||||
/* MPU versions of timers.h API functions. */
|
/* MPU versions of timers.h API functions. */
|
||||||
TimerHandle_t MPU_xTimerCreate(const char *const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void *const pvTimerID,
|
TimerHandle_t MPU_xTimerCreate( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction ) FREERTOS_SYSTEM_CALL;
|
||||||
TimerCallbackFunction_t pxCallbackFunction) FREERTOS_SYSTEM_CALL;
|
TimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void * const pvTimerID, TimerCallbackFunction_t pxCallbackFunction, StaticTimer_t *pxTimerBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
TimerHandle_t MPU_xTimerCreateStatic(const char *const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void *const pvTimerID,
|
void * MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;
|
||||||
TimerCallbackFunction_t pxCallbackFunction, StaticTimer_t *pxTimerBuffer) FREERTOS_SYSTEM_CALL;
|
void MPU_vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) FREERTOS_SYSTEM_CALL;
|
||||||
void * MPU_pvTimerGetTimerID(const TimerHandle_t xTimer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTimerSetTimerID(TimerHandle_t xTimer, void *pvNewID) FREERTOS_SYSTEM_CALL;
|
TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTimerIsTimerActive(TimerHandle_t xTimer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
TaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle(void) FREERTOS_SYSTEM_CALL;
|
const char * MPU_pcTimerGetName( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTimerPendFunctionCall(PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
void MPU_vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) FREERTOS_SYSTEM_CALL;
|
||||||
const char * MPU_pcTimerGetName(TimerHandle_t xTimer) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxTimerGetReloadMode( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vTimerSetReloadMode(TimerHandle_t xTimer, const UBaseType_t uxAutoReload) FREERTOS_SYSTEM_CALL;
|
TickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxTimerGetReloadMode(TimerHandle_t xTimer) FREERTOS_SYSTEM_CALL;
|
TickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;
|
||||||
TickType_t MPU_xTimerGetPeriod(TimerHandle_t xTimer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTimerCreateTimerTask( void ) FREERTOS_SYSTEM_CALL;
|
||||||
TickType_t MPU_xTimerGetExpiryTime(TimerHandle_t xTimer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xTimerCreateTimerTask(void) FREERTOS_SYSTEM_CALL;
|
|
||||||
BaseType_t MPU_xTimerGenericCommand(TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t *const pxHigherPriorityTaskWoken,
|
|
||||||
const TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
|
||||||
|
|
||||||
/* MPU versions of event_group.h API functions. */
|
/* MPU versions of event_group.h API functions. */
|
||||||
EventGroupHandle_t MPU_xEventGroupCreate(void) FREERTOS_SYSTEM_CALL;
|
EventGroupHandle_t MPU_xEventGroupCreate( void ) FREERTOS_SYSTEM_CALL;
|
||||||
EventGroupHandle_t MPU_xEventGroupCreateStatic(StaticEventGroup_t *pxEventGroupBuffer) FREERTOS_SYSTEM_CALL;
|
EventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t *pxEventGroupBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
EventBits_t MPU_xEventGroupWaitBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits,
|
EventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
EventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear ) FREERTOS_SYSTEM_CALL;
|
||||||
EventBits_t MPU_xEventGroupClearBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear) FREERTOS_SYSTEM_CALL;
|
EventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet ) FREERTOS_SYSTEM_CALL;
|
||||||
EventBits_t MPU_xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet) FREERTOS_SYSTEM_CALL;
|
EventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
EventBits_t MPU_xEventGroupSync(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
void MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vEventGroupDelete(EventGroupHandle_t xEventGroup) FREERTOS_SYSTEM_CALL;
|
UBaseType_t MPU_uxEventGroupGetNumber( void* xEventGroup ) FREERTOS_SYSTEM_CALL;
|
||||||
UBaseType_t MPU_uxEventGroupGetNumber(void *xEventGroup) FREERTOS_SYSTEM_CALL;
|
|
||||||
|
|
||||||
/* MPU versions of message/stream_buffer.h API functions. */
|
/* MPU versions of message/stream_buffer.h API functions. */
|
||||||
size_t MPU_xStreamBufferSend(StreamBufferHandle_t xStreamBuffer, const void *pvTxData, size_t xDataLengthBytes, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
size_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer, const void *pvTxData, size_t xDataLengthBytes, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
size_t MPU_xStreamBufferReceive(StreamBufferHandle_t xStreamBuffer, void *pvRxData, size_t xBufferLengthBytes, TickType_t xTicksToWait) FREERTOS_SYSTEM_CALL;
|
size_t MPU_xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer, void *pvRxData, size_t xBufferLengthBytes, TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;
|
||||||
size_t MPU_xStreamBufferNextMessageLengthBytes(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
size_t MPU_xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
void MPU_vStreamBufferDelete(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
void MPU_vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xStreamBufferIsFull(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xStreamBufferIsEmpty(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xStreamBufferReset(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
size_t MPU_xStreamBufferSpacesAvailable(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
size_t MPU_xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
size_t MPU_xStreamBufferBytesAvailable(StreamBufferHandle_t xStreamBuffer) FREERTOS_SYSTEM_CALL;
|
size_t MPU_xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
BaseType_t MPU_xStreamBufferSetTriggerLevel(StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel) FREERTOS_SYSTEM_CALL;
|
BaseType_t MPU_xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel ) FREERTOS_SYSTEM_CALL;
|
||||||
StreamBufferHandle_t MPU_xStreamBufferGenericCreate(size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer) FREERTOS_SYSTEM_CALL;
|
StreamBufferHandle_t MPU_xStreamBufferGenericCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
StreamBufferHandle_t MPU_xStreamBufferGenericCreateStatic(size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer, uint8_t *const pucStreamBufferStorageArea,
|
StreamBufferHandle_t MPU_xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes, size_t xTriggerLevelBytes, BaseType_t xIsMessageBuffer, uint8_t * const pucStreamBufferStorageArea, StaticStreamBuffer_t * const pxStaticStreamBuffer ) FREERTOS_SYSTEM_CALL;
|
||||||
StaticStreamBuffer_t *const pxStaticStreamBuffer) FREERTOS_SYSTEM_CALL;
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* MPU_PROTOTYPES_H */
|
#endif /* MPU_PROTOTYPES_H */
|
||||||
|
|
||||||
|
|||||||
@@ -32,12 +32,12 @@
|
|||||||
only for ports that are using the MPU. */
|
only for ports that are using the MPU. */
|
||||||
#ifdef portUSING_MPU_WRAPPERS
|
#ifdef portUSING_MPU_WRAPPERS
|
||||||
|
|
||||||
/* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
|
/* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is
|
||||||
included from queue.c or task.c to prevent it from having an effect within
|
included from queue.c or task.c to prevent it from having an effect within
|
||||||
those files. */
|
those files. */
|
||||||
#ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
#ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map standard (non MPU) API functions to equivalents that start
|
* Map standard (non MPU) API functions to equivalents that start
|
||||||
* "MPU_". This will cause the application code to call the MPU_
|
* "MPU_". This will cause the application code to call the MPU_
|
||||||
* version, which wraps the non-MPU version with privilege promoting
|
* version, which wraps the non-MPU version with privilege promoting
|
||||||
@@ -45,142 +45,145 @@ those files. */
|
|||||||
* privileges.
|
* privileges.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Map standard tasks.h API functions to the MPU equivalents. */
|
/* Map standard tasks.h API functions to the MPU equivalents. */
|
||||||
#define xTaskCreate MPU_xTaskCreate
|
#define xTaskCreate MPU_xTaskCreate
|
||||||
#define xTaskCreateStatic MPU_xTaskCreateStatic
|
#define xTaskCreateStatic MPU_xTaskCreateStatic
|
||||||
#define xTaskCreateRestricted MPU_xTaskCreateRestricted
|
#define xTaskCreateRestricted MPU_xTaskCreateRestricted
|
||||||
#define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions
|
#define vTaskAllocateMPURegions MPU_vTaskAllocateMPURegions
|
||||||
#define vTaskDelete MPU_vTaskDelete
|
#define vTaskDelete MPU_vTaskDelete
|
||||||
#define vTaskDelay MPU_vTaskDelay
|
#define vTaskDelay MPU_vTaskDelay
|
||||||
#define vTaskDelayUntil MPU_vTaskDelayUntil
|
#define vTaskDelayUntil MPU_vTaskDelayUntil
|
||||||
#define xTaskAbortDelay MPU_xTaskAbortDelay
|
#define xTaskAbortDelay MPU_xTaskAbortDelay
|
||||||
#define uxTaskPriorityGet MPU_uxTaskPriorityGet
|
#define uxTaskPriorityGet MPU_uxTaskPriorityGet
|
||||||
#define eTaskGetState MPU_eTaskGetState
|
#define eTaskGetState MPU_eTaskGetState
|
||||||
#define vTaskGetInfo MPU_vTaskGetInfo
|
#define vTaskGetInfo MPU_vTaskGetInfo
|
||||||
#define vTaskPrioritySet MPU_vTaskPrioritySet
|
#define vTaskPrioritySet MPU_vTaskPrioritySet
|
||||||
#define vTaskSuspend MPU_vTaskSuspend
|
#define vTaskSuspend MPU_vTaskSuspend
|
||||||
#define vTaskResume MPU_vTaskResume
|
#define vTaskResume MPU_vTaskResume
|
||||||
#define vTaskSuspendAll MPU_vTaskSuspendAll
|
#define vTaskSuspendAll MPU_vTaskSuspendAll
|
||||||
#define xTaskResumeAll MPU_xTaskResumeAll
|
#define xTaskResumeAll MPU_xTaskResumeAll
|
||||||
#define xTaskGetTickCount MPU_xTaskGetTickCount
|
#define xTaskGetTickCount MPU_xTaskGetTickCount
|
||||||
#define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks
|
#define uxTaskGetNumberOfTasks MPU_uxTaskGetNumberOfTasks
|
||||||
#define pcTaskGetName MPU_pcTaskGetName
|
#define pcTaskGetName MPU_pcTaskGetName
|
||||||
#define xTaskGetHandle MPU_xTaskGetHandle
|
#define xTaskGetHandle MPU_xTaskGetHandle
|
||||||
#define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark
|
#define uxTaskGetStackHighWaterMark MPU_uxTaskGetStackHighWaterMark
|
||||||
#define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2
|
#define uxTaskGetStackHighWaterMark2 MPU_uxTaskGetStackHighWaterMark2
|
||||||
#define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
|
#define vTaskSetApplicationTaskTag MPU_vTaskSetApplicationTaskTag
|
||||||
#define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
|
#define xTaskGetApplicationTaskTag MPU_xTaskGetApplicationTaskTag
|
||||||
#define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer
|
#define vTaskSetThreadLocalStoragePointer MPU_vTaskSetThreadLocalStoragePointer
|
||||||
#define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer
|
#define pvTaskGetThreadLocalStoragePointer MPU_pvTaskGetThreadLocalStoragePointer
|
||||||
#define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
|
#define xTaskCallApplicationTaskHook MPU_xTaskCallApplicationTaskHook
|
||||||
#define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle
|
#define xTaskGetIdleTaskHandle MPU_xTaskGetIdleTaskHandle
|
||||||
#define uxTaskGetSystemState MPU_uxTaskGetSystemState
|
#define uxTaskGetSystemState MPU_uxTaskGetSystemState
|
||||||
#define vTaskList MPU_vTaskList
|
#define vTaskList MPU_vTaskList
|
||||||
#define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats
|
#define vTaskGetRunTimeStats MPU_vTaskGetRunTimeStats
|
||||||
#define ulTaskGetIdleRunTimeCounter MPU_ulTaskGetIdleRunTimeCounter
|
#define ulTaskGetIdleRunTimeCounter MPU_ulTaskGetIdleRunTimeCounter
|
||||||
#define xTaskGenericNotify MPU_xTaskGenericNotify
|
#define xTaskGenericNotify MPU_xTaskGenericNotify
|
||||||
#define xTaskNotifyWait MPU_xTaskNotifyWait
|
#define xTaskNotifyWait MPU_xTaskNotifyWait
|
||||||
#define ulTaskNotifyTake MPU_ulTaskNotifyTake
|
#define ulTaskNotifyTake MPU_ulTaskNotifyTake
|
||||||
#define xTaskNotifyStateClear MPU_xTaskNotifyStateClear
|
#define xTaskNotifyStateClear MPU_xTaskNotifyStateClear
|
||||||
#define ulTaskNotifyValueClear MPU_ulTaskNotifyValueClear
|
#define ulTaskNotifyValueClear MPU_ulTaskNotifyValueClear
|
||||||
#define xTaskCatchUpTicks MPU_xTaskCatchUpTicks
|
#define xTaskCatchUpTicks MPU_xTaskCatchUpTicks
|
||||||
|
|
||||||
#define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle
|
#define xTaskGetCurrentTaskHandle MPU_xTaskGetCurrentTaskHandle
|
||||||
#define vTaskSetTimeOutState MPU_vTaskSetTimeOutState
|
#define vTaskSetTimeOutState MPU_vTaskSetTimeOutState
|
||||||
#define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut
|
#define xTaskCheckForTimeOut MPU_xTaskCheckForTimeOut
|
||||||
#define xTaskGetSchedulerState MPU_xTaskGetSchedulerState
|
#define xTaskGetSchedulerState MPU_xTaskGetSchedulerState
|
||||||
|
|
||||||
/* Map standard queue.h API functions to the MPU equivalents. */
|
/* Map standard queue.h API functions to the MPU equivalents. */
|
||||||
#define xQueueGenericSend MPU_xQueueGenericSend
|
#define xQueueGenericSend MPU_xQueueGenericSend
|
||||||
#define xQueueReceive MPU_xQueueReceive
|
#define xQueueReceive MPU_xQueueReceive
|
||||||
#define xQueuePeek MPU_xQueuePeek
|
#define xQueuePeek MPU_xQueuePeek
|
||||||
#define xQueueSemaphoreTake MPU_xQueueSemaphoreTake
|
#define xQueueSemaphoreTake MPU_xQueueSemaphoreTake
|
||||||
#define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting
|
#define uxQueueMessagesWaiting MPU_uxQueueMessagesWaiting
|
||||||
#define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable
|
#define uxQueueSpacesAvailable MPU_uxQueueSpacesAvailable
|
||||||
#define vQueueDelete MPU_vQueueDelete
|
#define vQueueDelete MPU_vQueueDelete
|
||||||
#define xQueueCreateMutex MPU_xQueueCreateMutex
|
#define xQueueCreateMutex MPU_xQueueCreateMutex
|
||||||
#define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic
|
#define xQueueCreateMutexStatic MPU_xQueueCreateMutexStatic
|
||||||
#define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore
|
#define xQueueCreateCountingSemaphore MPU_xQueueCreateCountingSemaphore
|
||||||
#define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic
|
#define xQueueCreateCountingSemaphoreStatic MPU_xQueueCreateCountingSemaphoreStatic
|
||||||
#define xQueueGetMutexHolder MPU_xQueueGetMutexHolder
|
#define xQueueGetMutexHolder MPU_xQueueGetMutexHolder
|
||||||
#define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive
|
#define xQueueTakeMutexRecursive MPU_xQueueTakeMutexRecursive
|
||||||
#define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive
|
#define xQueueGiveMutexRecursive MPU_xQueueGiveMutexRecursive
|
||||||
#define xQueueGenericCreate MPU_xQueueGenericCreate
|
#define xQueueGenericCreate MPU_xQueueGenericCreate
|
||||||
#define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic
|
#define xQueueGenericCreateStatic MPU_xQueueGenericCreateStatic
|
||||||
#define xQueueCreateSet MPU_xQueueCreateSet
|
#define xQueueCreateSet MPU_xQueueCreateSet
|
||||||
#define xQueueAddToSet MPU_xQueueAddToSet
|
#define xQueueAddToSet MPU_xQueueAddToSet
|
||||||
#define xQueueRemoveFromSet MPU_xQueueRemoveFromSet
|
#define xQueueRemoveFromSet MPU_xQueueRemoveFromSet
|
||||||
#define xQueueSelectFromSet MPU_xQueueSelectFromSet
|
#define xQueueSelectFromSet MPU_xQueueSelectFromSet
|
||||||
#define xQueueGenericReset MPU_xQueueGenericReset
|
#define xQueueGenericReset MPU_xQueueGenericReset
|
||||||
|
|
||||||
#if (configQUEUE_REGISTRY_SIZE > 0)
|
#if( configQUEUE_REGISTRY_SIZE > 0 )
|
||||||
#define vQueueAddToRegistry MPU_vQueueAddToRegistry
|
#define vQueueAddToRegistry MPU_vQueueAddToRegistry
|
||||||
#define vQueueUnregisterQueue MPU_vQueueUnregisterQueue
|
#define vQueueUnregisterQueue MPU_vQueueUnregisterQueue
|
||||||
#define pcQueueGetName MPU_pcQueueGetName
|
#define pcQueueGetName MPU_pcQueueGetName
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Map standard timer.h API functions to the MPU equivalents. */
|
/* Map standard timer.h API functions to the MPU equivalents. */
|
||||||
#define xTimerCreate MPU_xTimerCreate
|
#define xTimerCreate MPU_xTimerCreate
|
||||||
#define xTimerCreateStatic MPU_xTimerCreateStatic
|
#define xTimerCreateStatic MPU_xTimerCreateStatic
|
||||||
#define pvTimerGetTimerID MPU_pvTimerGetTimerID
|
#define pvTimerGetTimerID MPU_pvTimerGetTimerID
|
||||||
#define vTimerSetTimerID MPU_vTimerSetTimerID
|
#define vTimerSetTimerID MPU_vTimerSetTimerID
|
||||||
#define xTimerIsTimerActive MPU_xTimerIsTimerActive
|
#define xTimerIsTimerActive MPU_xTimerIsTimerActive
|
||||||
#define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle
|
#define xTimerGetTimerDaemonTaskHandle MPU_xTimerGetTimerDaemonTaskHandle
|
||||||
#define xTimerPendFunctionCall MPU_xTimerPendFunctionCall
|
#define xTimerPendFunctionCall MPU_xTimerPendFunctionCall
|
||||||
#define pcTimerGetName MPU_pcTimerGetName
|
#define pcTimerGetName MPU_pcTimerGetName
|
||||||
#define vTimerSetReloadMode MPU_vTimerSetReloadMode
|
#define vTimerSetReloadMode MPU_vTimerSetReloadMode
|
||||||
#define uxTimerGetReloadMode MPU_uxTimerGetReloadMode
|
#define uxTimerGetReloadMode MPU_uxTimerGetReloadMode
|
||||||
#define xTimerGetPeriod MPU_xTimerGetPeriod
|
#define xTimerGetPeriod MPU_xTimerGetPeriod
|
||||||
#define xTimerGetExpiryTime MPU_xTimerGetExpiryTime
|
#define xTimerGetExpiryTime MPU_xTimerGetExpiryTime
|
||||||
#define xTimerGenericCommand MPU_xTimerGenericCommand
|
#define xTimerGenericCommand MPU_xTimerGenericCommand
|
||||||
|
|
||||||
/* Map standard event_group.h API functions to the MPU equivalents. */
|
/* Map standard event_group.h API functions to the MPU equivalents. */
|
||||||
#define xEventGroupCreate MPU_xEventGroupCreate
|
#define xEventGroupCreate MPU_xEventGroupCreate
|
||||||
#define xEventGroupCreateStatic MPU_xEventGroupCreateStatic
|
#define xEventGroupCreateStatic MPU_xEventGroupCreateStatic
|
||||||
#define xEventGroupWaitBits MPU_xEventGroupWaitBits
|
#define xEventGroupWaitBits MPU_xEventGroupWaitBits
|
||||||
#define xEventGroupClearBits MPU_xEventGroupClearBits
|
#define xEventGroupClearBits MPU_xEventGroupClearBits
|
||||||
#define xEventGroupSetBits MPU_xEventGroupSetBits
|
#define xEventGroupSetBits MPU_xEventGroupSetBits
|
||||||
#define xEventGroupSync MPU_xEventGroupSync
|
#define xEventGroupSync MPU_xEventGroupSync
|
||||||
#define vEventGroupDelete MPU_vEventGroupDelete
|
#define vEventGroupDelete MPU_vEventGroupDelete
|
||||||
|
|
||||||
/* Map standard message/stream_buffer.h API functions to the MPU
|
/* Map standard message/stream_buffer.h API functions to the MPU
|
||||||
equivalents. */
|
equivalents. */
|
||||||
#define xStreamBufferSend MPU_xStreamBufferSend
|
#define xStreamBufferSend MPU_xStreamBufferSend
|
||||||
#define xStreamBufferReceive MPU_xStreamBufferReceive
|
#define xStreamBufferReceive MPU_xStreamBufferReceive
|
||||||
#define xStreamBufferNextMessageLengthBytes MPU_xStreamBufferNextMessageLengthBytes
|
#define xStreamBufferNextMessageLengthBytes MPU_xStreamBufferNextMessageLengthBytes
|
||||||
#define vStreamBufferDelete MPU_vStreamBufferDelete
|
#define vStreamBufferDelete MPU_vStreamBufferDelete
|
||||||
#define xStreamBufferIsFull MPU_xStreamBufferIsFull
|
#define xStreamBufferIsFull MPU_xStreamBufferIsFull
|
||||||
#define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty
|
#define xStreamBufferIsEmpty MPU_xStreamBufferIsEmpty
|
||||||
#define xStreamBufferReset MPU_xStreamBufferReset
|
#define xStreamBufferReset MPU_xStreamBufferReset
|
||||||
#define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable
|
#define xStreamBufferSpacesAvailable MPU_xStreamBufferSpacesAvailable
|
||||||
#define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable
|
#define xStreamBufferBytesAvailable MPU_xStreamBufferBytesAvailable
|
||||||
#define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel
|
#define xStreamBufferSetTriggerLevel MPU_xStreamBufferSetTriggerLevel
|
||||||
#define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate
|
#define xStreamBufferGenericCreate MPU_xStreamBufferGenericCreate
|
||||||
#define xStreamBufferGenericCreateStatic MPU_xStreamBufferGenericCreateStatic
|
#define xStreamBufferGenericCreateStatic MPU_xStreamBufferGenericCreateStatic
|
||||||
|
|
||||||
/* Remove the privileged function macro, but keep the PRIVILEGED_DATA
|
|
||||||
macro so applications can place data in privileged access sections
|
|
||||||
(useful when using statically allocated objects). */
|
|
||||||
#define PRIVILEGED_FUNCTION
|
|
||||||
#define PRIVILEGED_DATA __attribute__((section("privileged_data")))
|
|
||||||
#define FREERTOS_SYSTEM_CALL
|
|
||||||
|
|
||||||
#else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
|
/* Remove the privileged function macro, but keep the PRIVILEGED_DATA
|
||||||
|
macro so applications can place data in privileged access sections
|
||||||
|
(useful when using statically allocated objects). */
|
||||||
|
#define PRIVILEGED_FUNCTION
|
||||||
|
#define PRIVILEGED_DATA __attribute__((section("privileged_data")))
|
||||||
|
#define FREERTOS_SYSTEM_CALL
|
||||||
|
|
||||||
/* Ensure API functions go in the privileged execution section. */
|
#else /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
|
||||||
#define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))
|
|
||||||
#define PRIVILEGED_DATA __attribute__((section("privileged_data")))
|
|
||||||
#define FREERTOS_SYSTEM_CALL __attribute__((section("freertos_system_calls")))
|
|
||||||
|
|
||||||
#endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
|
/* Ensure API functions go in the privileged execution section. */
|
||||||
|
#define PRIVILEGED_FUNCTION __attribute__((section("privileged_functions")))
|
||||||
|
#define PRIVILEGED_DATA __attribute__((section("privileged_data")))
|
||||||
|
#define FREERTOS_SYSTEM_CALL __attribute__((section( "freertos_system_calls")))
|
||||||
|
|
||||||
|
#endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */
|
||||||
|
|
||||||
#else /* portUSING_MPU_WRAPPERS */
|
#else /* portUSING_MPU_WRAPPERS */
|
||||||
|
|
||||||
#define PRIVILEGED_FUNCTION
|
#define PRIVILEGED_FUNCTION
|
||||||
#define PRIVILEGED_DATA
|
#define PRIVILEGED_DATA
|
||||||
#define FREERTOS_SYSTEM_CALL
|
#define FREERTOS_SYSTEM_CALL
|
||||||
#define portUSING_MPU_WRAPPERS 0
|
#define portUSING_MPU_WRAPPERS 0
|
||||||
|
|
||||||
#endif /* portUSING_MPU_WRAPPERS */
|
#endif /* portUSING_MPU_WRAPPERS */
|
||||||
|
|
||||||
|
|
||||||
#endif /* MPU_WRAPPERS_H */
|
#endif /* MPU_WRAPPERS_H */
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,8 @@ must be set in the compiler's include path. */
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C"
|
||||||
|
{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "mpu_wrappers.h"
|
#include "mpu_wrappers.h"
|
||||||
@@ -105,9 +106,9 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#if (portUSING_MPU_WRAPPERS == 1)
|
#if (portUSING_MPU_WRAPPERS == 1)
|
||||||
#if (portHAS_STACK_OVERFLOW_CHECKING == 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;
|
StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged) PRIVILEGED_FUNCTION;
|
||||||
#else
|
#else
|
||||||
StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged) PRIVILEGED_FUNCTION;
|
StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#if (portHAS_STACK_OVERFLOW_CHECKING == 1)
|
#if (portHAS_STACK_OVERFLOW_CHECKING == 1)
|
||||||
@@ -117,15 +118,17 @@ StackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxC
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Used by heap_5.c to define the start address and size of each memory region
|
/* Used by heap_5.c to define the start address and size of each memory region
|
||||||
that together comprise the total FreeRTOS heap space. */
|
that together comprise the total FreeRTOS heap space. */
|
||||||
typedef struct HeapRegion {
|
typedef struct HeapRegion
|
||||||
|
{
|
||||||
uint8_t *pucStartAddress;
|
uint8_t *pucStartAddress;
|
||||||
size_t xSizeInBytes;
|
size_t xSizeInBytes;
|
||||||
} HeapRegion_t;
|
} HeapRegion_t;
|
||||||
|
|
||||||
/* Used to pass information about the heap out of vPortGetHeapStats(). */
|
/* Used to pass information about the heap out of vPortGetHeapStats(). */
|
||||||
typedef struct xHeapStats {
|
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 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 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 xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
|
||||||
@@ -133,9 +136,9 @@ typedef struct xHeapStats {
|
|||||||
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 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 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. */
|
size_t xNumberOfSuccessfulFrees; /* The number of calls to vPortFree() that has successfully freed a block of memory. */
|
||||||
} HeapStats_t;
|
} HeapStats_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used to define multiple heap regions for use by heap_5.c. This function
|
* Used to define multiple heap regions for use by heap_5.c. This function
|
||||||
* must be called before any calls to pvPortMalloc() - not creating a task,
|
* must be called before any calls to pvPortMalloc() - not creating a task,
|
||||||
* queue, semaphore, mutex, software timer, event group, etc. will result in
|
* queue, semaphore, mutex, software timer, event group, etc. will result in
|
||||||
@@ -146,35 +149,35 @@ typedef struct xHeapStats {
|
|||||||
* terminated by a HeapRegions_t structure that has a size of 0. The region
|
* 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.
|
* 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
|
* Returns a HeapStats_t structure filled with information about the current
|
||||||
* heap state.
|
* heap state.
|
||||||
*/
|
*/
|
||||||
void vPortGetHeapStats(HeapStats_t *pxHeapStats);
|
void vPortGetHeapStats(HeapStats_t *pxHeapStats);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map to the memory management routines required for the port.
|
* Map to the memory management routines required for the port.
|
||||||
*/
|
*/
|
||||||
void * pvPortMalloc(size_t xSize) PRIVILEGED_FUNCTION;
|
void *pvPortMalloc(size_t xSize) PRIVILEGED_FUNCTION;
|
||||||
void vPortFree(void *pv) PRIVILEGED_FUNCTION;
|
void vPortFree(void *pv) PRIVILEGED_FUNCTION;
|
||||||
void vPortInitialiseBlocks(void) PRIVILEGED_FUNCTION;
|
void vPortInitialiseBlocks(void) PRIVILEGED_FUNCTION;
|
||||||
size_t xPortGetFreeHeapSize(void) PRIVILEGED_FUNCTION;
|
size_t xPortGetFreeHeapSize(void) PRIVILEGED_FUNCTION;
|
||||||
size_t xPortGetMinimumEverFreeHeapSize(void) PRIVILEGED_FUNCTION;
|
size_t xPortGetMinimumEverFreeHeapSize(void) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup the hardware ready for the scheduler to take control. This generally
|
* 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.
|
* 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
|
* Undo any hardware/ISR setup that was performed by xPortStartScheduler() so
|
||||||
* the hardware is left in its original condition after the scheduler stops
|
* the hardware is left in its original condition after the scheduler stops
|
||||||
* executing.
|
* executing.
|
||||||
*/
|
*/
|
||||||
void vPortEndScheduler(void) PRIVILEGED_FUNCTION;
|
void vPortEndScheduler(void) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The structures and methods of manipulating the MPU are contained within the
|
* The structures and methods of manipulating the MPU are contained within the
|
||||||
@@ -184,8 +187,8 @@ void vPortEndScheduler(void) PRIVILEGED_FUNCTION;
|
|||||||
* contained in xRegions.
|
* contained in xRegions.
|
||||||
*/
|
*/
|
||||||
#if (portUSING_MPU_WRAPPERS == 1)
|
#if (portUSING_MPU_WRAPPERS == 1)
|
||||||
struct xMEMORY_REGION;
|
struct xMEMORY_REGION;
|
||||||
void vPortStoreTaskMPUSettings(xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION *const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth) PRIVILEGED_FUNCTION;
|
void vPortStoreTaskMPUSettings(xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION *const xRegions, StackType_t *pxBottomOfStack, uint32_t ulStackDepth) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -32,37 +32,37 @@
|
|||||||
* Defines the prototype to which task functions must conform. Defined in this
|
* Defines the prototype to which task functions must conform. Defined in this
|
||||||
* file to ensure the type is known before portable.h is included.
|
* file to ensure the type is known before portable.h is included.
|
||||||
*/
|
*/
|
||||||
typedef void (*TaskFunction_t)(void *);
|
typedef void (*TaskFunction_t)( void * );
|
||||||
|
|
||||||
/* Converts a time in milliseconds to a time in ticks. This macro can be
|
/* Converts a time in milliseconds to a time in ticks. This macro can be
|
||||||
overridden by a macro of the same name defined in FreeRTOSConfig.h in case the
|
overridden by a macro of the same name defined in FreeRTOSConfig.h in case the
|
||||||
definition here is not suitable for your application. */
|
definition here is not suitable for your application. */
|
||||||
#ifndef pdMS_TO_TICKS
|
#ifndef pdMS_TO_TICKS
|
||||||
#define pdMS_TO_TICKS(xTimeInMs) ((TickType_t)(((TickType_t)(xTimeInMs) * (TickType_t)configTICK_RATE_HZ) / (TickType_t)1000))
|
#define pdMS_TO_TICKS( xTimeInMs ) ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define pdFALSE ((BaseType_t)0)
|
#define pdFALSE ( ( BaseType_t ) 0 )
|
||||||
#define pdTRUE ((BaseType_t)1)
|
#define pdTRUE ( ( BaseType_t ) 1 )
|
||||||
|
|
||||||
#define pdPASS (pdTRUE)
|
#define pdPASS ( pdTRUE )
|
||||||
#define pdFAIL (pdFALSE)
|
#define pdFAIL ( pdFALSE )
|
||||||
#define errQUEUE_EMPTY ((BaseType_t)0)
|
#define errQUEUE_EMPTY ( ( BaseType_t ) 0 )
|
||||||
#define errQUEUE_FULL ((BaseType_t)0)
|
#define errQUEUE_FULL ( ( BaseType_t ) 0 )
|
||||||
|
|
||||||
/* FreeRTOS error definitions. */
|
/* FreeRTOS error definitions. */
|
||||||
#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY (-1)
|
#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 )
|
||||||
#define errQUEUE_BLOCKED (-4)
|
#define errQUEUE_BLOCKED ( -4 )
|
||||||
#define errQUEUE_YIELD (-5)
|
#define errQUEUE_YIELD ( -5 )
|
||||||
|
|
||||||
/* Macros used for basic data corruption checks. */
|
/* Macros used for basic data corruption checks. */
|
||||||
#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES
|
#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES
|
||||||
#define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 0
|
#define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (configUSE_16_BIT_TICKS == 1)
|
#if( configUSE_16_BIT_TICKS == 1 )
|
||||||
#define pdINTEGRITY_CHECK_VALUE 0x5a5a
|
#define pdINTEGRITY_CHECK_VALUE 0x5a5a
|
||||||
#else
|
#else
|
||||||
#define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL
|
#define pdINTEGRITY_CHECK_VALUE 0x5a5a5a5aUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The following errno values are used by FreeRTOS+ components, not FreeRTOS
|
/* The following errno values are used by FreeRTOS+ components, not FreeRTOS
|
||||||
@@ -117,4 +117,8 @@ itself. */
|
|||||||
#define pdLITTLE_ENDIAN pdFREERTOS_LITTLE_ENDIAN
|
#define pdLITTLE_ENDIAN pdFREERTOS_LITTLE_ENDIAN
|
||||||
#define pdBIG_ENDIAN pdFREERTOS_BIG_ENDIAN
|
#define pdBIG_ENDIAN pdFREERTOS_BIG_ENDIAN
|
||||||
|
|
||||||
|
|
||||||
#endif /* PROJDEFS_H */
|
#endif /* PROJDEFS_H */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,12 @@
|
|||||||
* 1 tab == 4 spaces!
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef QUEUE_H
|
#ifndef QUEUE_H
|
||||||
#define QUEUE_H
|
#define QUEUE_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h" must appear in source files before "include queue.h"
|
#error "include FreeRTOS.h" must appear in source files before "include queue.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -44,34 +45,34 @@ extern "C" {
|
|||||||
* xQueueSend(), xQueueReceive(), etc.
|
* xQueueSend(), xQueueReceive(), etc.
|
||||||
*/
|
*/
|
||||||
struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */
|
struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */
|
||||||
typedef struct QueueDefinition *QueueHandle_t;
|
typedef struct QueueDefinition * QueueHandle_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type by which queue sets are referenced. For example, a call to
|
* Type by which queue sets are referenced. For example, a call to
|
||||||
* xQueueCreateSet() returns an xQueueSet variable that can then be used as a
|
* xQueueCreateSet() returns an xQueueSet variable that can then be used as a
|
||||||
* parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc.
|
* parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc.
|
||||||
*/
|
*/
|
||||||
typedef struct QueueDefinition *QueueSetHandle_t;
|
typedef struct QueueDefinition * QueueSetHandle_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Queue sets can contain both queues and semaphores, so the
|
* Queue sets can contain both queues and semaphores, so the
|
||||||
* QueueSetMemberHandle_t is defined as a type to be used where a parameter or
|
* QueueSetMemberHandle_t is defined as a type to be used where a parameter or
|
||||||
* return value can be either an QueueHandle_t or an SemaphoreHandle_t.
|
* return value can be either an QueueHandle_t or an SemaphoreHandle_t.
|
||||||
*/
|
*/
|
||||||
typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
typedef struct QueueDefinition * QueueSetMemberHandle_t;
|
||||||
|
|
||||||
/* For internal use only. */
|
/* For internal use only. */
|
||||||
#define queueSEND_TO_BACK ((BaseType_t)0)
|
#define queueSEND_TO_BACK ( ( BaseType_t ) 0 )
|
||||||
#define queueSEND_TO_FRONT ((BaseType_t)1)
|
#define queueSEND_TO_FRONT ( ( BaseType_t ) 1 )
|
||||||
#define queueOVERWRITE ((BaseType_t)2)
|
#define queueOVERWRITE ( ( BaseType_t ) 2 )
|
||||||
|
|
||||||
/* For internal use only. These definitions *must* match those in queue.c. */
|
/* For internal use only. These definitions *must* match those in queue.c. */
|
||||||
#define queueQUEUE_TYPE_BASE ((uint8_t)0U)
|
#define queueQUEUE_TYPE_BASE ( ( uint8_t ) 0U )
|
||||||
#define queueQUEUE_TYPE_SET ((uint8_t)0U)
|
#define queueQUEUE_TYPE_SET ( ( uint8_t ) 0U )
|
||||||
#define queueQUEUE_TYPE_MUTEX ((uint8_t)1U)
|
#define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U )
|
||||||
#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ((uint8_t)2U)
|
#define queueQUEUE_TYPE_COUNTING_SEMAPHORE ( ( uint8_t ) 2U )
|
||||||
#define queueQUEUE_TYPE_BINARY_SEMAPHORE ((uint8_t)3U)
|
#define queueQUEUE_TYPE_BINARY_SEMAPHORE ( ( uint8_t ) 3U )
|
||||||
#define queueQUEUE_TYPE_RECURSIVE_MUTEX ((uint8_t)4U)
|
#define queueQUEUE_TYPE_RECURSIVE_MUTEX ( ( uint8_t ) 4U )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -141,8 +142,8 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueCreate xQueueCreate
|
* \defgroup xQueueCreate xQueueCreate
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
#define xQueueCreate(uxQueueLength, uxItemSize) xQueueGenericCreate((uxQueueLength), (uxItemSize), (queueQUEUE_TYPE_BASE))
|
#define xQueueCreate( uxQueueLength, uxItemSize ) xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -227,9 +228,8 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueCreateStatic xQueueCreateStatic
|
* \defgroup xQueueCreateStatic xQueueCreateStatic
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define xQueueCreateStatic(uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer) \
|
#define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer ) xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) )
|
||||||
xQueueGenericCreateStatic((uxQueueLength), (uxItemSize), (pucQueueStorage), (pxQueueBuffer), (queueQUEUE_TYPE_BASE))
|
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -310,7 +310,7 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueSend xQueueSend
|
* \defgroup xQueueSend xQueueSend
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueSendToFront(xQueue, pvItemToQueue, xTicksToWait) xQueueGenericSend((xQueue), (pvItemToQueue), (xTicksToWait), queueSEND_TO_FRONT)
|
#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -392,7 +392,7 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueSend xQueueSend
|
* \defgroup xQueueSend xQueueSend
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueSendToBack(xQueue, pvItemToQueue, xTicksToWait) xQueueGenericSend((xQueue), (pvItemToQueue), (xTicksToWait), queueSEND_TO_BACK)
|
#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -476,7 +476,7 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueSend xQueueSend
|
* \defgroup xQueueSend xQueueSend
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueSend(xQueue, pvItemToQueue, xTicksToWait) xQueueGenericSend((xQueue), (pvItemToQueue), (xTicksToWait), queueSEND_TO_BACK)
|
#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -559,7 +559,8 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueOverwrite xQueueOverwrite
|
* \defgroup xQueueOverwrite xQueueOverwrite
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueOverwrite(xQueue, pvItemToQueue) xQueueGenericSend((xQueue), (pvItemToQueue), 0, queueOVERWRITE)
|
#define xQueueOverwrite( xQueue, pvItemToQueue ) xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -646,7 +647,7 @@ typedef struct QueueDefinition *QueueSetMemberHandle_t;
|
|||||||
* \defgroup xQueueSend xQueueSend
|
* \defgroup xQueueSend xQueueSend
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueGenericSend(QueueHandle_t xQueue, const void *const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueGenericSend( QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -740,7 +741,7 @@ BaseType_t xQueueGenericSend(QueueHandle_t xQueue, const void *const pvItemToQue
|
|||||||
* \defgroup xQueuePeek xQueuePeek
|
* \defgroup xQueuePeek xQueuePeek
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueuePeek(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xQueuePeek( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -773,7 +774,7 @@ BaseType_t xQueuePeek(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTi
|
|||||||
* \defgroup xQueuePeekFromISR xQueuePeekFromISR
|
* \defgroup xQueuePeekFromISR xQueuePeekFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueuePeekFromISR(QueueHandle_t xQueue, void *const pvBuffer) PRIVILEGED_FUNCTION;
|
BaseType_t xQueuePeekFromISR( QueueHandle_t xQueue, void * const pvBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -864,7 +865,7 @@ BaseType_t xQueuePeekFromISR(QueueHandle_t xQueue, void *const pvBuffer) PRIVILE
|
|||||||
* \defgroup xQueueReceive xQueueReceive
|
* \defgroup xQueueReceive xQueueReceive
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueReceive(QueueHandle_t xQueue, void *const pvBuffer, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueReceive( QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -879,7 +880,7 @@ BaseType_t xQueueReceive(QueueHandle_t xQueue, void *const pvBuffer, TickType_t
|
|||||||
* \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting
|
* \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -896,7 +897,7 @@ UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue) PRIVILEGED_FUNCTI
|
|||||||
* \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting
|
* \defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxQueueSpacesAvailable(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -910,7 +911,7 @@ UBaseType_t uxQueueSpacesAvailable(const QueueHandle_t xQueue) PRIVILEGED_FUNCTI
|
|||||||
* \defgroup vQueueDelete vQueueDelete
|
* \defgroup vQueueDelete vQueueDelete
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
void vQueueDelete(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
void vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -980,7 +981,8 @@ void vQueueDelete(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueSendToFrontFromISR(xQueue, pvItemToQueue, pxHigherPriorityTaskWoken) xQueueGenericSendFromISR((xQueue), (pvItemToQueue), (pxHigherPriorityTaskWoken), queueSEND_TO_FRONT)
|
#define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -1050,7 +1052,7 @@ void vQueueDelete(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueSendToBackFromISR(xQueue, pvItemToQueue, pxHigherPriorityTaskWoken) xQueueGenericSendFromISR((xQueue), (pvItemToQueue), (pxHigherPriorityTaskWoken), queueSEND_TO_BACK)
|
#define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -1137,7 +1139,7 @@ uint32_t ulVarToSend, ulValReceived;
|
|||||||
* \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR
|
* \defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueOverwriteFromISR(xQueue, pvItemToQueue, pxHigherPriorityTaskWoken) xQueueGenericSendFromISR((xQueue), (pvItemToQueue), (pxHigherPriorityTaskWoken), queueOVERWRITE)
|
#define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -1211,7 +1213,7 @@ uint32_t ulVarToSend, ulValReceived;
|
|||||||
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
#define xQueueSendFromISR(xQueue, pvItemToQueue, pxHigherPriorityTaskWoken) xQueueGenericSendFromISR((xQueue), (pvItemToQueue), (pxHigherPriorityTaskWoken), queueSEND_TO_BACK)
|
#define xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -1290,8 +1292,8 @@ uint32_t ulVarToSend, ulValReceived;
|
|||||||
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
* \defgroup xQueueSendFromISR xQueueSendFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueGenericSendFromISR(QueueHandle_t xQueue, const void *const pvItemToQueue, BaseType_t *const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t * const pxHigherPriorityTaskWoken, const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t xQueueGiveFromISR(QueueHandle_t xQueue, BaseType_t *const pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueGiveFromISR( QueueHandle_t xQueue, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* queue. h
|
* queue. h
|
||||||
@@ -1380,15 +1382,15 @@ BaseType_t xQueueGiveFromISR(QueueHandle_t xQueue, BaseType_t *const pxHigherPri
|
|||||||
* \defgroup xQueueReceiveFromISR xQueueReceiveFromISR
|
* \defgroup xQueueReceiveFromISR xQueueReceiveFromISR
|
||||||
* \ingroup QueueManagement
|
* \ingroup QueueManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueReceiveFromISR(QueueHandle_t xQueue, void *const pvBuffer, BaseType_t *const pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue, void * const pvBuffer, BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Utilities to query queues that are safe to use from an ISR. These utilities
|
* Utilities to query queues that are safe to use from an ISR. These utilities
|
||||||
* should be used only from witin an ISR, or within a critical section.
|
* should be used only from witin an ISR, or within a critical section.
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueIsQueueEmptyFromISR(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t xQueueIsQueueFullFromISR(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
UBaseType_t uxQueueMessagesWaitingFromISR(const QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The functions defined above are for passing data to and from tasks. The
|
* The functions defined above are for passing data to and from tasks. The
|
||||||
@@ -1399,36 +1401,36 @@ UBaseType_t uxQueueMessagesWaitingFromISR(const QueueHandle_t xQueue) PRIVILEGED
|
|||||||
* should not be called directly from application code. Instead use the macro
|
* should not be called directly from application code. Instead use the macro
|
||||||
* wrappers defined within croutine.h.
|
* wrappers defined within croutine.h.
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueCRSendFromISR(QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken);
|
BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t xCoRoutinePreviouslyWoken );
|
||||||
BaseType_t xQueueCRReceiveFromISR(QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken);
|
BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxTaskWoken );
|
||||||
BaseType_t xQueueCRSend(QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait);
|
BaseType_t xQueueCRSend( QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait );
|
||||||
BaseType_t xQueueCRReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait);
|
BaseType_t xQueueCRReceive( QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For internal use only. Use xSemaphoreCreateMutex(),
|
* For internal use only. Use xSemaphoreCreateMutex(),
|
||||||
* xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling
|
* xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling
|
||||||
* these functions directly.
|
* these functions directly.
|
||||||
*/
|
*/
|
||||||
QueueHandle_t xQueueCreateMutex(const uint8_t ucQueueType) PRIVILEGED_FUNCTION;
|
QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
|
||||||
QueueHandle_t xQueueCreateMutexStatic(const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue) PRIVILEGED_FUNCTION;
|
QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
|
||||||
QueueHandle_t xQueueCreateCountingSemaphore(const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount) PRIVILEGED_FUNCTION;
|
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
|
||||||
QueueHandle_t xQueueCreateCountingSemaphoreStatic(const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue) PRIVILEGED_FUNCTION;
|
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount, const UBaseType_t uxInitialCount, StaticQueue_t *pxStaticQueue ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t xQueueSemaphoreTake(QueueHandle_t xQueue, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
TaskHandle_t xQueueGetMutexHolder(QueueHandle_t xSemaphore) PRIVILEGED_FUNCTION;
|
TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
|
||||||
TaskHandle_t xQueueGetMutexHolderFromISR(QueueHandle_t xSemaphore) PRIVILEGED_FUNCTION;
|
TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For internal use only. Use xSemaphoreTakeMutexRecursive() or
|
* For internal use only. Use xSemaphoreTakeMutexRecursive() or
|
||||||
* xSemaphoreGiveMutexRecursive() instead of calling these functions directly.
|
* xSemaphoreGiveMutexRecursive() instead of calling these functions directly.
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueTakeMutexRecursive(QueueHandle_t xMutex, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t xQueueGiveMutexRecursive(QueueHandle_t xMutex) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reset a queue back to its original empty state. The return value is now
|
* Reset a queue back to its original empty state. The return value is now
|
||||||
* obsolete and is always set to pdPASS.
|
* obsolete and is always set to pdPASS.
|
||||||
*/
|
*/
|
||||||
#define xQueueReset(xQueue) xQueueGenericReset(xQueue, pdFALSE)
|
#define xQueueReset( xQueue ) xQueueGenericReset( xQueue, pdFALSE )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The registry is provided as a means for kernel aware debuggers to
|
* The registry is provided as a means for kernel aware debuggers to
|
||||||
@@ -1452,8 +1454,8 @@ BaseType_t xQueueGiveMutexRecursive(QueueHandle_t xMutex) PRIVILEGED_FUNCTION;
|
|||||||
* stores a pointer to the string - so the string must be persistent (global or
|
* stores a pointer to the string - so the string must be persistent (global or
|
||||||
* preferably in ROM/Flash), not on the stack.
|
* preferably in ROM/Flash), not on the stack.
|
||||||
*/
|
*/
|
||||||
#if (configQUEUE_REGISTRY_SIZE > 0)
|
#if( configQUEUE_REGISTRY_SIZE > 0 )
|
||||||
void vQueueAddToRegistry(QueueHandle_t xQueue, const char *pcQueueName) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
void vQueueAddToRegistry( QueueHandle_t xQueue, const char *pcQueueName ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1466,8 +1468,8 @@ void vQueueAddToRegistry(QueueHandle_t xQueue, const char *pcQueueName) PRIVILEG
|
|||||||
*
|
*
|
||||||
* @param xQueue The handle of the queue being removed from the registry.
|
* @param xQueue The handle of the queue being removed from the registry.
|
||||||
*/
|
*/
|
||||||
#if (configQUEUE_REGISTRY_SIZE > 0)
|
#if( configQUEUE_REGISTRY_SIZE > 0 )
|
||||||
void vQueueUnregisterQueue(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1481,8 +1483,8 @@ void vQueueUnregisterQueue(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
|||||||
* queue is returned. If the queue is not in the registry then NULL is
|
* queue is returned. If the queue is not in the registry then NULL is
|
||||||
* returned.
|
* returned.
|
||||||
*/
|
*/
|
||||||
#if (configQUEUE_REGISTRY_SIZE > 0)
|
#if( configQUEUE_REGISTRY_SIZE > 0 )
|
||||||
const char *pcQueueGetName(QueueHandle_t xQueue) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
const char *pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1490,8 +1492,8 @@ const char *pcQueueGetName(QueueHandle_t xQueue) PRIVILEGED_FUNCTION; /*lint !e9
|
|||||||
* allocation. This is called by other functions and macros that create other
|
* allocation. This is called by other functions and macros that create other
|
||||||
* RTOS objects that use the queue structure as their base.
|
* RTOS objects that use the queue structure as their base.
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
QueueHandle_t xQueueGenericCreate(const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType) PRIVILEGED_FUNCTION;
|
QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1499,9 +1501,8 @@ QueueHandle_t xQueueGenericCreate(const UBaseType_t uxQueueLength, const UBaseTy
|
|||||||
* allocation. This is called by other functions and macros that create other
|
* allocation. This is called by other functions and macros that create other
|
||||||
* RTOS objects that use the queue structure as their base.
|
* RTOS objects that use the queue structure as their base.
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
QueueHandle_t xQueueGenericCreateStatic(const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue,
|
QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength, const UBaseType_t uxItemSize, uint8_t *pucQueueStorage, StaticQueue_t *pxStaticQueue, const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
|
||||||
const uint8_t ucQueueType) PRIVILEGED_FUNCTION;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1552,7 +1553,7 @@ QueueHandle_t xQueueGenericCreateStatic(const UBaseType_t uxQueueLength, const U
|
|||||||
* @return If the queue set is created successfully then a handle to the created
|
* @return If the queue set is created successfully then a handle to the created
|
||||||
* queue set is returned. Otherwise NULL is returned.
|
* queue set is returned. Otherwise NULL is returned.
|
||||||
*/
|
*/
|
||||||
QueueSetHandle_t xQueueCreateSet(const UBaseType_t uxEventQueueLength) PRIVILEGED_FUNCTION;
|
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adds a queue or semaphore to a queue set that was previously created by a
|
* Adds a queue or semaphore to a queue set that was previously created by a
|
||||||
@@ -1576,7 +1577,7 @@ QueueSetHandle_t xQueueCreateSet(const UBaseType_t uxEventQueueLength) PRIVILEGE
|
|||||||
* queue set because it is already a member of a different queue set then pdFAIL
|
* queue set because it is already a member of a different queue set then pdFAIL
|
||||||
* is returned.
|
* is returned.
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Removes a queue or semaphore from a queue set. A queue or semaphore can only
|
* Removes a queue or semaphore from a queue set. A queue or semaphore can only
|
||||||
@@ -1595,7 +1596,7 @@ BaseType_t xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHand
|
|||||||
* then pdPASS is returned. If the queue was not in the queue set, or the
|
* then pdPASS is returned. If the queue was not in the queue set, or the
|
||||||
* queue (or semaphore) was not empty, then pdFAIL is returned.
|
* queue (or semaphore) was not empty, then pdFAIL is returned.
|
||||||
*/
|
*/
|
||||||
BaseType_t xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* xQueueSelectFromSet() selects from the members of a queue set a queue or
|
* xQueueSelectFromSet() selects from the members of a queue set a queue or
|
||||||
@@ -1631,22 +1632,24 @@ BaseType_t xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSe
|
|||||||
* in the queue set that is available, or NULL if no such queue or semaphore
|
* in the queue set that is available, or NULL if no such queue or semaphore
|
||||||
* exists before before the specified block time expires.
|
* exists before before the specified block time expires.
|
||||||
*/
|
*/
|
||||||
QueueSetMemberHandle_t xQueueSelectFromSet(QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A version of xQueueSelectFromSet() that can be used from an ISR.
|
* A version of xQueueSelectFromSet() that can be used from an ISR.
|
||||||
*/
|
*/
|
||||||
QueueSetMemberHandle_t xQueueSelectFromSetFromISR(QueueSetHandle_t xQueueSet) PRIVILEGED_FUNCTION;
|
QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* Not public API functions. */
|
/* Not public API functions. */
|
||||||
void vQueueWaitForMessageRestricted(QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely) PRIVILEGED_FUNCTION;
|
void vQueueWaitForMessageRestricted( QueueHandle_t xQueue, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t xQueueGenericReset(QueueHandle_t xQueue, BaseType_t xNewQueue) PRIVILEGED_FUNCTION;
|
BaseType_t xQueueGenericReset( QueueHandle_t xQueue, BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;
|
||||||
void vQueueSetQueueNumber(QueueHandle_t xQueue, UBaseType_t uxQueueNumber) PRIVILEGED_FUNCTION;
|
void vQueueSetQueueNumber( QueueHandle_t xQueue, UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
|
||||||
UBaseType_t uxQueueGetQueueNumber(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
uint8_t ucQueueGetQueueType(QueueHandle_t xQueue) PRIVILEGED_FUNCTION;
|
uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* QUEUE_H */
|
#endif /* QUEUE_H */
|
||||||
|
|
||||||
|
|||||||
@@ -29,16 +29,17 @@
|
|||||||
#define SEMAPHORE_H
|
#define SEMAPHORE_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h" must appear in source files before "include semphr.h"
|
#error "include FreeRTOS.h" must appear in source files before "include semphr.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
|
|
||||||
typedef QueueHandle_t SemaphoreHandle_t;
|
typedef QueueHandle_t SemaphoreHandle_t;
|
||||||
|
|
||||||
#define semBINARY_SEMAPHORE_QUEUE_LENGTH ((uint8_t)1U)
|
#define semBINARY_SEMAPHORE_QUEUE_LENGTH ( ( uint8_t ) 1U )
|
||||||
#define semSEMAPHORE_QUEUE_ITEM_LENGTH ((uint8_t)0U)
|
#define semSEMAPHORE_QUEUE_ITEM_LENGTH ( ( uint8_t ) 0U )
|
||||||
#define semGIVE_BLOCK_TIME ((TickType_t)0U)
|
#define semGIVE_BLOCK_TIME ( ( TickType_t ) 0U )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
@@ -89,12 +90,13 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary
|
* \defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
#define vSemaphoreCreateBinary(xSemaphore) \
|
#define vSemaphoreCreateBinary( xSemaphore ) \
|
||||||
{ \
|
{ \
|
||||||
(xSemaphore) = xQueueGenericCreate((UBaseType_t)1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE); \
|
( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \
|
||||||
if ((xSemaphore) != NULL) { \
|
if( ( xSemaphore ) != NULL ) \
|
||||||
(void)xSemaphoreGive((xSemaphore)); \
|
{ \
|
||||||
|
( void ) xSemaphoreGive( ( xSemaphore ) ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -156,8 +158,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateBinary xSemaphoreCreateBinary
|
* \defgroup xSemaphoreCreateBinary xSemaphoreCreateBinary
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
#define xSemaphoreCreateBinary() xQueueGenericCreate((UBaseType_t)1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE)
|
#define xSemaphoreCreateBinary() xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -215,8 +217,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic
|
* \defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define xSemaphoreCreateBinaryStatic(pxStaticSemaphore) xQueueGenericCreateStatic((UBaseType_t)1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticSemaphore, queueQUEUE_TYPE_BINARY_SEMAPHORE)
|
#define xSemaphoreCreateBinaryStatic( pxStaticSemaphore ) xQueueGenericCreateStatic( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticSemaphore, queueQUEUE_TYPE_BINARY_SEMAPHORE )
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -284,7 +286,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreTake xSemaphoreTake
|
* \defgroup xSemaphoreTake xSemaphoreTake
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreTake(xSemaphore, xBlockTime) xQueueSemaphoreTake((xSemaphore), (xBlockTime))
|
#define xSemaphoreTake( xSemaphore, xBlockTime ) xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
@@ -377,8 +379,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive
|
* \defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configUSE_RECURSIVE_MUTEXES == 1)
|
#if( configUSE_RECURSIVE_MUTEXES == 1 )
|
||||||
#define xSemaphoreTakeRecursive(xMutex, xBlockTime) xQueueTakeMutexRecursive((xMutex), (xBlockTime))
|
#define xSemaphoreTakeRecursive( xMutex, xBlockTime ) xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -442,7 +444,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreGive xSemaphoreGive
|
* \defgroup xSemaphoreGive xSemaphoreGive
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreGive(xSemaphore) xQueueGenericSend((QueueHandle_t)(xSemaphore), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK)
|
#define xSemaphoreGive( xSemaphore ) xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
@@ -526,8 +528,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive
|
* \defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configUSE_RECURSIVE_MUTEXES == 1)
|
#if( configUSE_RECURSIVE_MUTEXES == 1 )
|
||||||
#define xSemaphoreGiveRecursive(xMutex) xQueueGiveMutexRecursive((xMutex))
|
#define xSemaphoreGiveRecursive( xMutex ) xQueueGiveMutexRecursive( ( xMutex ) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -619,7 +621,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR
|
* \defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreGiveFromISR(xSemaphore, pxHigherPriorityTaskWoken) xQueueGiveFromISR((QueueHandle_t)(xSemaphore), (pxHigherPriorityTaskWoken))
|
#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
@@ -653,7 +655,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* @return pdTRUE if the semaphore was successfully taken, otherwise
|
* @return pdTRUE if the semaphore was successfully taken, otherwise
|
||||||
* pdFALSE
|
* pdFALSE
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreTakeFromISR(xSemaphore, pxHigherPriorityTaskWoken) xQueueReceiveFromISR((QueueHandle_t)(xSemaphore), NULL, (pxHigherPriorityTaskWoken))
|
#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken ) xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
@@ -710,8 +712,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateMutex xSemaphoreCreateMutex
|
* \defgroup xSemaphoreCreateMutex xSemaphoreCreateMutex
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
#define xSemaphoreCreateMutex() xQueueCreateMutex(queueQUEUE_TYPE_MUTEX)
|
#define xSemaphoreCreateMutex() xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -771,10 +773,11 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic
|
* \defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define xSemaphoreCreateMutexStatic(pxMutexBuffer) xQueueCreateMutexStatic(queueQUEUE_TYPE_MUTEX, (pxMutexBuffer))
|
#define xSemaphoreCreateMutexStatic( pxMutexBuffer ) xQueueCreateMutexStatic( queueQUEUE_TYPE_MUTEX, ( pxMutexBuffer ) )
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr. h
|
* semphr. h
|
||||||
* <pre>SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )</pre>
|
* <pre>SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void )</pre>
|
||||||
@@ -838,8 +841,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex
|
* \defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if ((configSUPPORT_DYNAMIC_ALLOCATION == 1) && (configUSE_RECURSIVE_MUTEXES == 1))
|
#if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) )
|
||||||
#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex(queueQUEUE_TYPE_RECURSIVE_MUTEX)
|
#define xSemaphoreCreateRecursiveMutex() xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -911,8 +914,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic
|
* \defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if ((configSUPPORT_STATIC_ALLOCATION == 1) && (configUSE_RECURSIVE_MUTEXES == 1))
|
#if( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) )
|
||||||
#define xSemaphoreCreateRecursiveMutexStatic(pxStaticSemaphore) xQueueCreateMutexStatic(queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore)
|
#define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore ) xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, pxStaticSemaphore )
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -991,8 +994,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting
|
* \defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
#define xSemaphoreCreateCounting(uxMaxCount, uxInitialCount) xQueueCreateCountingSemaphore((uxMaxCount), (uxInitialCount))
|
#define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount ) xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1076,8 +1079,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic
|
* \defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
#define xSemaphoreCreateCountingStatic(uxMaxCount, uxInitialCount, pxSemaphoreBuffer) xQueueCreateCountingSemaphoreStatic((uxMaxCount), (uxInitialCount), (pxSemaphoreBuffer))
|
#define xSemaphoreCreateCountingStatic( uxMaxCount, uxInitialCount, pxSemaphoreBuffer ) xQueueCreateCountingSemaphoreStatic( ( uxMaxCount ), ( uxInitialCount ), ( pxSemaphoreBuffer ) )
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1092,7 +1095,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* \defgroup vSemaphoreDelete vSemaphoreDelete
|
* \defgroup vSemaphoreDelete vSemaphoreDelete
|
||||||
* \ingroup Semaphores
|
* \ingroup Semaphores
|
||||||
*/
|
*/
|
||||||
#define vSemaphoreDelete(xSemaphore) vQueueDelete((QueueHandle_t)(xSemaphore))
|
#define vSemaphoreDelete( xSemaphore ) vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr.h
|
* semphr.h
|
||||||
@@ -1107,7 +1110,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* the holder may change between the function exiting and the returned value
|
* the holder may change between the function exiting and the returned value
|
||||||
* being tested.
|
* being tested.
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreGetMutexHolder(xSemaphore) xQueueGetMutexHolder((xSemaphore))
|
#define xSemaphoreGetMutexHolder( xSemaphore ) xQueueGetMutexHolder( ( xSemaphore ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr.h
|
* semphr.h
|
||||||
@@ -1118,7 +1121,7 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* by a task), return NULL.
|
* by a task), return NULL.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define xSemaphoreGetMutexHolderFromISR(xSemaphore) xQueueGetMutexHolderFromISR((xSemaphore))
|
#define xSemaphoreGetMutexHolderFromISR( xSemaphore ) xQueueGetMutexHolderFromISR( ( xSemaphore ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* semphr.h
|
* semphr.h
|
||||||
@@ -1130,6 +1133,8 @@ typedef QueueHandle_t SemaphoreHandle_t;
|
|||||||
* semaphore is not available.
|
* semaphore is not available.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define uxSemaphoreGetCount(xSemaphore) uxQueueMessagesWaiting((QueueHandle_t)(xSemaphore))
|
#define uxSemaphoreGetCount( xSemaphore ) uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) )
|
||||||
|
|
||||||
#endif /* SEMAPHORE_H */
|
#endif /* SEMAPHORE_H */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -44,64 +44,74 @@
|
|||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW == 1) && (portSTACK_GROWTH < 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH < 0 ) )
|
||||||
|
|
||||||
/* Only the current stack state is to be checked. */
|
/* Only the current stack state is to be checked. */
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
/* Is the currently saved stack pointer within the stack limit? */ \
|
/* Is the currently saved stack pointer within the stack limit? */ \
|
||||||
if (pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack) { \
|
if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack ) \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW == 1) && (portSTACK_GROWTH > 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH > 0 ) )
|
||||||
|
|
||||||
/* Only the current stack state is to be checked. */
|
/* Only the current stack state is to be checked. */
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
\
|
\
|
||||||
/* Is the currently saved stack pointer within the stack limit? */ \
|
/* Is the currently saved stack pointer within the stack limit? */ \
|
||||||
if (pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack) { \
|
if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW > 1) && (portSTACK_GROWTH < 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )
|
||||||
|
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
const uint32_t *const pulStack = (uint32_t *)pxCurrentTCB->pxStack; \
|
const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack; \
|
||||||
const uint32_t ulCheckValue = (uint32_t)0xa5a5a5a5; \
|
const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5; \
|
||||||
\
|
\
|
||||||
if ((pulStack[0] != ulCheckValue) || (pulStack[1] != ulCheckValue) || (pulStack[2] != ulCheckValue) || (pulStack[3] != ulCheckValue)) { \
|
if( ( pulStack[ 0 ] != ulCheckValue ) || \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
( pulStack[ 1 ] != ulCheckValue ) || \
|
||||||
|
( pulStack[ 2 ] != ulCheckValue ) || \
|
||||||
|
( pulStack[ 3 ] != ulCheckValue ) ) \
|
||||||
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
|
#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
#if ((configCHECK_FOR_STACK_OVERFLOW > 1) && (portSTACK_GROWTH > 0))
|
#if( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) )
|
||||||
|
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
#define taskCHECK_FOR_STACK_OVERFLOW() \
|
||||||
{ \
|
{ \
|
||||||
int8_t * pcEndOfStack = (int8_t *)pxCurrentTCB->pxEndOfStack; \
|
int8_t *pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack; \
|
||||||
static const uint8_t ucExpectedStackBytes[] = {tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE}; \
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, \
|
||||||
|
tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \
|
||||||
\
|
\
|
||||||
pcEndOfStack -= sizeof(ucExpectedStackBytes); \
|
\
|
||||||
|
pcEndOfStack -= sizeof( ucExpectedStackBytes ); \
|
||||||
\
|
\
|
||||||
/* Has the extremity of the task stack ever been written over? */ \
|
/* Has the extremity of the task stack ever been written over? */ \
|
||||||
if (memcmp((void *)pcEndOfStack, (void *)ucExpectedStackBytes, sizeof(ucExpectedStackBytes)) != 0) { \
|
if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 ) \
|
||||||
vApplicationStackOverflowHook((TaskHandle_t)pxCurrentTCB, pxCurrentTCB->pcTaskName); \
|
{ \
|
||||||
|
vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +120,10 @@
|
|||||||
|
|
||||||
/* Remove stack overflow macro if not being used. */
|
/* Remove stack overflow macro if not being used. */
|
||||||
#ifndef taskCHECK_FOR_STACK_OVERFLOW
|
#ifndef taskCHECK_FOR_STACK_OVERFLOW
|
||||||
#define taskCHECK_FOR_STACK_OVERFLOW()
|
#define taskCHECK_FOR_STACK_OVERFLOW()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* STACK_MACROS_H */
|
#endif /* STACK_MACROS_H */
|
||||||
|
|
||||||
|
|||||||
@@ -52,10 +52,10 @@
|
|||||||
#define STREAM_BUFFER_H
|
#define STREAM_BUFFER_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h must appear in source files before include stream_buffer.h"
|
#error "include FreeRTOS.h must appear in source files before include stream_buffer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined( __cplusplus )
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -66,7 +66,8 @@ extern "C" {
|
|||||||
* etc.
|
* etc.
|
||||||
*/
|
*/
|
||||||
struct StreamBufferDef_t;
|
struct StreamBufferDef_t;
|
||||||
typedef struct StreamBufferDef_t *StreamBufferHandle_t;
|
typedef struct StreamBufferDef_t * StreamBufferHandle_t;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* message_buffer.h
|
* message_buffer.h
|
||||||
@@ -133,7 +134,7 @@ const size_t xStreamBufferSizeBytes = 100, xTriggerLevel = 10;
|
|||||||
* \defgroup xStreamBufferCreate xStreamBufferCreate
|
* \defgroup xStreamBufferCreate xStreamBufferCreate
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xStreamBufferCreate(xBufferSizeBytes, xTriggerLevelBytes) xStreamBufferGenericCreate(xBufferSizeBytes, xTriggerLevelBytes, pdFALSE)
|
#define xStreamBufferCreate( xBufferSizeBytes, xTriggerLevelBytes ) xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -214,8 +215,7 @@ const size_t xTriggerLevel = 1;
|
|||||||
* \defgroup xStreamBufferCreateStatic xStreamBufferCreateStatic
|
* \defgroup xStreamBufferCreateStatic xStreamBufferCreateStatic
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
#define xStreamBufferCreateStatic(xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer) \
|
#define xStreamBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer ) xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pdFALSE, pucStreamBufferStorageArea, pxStaticStreamBuffer )
|
||||||
xStreamBufferGenericCreateStatic(xBufferSizeBytes, xTriggerLevelBytes, pdFALSE, pucStreamBufferStorageArea, pxStaticStreamBuffer)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -309,7 +309,10 @@ const TickType_t x100ms = pdMS_TO_TICKS( 100 );
|
|||||||
* \defgroup xStreamBufferSend xStreamBufferSend
|
* \defgroup xStreamBufferSend xStreamBufferSend
|
||||||
* \ingroup StreamBufferManagement
|
* \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
|
* stream_buffer.h
|
||||||
@@ -407,7 +410,10 @@ BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.
|
|||||||
* \defgroup xStreamBufferSendFromISR xStreamBufferSendFromISR
|
* \defgroup xStreamBufferSendFromISR xStreamBufferSendFromISR
|
||||||
* \ingroup StreamBufferManagement
|
* \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
|
* stream_buffer.h
|
||||||
@@ -493,7 +499,10 @@ const TickType_t xBlockTime = pdMS_TO_TICKS( 20 );
|
|||||||
* \defgroup xStreamBufferReceive xStreamBufferReceive
|
* \defgroup xStreamBufferReceive xStreamBufferReceive
|
||||||
* \ingroup StreamBufferManagement
|
* \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
|
* stream_buffer.h
|
||||||
@@ -576,7 +585,10 @@ BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.
|
|||||||
* \defgroup xStreamBufferReceiveFromISR xStreamBufferReceiveFromISR
|
* \defgroup xStreamBufferReceiveFromISR xStreamBufferReceiveFromISR
|
||||||
* \ingroup StreamBufferManagement
|
* \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
|
* stream_buffer.h
|
||||||
@@ -598,7 +610,7 @@ void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer );
|
|||||||
* \defgroup vStreamBufferDelete vStreamBufferDelete
|
* \defgroup vStreamBufferDelete vStreamBufferDelete
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
void vStreamBufferDelete(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -618,7 +630,7 @@ BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer );
|
|||||||
* \defgroup xStreamBufferIsFull xStreamBufferIsFull
|
* \defgroup xStreamBufferIsFull xStreamBufferIsFull
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xStreamBufferIsFull(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -638,7 +650,7 @@ BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer );
|
|||||||
* \defgroup xStreamBufferIsEmpty xStreamBufferIsEmpty
|
* \defgroup xStreamBufferIsEmpty xStreamBufferIsEmpty
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xStreamBufferIsEmpty(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -661,7 +673,7 @@ BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer );
|
|||||||
* \defgroup xStreamBufferReset xStreamBufferReset
|
* \defgroup xStreamBufferReset xStreamBufferReset
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
BaseType_t xStreamBufferReset(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -682,7 +694,7 @@ size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer );
|
|||||||
* \defgroup xStreamBufferSpacesAvailable xStreamBufferSpacesAvailable
|
* \defgroup xStreamBufferSpacesAvailable xStreamBufferSpacesAvailable
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
size_t xStreamBufferSpacesAvailable(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -703,7 +715,7 @@ size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer );
|
|||||||
* \defgroup xStreamBufferBytesAvailable xStreamBufferBytesAvailable
|
* \defgroup xStreamBufferBytesAvailable xStreamBufferBytesAvailable
|
||||||
* \ingroup StreamBufferManagement
|
* \ingroup StreamBufferManagement
|
||||||
*/
|
*/
|
||||||
size_t xStreamBufferBytesAvailable(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* stream_buffer.h
|
* stream_buffer.h
|
||||||
@@ -740,7 +752,7 @@ BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, siz
|
|||||||
* \defgroup xStreamBufferSetTriggerLevel xStreamBufferSetTriggerLevel
|
* \defgroup xStreamBufferSetTriggerLevel xStreamBufferSetTriggerLevel
|
||||||
* \ingroup StreamBufferManagement
|
* \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
|
* stream_buffer.h
|
||||||
@@ -779,7 +791,7 @@ BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer
|
|||||||
* \defgroup xStreamBufferSendCompletedFromISR xStreamBufferSendCompletedFromISR
|
* \defgroup xStreamBufferSendCompletedFromISR xStreamBufferSendCompletedFromISR
|
||||||
* \ingroup StreamBufferManagement
|
* \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
|
* stream_buffer.h
|
||||||
@@ -819,23 +831,28 @@ BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuf
|
|||||||
* \defgroup xStreamBufferReceiveCompletedFromISR xStreamBufferReceiveCompletedFromISR
|
* \defgroup xStreamBufferReceiveCompletedFromISR xStreamBufferReceiveCompletedFromISR
|
||||||
* \ingroup StreamBufferManagement
|
* \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. */
|
/* 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,
|
StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,
|
||||||
StaticStreamBuffer_t *const pxStaticStreamBuffer) PRIVILEGED_FUNCTION;
|
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)
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
void vStreamBufferSetStreamBufferNumber(StreamBufferHandle_t xStreamBuffer, UBaseType_t uxStreamBufferNumber) PRIVILEGED_FUNCTION;
|
void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer, UBaseType_t uxStreamBufferNumber ) PRIVILEGED_FUNCTION;
|
||||||
UBaseType_t uxStreamBufferGetStreamBufferNumber(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
uint8_t ucStreamBufferGetStreamBufferType(StreamBufferHandle_t xStreamBuffer) PRIVILEGED_FUNCTION;
|
uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined( __cplusplus )
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,12 @@
|
|||||||
* 1 tab == 4 spaces!
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef INC_TASK_H
|
#ifndef INC_TASK_H
|
||||||
#define INC_TASK_H
|
#define INC_TASK_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h must appear in source files before include task.h"
|
#error "include FreeRTOS.h must appear in source files before include task.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
@@ -49,11 +50,11 @@ extern "C" {
|
|||||||
|
|
||||||
/* MPU region parameters passed in ulParameters
|
/* MPU region parameters passed in ulParameters
|
||||||
* of MemoryRegion_t struct. */
|
* of MemoryRegion_t struct. */
|
||||||
#define tskMPU_REGION_READ_ONLY (1UL << 0UL)
|
#define tskMPU_REGION_READ_ONLY ( 1UL << 0UL )
|
||||||
#define tskMPU_REGION_READ_WRITE (1UL << 1UL)
|
#define tskMPU_REGION_READ_WRITE ( 1UL << 1UL )
|
||||||
#define tskMPU_REGION_EXECUTE_NEVER (1UL << 2UL)
|
#define tskMPU_REGION_EXECUTE_NEVER ( 1UL << 2UL )
|
||||||
#define tskMPU_REGION_NORMAL_MEMORY (1UL << 3UL)
|
#define tskMPU_REGION_NORMAL_MEMORY ( 1UL << 3UL )
|
||||||
#define tskMPU_REGION_DEVICE_MEMORY (1UL << 4UL)
|
#define tskMPU_REGION_DEVICE_MEMORY ( 1UL << 4UL )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -66,16 +67,17 @@ extern "C" {
|
|||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
struct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */
|
struct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */
|
||||||
typedef struct tskTaskControlBlock *TaskHandle_t;
|
typedef struct tskTaskControlBlock* TaskHandle_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defines the prototype to which the application task hook function must
|
* Defines the prototype to which the application task hook function must
|
||||||
* conform.
|
* conform.
|
||||||
*/
|
*/
|
||||||
typedef BaseType_t (*TaskHookFunction_t)(void *);
|
typedef BaseType_t (*TaskHookFunction_t)( void * );
|
||||||
|
|
||||||
/* Task states returned by eTaskGetState. */
|
/* Task states returned by eTaskGetState. */
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
eRunning = 0, /* A task is querying the state of itself, so must be running. */
|
eRunning = 0, /* A task is querying the state of itself, so must be running. */
|
||||||
eReady, /* The task being queried is in a read or pending ready list. */
|
eReady, /* The task being queried is in a read or pending ready list. */
|
||||||
eBlocked, /* The task being queried is in the Blocked state. */
|
eBlocked, /* The task being queried is in the Blocked state. */
|
||||||
@@ -85,7 +87,8 @@ typedef enum {
|
|||||||
} eTaskState;
|
} eTaskState;
|
||||||
|
|
||||||
/* Actions that can be performed when vTaskNotify() is called. */
|
/* Actions that can be performed when vTaskNotify() is called. */
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
eNoAction = 0, /* Notify the task without updating its notify value. */
|
eNoAction = 0, /* Notify the task without updating its notify value. */
|
||||||
eSetBits, /* Set bits in the task's notification value. */
|
eSetBits, /* Set bits in the task's notification value. */
|
||||||
eIncrement, /* Increment the task's notification value. */
|
eIncrement, /* Increment the task's notification value. */
|
||||||
@@ -96,7 +99,8 @@ typedef enum {
|
|||||||
/*
|
/*
|
||||||
* Used internally only.
|
* Used internally only.
|
||||||
*/
|
*/
|
||||||
typedef struct xTIME_OUT {
|
typedef struct xTIME_OUT
|
||||||
|
{
|
||||||
BaseType_t xOverflowCount;
|
BaseType_t xOverflowCount;
|
||||||
TickType_t xTimeOnEntering;
|
TickType_t xTimeOnEntering;
|
||||||
} TimeOut_t;
|
} TimeOut_t;
|
||||||
@@ -104,8 +108,9 @@ typedef struct xTIME_OUT {
|
|||||||
/*
|
/*
|
||||||
* Defines the memory ranges allocated to the task when an MPU is used.
|
* Defines the memory ranges allocated to the task when an MPU is used.
|
||||||
*/
|
*/
|
||||||
typedef struct xMEMORY_REGION {
|
typedef struct xMEMORY_REGION
|
||||||
void * pvBaseAddress;
|
{
|
||||||
|
void *pvBaseAddress;
|
||||||
uint32_t ulLengthInBytes;
|
uint32_t ulLengthInBytes;
|
||||||
uint32_t ulParameters;
|
uint32_t ulParameters;
|
||||||
} MemoryRegion_t;
|
} MemoryRegion_t;
|
||||||
@@ -113,39 +118,38 @@ typedef struct xMEMORY_REGION {
|
|||||||
/*
|
/*
|
||||||
* Parameters required to create an MPU protected task.
|
* Parameters required to create an MPU protected task.
|
||||||
*/
|
*/
|
||||||
typedef struct xTASK_PARAMETERS {
|
typedef struct xTASK_PARAMETERS
|
||||||
|
{
|
||||||
TaskFunction_t pvTaskCode;
|
TaskFunction_t pvTaskCode;
|
||||||
const char *const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
const char * const pcName; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
configSTACK_DEPTH_TYPE usStackDepth;
|
configSTACK_DEPTH_TYPE usStackDepth;
|
||||||
void * pvParameters;
|
void *pvParameters;
|
||||||
UBaseType_t uxPriority;
|
UBaseType_t uxPriority;
|
||||||
StackType_t * puxStackBuffer;
|
StackType_t *puxStackBuffer;
|
||||||
MemoryRegion_t xRegions[portNUM_CONFIGURABLE_REGIONS];
|
MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ];
|
||||||
#if ((portUSING_MPU_WRAPPERS == 1) && (configSUPPORT_STATIC_ALLOCATION == 1))
|
#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||||
StaticTask_t *const pxTaskBuffer;
|
StaticTask_t * const pxTaskBuffer;
|
||||||
#endif
|
#endif
|
||||||
} TaskParameters_t;
|
} TaskParameters_t;
|
||||||
|
|
||||||
/* Used with the uxTaskGetSystemState() function to return the state of each task
|
/* Used with the uxTaskGetSystemState() function to return the state of each task
|
||||||
in the system. */
|
in the system. */
|
||||||
typedef struct xTASK_STATUS {
|
typedef struct xTASK_STATUS
|
||||||
|
{
|
||||||
TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */
|
TaskHandle_t xHandle; /* The handle of the task to which the rest of the information in the structure relates. */
|
||||||
const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for
|
const char *pcTaskName; /* A pointer to the task's name. This value will be invalid if the task was deleted since the structure was populated! */ /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
strings and single characters only. */
|
|
||||||
UBaseType_t xTaskNumber; /* A number unique to the task. */
|
UBaseType_t xTaskNumber; /* A number unique to the task. */
|
||||||
eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */
|
eTaskState eCurrentState; /* The state in which the task existed when the structure was populated. */
|
||||||
UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */
|
UBaseType_t uxCurrentPriority; /* The priority at which the task was running (may be inherited) when the structure was populated. */
|
||||||
UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid
|
UBaseType_t uxBasePriority; /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex. Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */
|
||||||
if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */
|
uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */
|
||||||
uint32_t ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock. See http://www.freertos.org/rtos-run-time-stats.html. Only valid when
|
StackType_t *pxStackBase; /* Points to the lowest address of the task's stack area. */
|
||||||
configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */
|
configSTACK_DEPTH_TYPE usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has come to overflowing its stack. */
|
||||||
StackType_t * pxStackBase; /* Points to the lowest address of the task's stack area. */
|
|
||||||
configSTACK_DEPTH_TYPE usStackHighWaterMark; /* The minimum amount of stack space that has remained for the task since the task was created. The closer this value is to zero the closer the task has
|
|
||||||
come to overflowing its stack. */
|
|
||||||
} TaskStatus_t;
|
} TaskStatus_t;
|
||||||
|
|
||||||
/* Possible return values for eTaskConfirmSleepModeStatus(). */
|
/* Possible return values for eTaskConfirmSleepModeStatus(). */
|
||||||
typedef enum {
|
typedef enum
|
||||||
|
{
|
||||||
eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
|
eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPORESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */
|
||||||
eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */
|
eStandardSleep, /* Enter a sleep mode that will not last any longer than the expected idle time. */
|
||||||
eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */
|
eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */
|
||||||
@@ -156,7 +160,7 @@ typedef enum {
|
|||||||
*
|
*
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
#define tskIDLE_PRIORITY ((UBaseType_t)0U)
|
#define tskIDLE_PRIORITY ( ( UBaseType_t ) 0U )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -196,7 +200,7 @@ typedef enum {
|
|||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
#define taskEXIT_CRITICAL() portEXIT_CRITICAL()
|
#define taskEXIT_CRITICAL() portEXIT_CRITICAL()
|
||||||
#define taskEXIT_CRITICAL_FROM_ISR(x) portCLEAR_INTERRUPT_MASK_FROM_ISR(x)
|
#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x )
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
*
|
*
|
||||||
@@ -220,9 +224,10 @@ typedef enum {
|
|||||||
/* Definitions returned by xTaskGetSchedulerState(). taskSCHEDULER_SUSPENDED is
|
/* Definitions returned by xTaskGetSchedulerState(). taskSCHEDULER_SUSPENDED is
|
||||||
0 to generate more optimal code when configASSERT() is defined as the constant
|
0 to generate more optimal code when configASSERT() is defined as the constant
|
||||||
is used in assert() statements. */
|
is used in assert() statements. */
|
||||||
#define taskSCHEDULER_SUSPENDED ((BaseType_t)0)
|
#define taskSCHEDULER_SUSPENDED ( ( BaseType_t ) 0 )
|
||||||
#define taskSCHEDULER_NOT_STARTED ((BaseType_t)1)
|
#define taskSCHEDULER_NOT_STARTED ( ( BaseType_t ) 1 )
|
||||||
#define taskSCHEDULER_RUNNING ((BaseType_t)2)
|
#define taskSCHEDULER_RUNNING ( ( BaseType_t ) 2 )
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* TASK CREATION API
|
* TASK CREATION API
|
||||||
@@ -321,9 +326,13 @@ is used in assert() statements. */
|
|||||||
* \defgroup xTaskCreate xTaskCreate
|
* \defgroup xTaskCreate xTaskCreate
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
BaseType_t xTaskCreate(TaskFunction_t pxTaskCode, const char *const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
|
||||||
const configSTACK_DEPTH_TYPE usStackDepth, void *const pvParameters, UBaseType_t uxPriority, TaskHandle_t *const pxCreatedTask) PRIVILEGED_FUNCTION;
|
const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
const configSTACK_DEPTH_TYPE usStackDepth,
|
||||||
|
void * const pvParameters,
|
||||||
|
UBaseType_t uxPriority,
|
||||||
|
TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -433,9 +442,14 @@ BaseType_t xTaskCreate(TaskFunction_t pxTaskCode, const char *const pcName, /*li
|
|||||||
* \defgroup xTaskCreateStatic xTaskCreateStatic
|
* \defgroup xTaskCreateStatic xTaskCreateStatic
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
TaskHandle_t xTaskCreateStatic(TaskFunction_t pxTaskCode, const char *const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
|
||||||
const uint32_t ulStackDepth, void *const pvParameters, UBaseType_t uxPriority, StackType_t *const puxStackBuffer, StaticTask_t *const pxTaskBuffer) PRIVILEGED_FUNCTION;
|
const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
const uint32_t ulStackDepth,
|
||||||
|
void * const pvParameters,
|
||||||
|
UBaseType_t uxPriority,
|
||||||
|
StackType_t * const puxStackBuffer,
|
||||||
|
StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -510,8 +524,8 @@ TaskHandle_t xHandle;
|
|||||||
* \defgroup xTaskCreateRestricted xTaskCreateRestricted
|
* \defgroup xTaskCreateRestricted xTaskCreateRestricted
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
#if (portUSING_MPU_WRAPPERS == 1)
|
#if( portUSING_MPU_WRAPPERS == 1 )
|
||||||
BaseType_t xTaskCreateRestricted(const TaskParameters_t *const pxTaskDefinition, TaskHandle_t *pxCreatedTask) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -598,8 +612,8 @@ TaskHandle_t xHandle;
|
|||||||
* \defgroup xTaskCreateRestrictedStatic xTaskCreateRestrictedStatic
|
* \defgroup xTaskCreateRestrictedStatic xTaskCreateRestrictedStatic
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
#if ((portUSING_MPU_WRAPPERS == 1) && (configSUPPORT_STATIC_ALLOCATION == 1))
|
#if( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
|
||||||
BaseType_t xTaskCreateRestrictedStatic(const TaskParameters_t *const pxTaskDefinition, TaskHandle_t *pxCreatedTask) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -648,7 +662,7 @@ void vATask( void *pvParameters )
|
|||||||
* \defgroup xTaskCreateRestricted xTaskCreateRestricted
|
* \defgroup xTaskCreateRestricted xTaskCreateRestricted
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
void vTaskAllocateMPURegions(TaskHandle_t xTask, const MemoryRegion_t *const pxRegions) PRIVILEGED_FUNCTION;
|
void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -689,7 +703,7 @@ void vTaskAllocateMPURegions(TaskHandle_t xTask, const MemoryRegion_t *const pxR
|
|||||||
* \defgroup vTaskDelete vTaskDelete
|
* \defgroup vTaskDelete vTaskDelete
|
||||||
* \ingroup Tasks
|
* \ingroup Tasks
|
||||||
*/
|
*/
|
||||||
void vTaskDelete(TaskHandle_t xTaskToDelete) PRIVILEGED_FUNCTION;
|
void vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* TASK CONTROL API
|
* TASK CONTROL API
|
||||||
@@ -741,7 +755,7 @@ void vTaskDelete(TaskHandle_t xTaskToDelete) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskDelay vTaskDelay
|
* \defgroup vTaskDelay vTaskDelay
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskDelay(const TickType_t xTicksToDelay) PRIVILEGED_FUNCTION;
|
void vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -800,7 +814,7 @@ void vTaskDelay(const TickType_t xTicksToDelay) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskDelayUntil vTaskDelayUntil
|
* \defgroup vTaskDelayUntil vTaskDelayUntil
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskDelayUntil(TickType_t *const pxPreviousWakeTime, const TickType_t xTimeIncrement) PRIVILEGED_FUNCTION;
|
void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -830,7 +844,7 @@ void vTaskDelayUntil(TickType_t *const pxPreviousWakeTime, const TickType_t xTim
|
|||||||
* \defgroup xTaskAbortDelay xTaskAbortDelay
|
* \defgroup xTaskAbortDelay xTaskAbortDelay
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskAbortDelay(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -877,7 +891,7 @@ BaseType_t xTaskAbortDelay(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup uxTaskPriorityGet uxTaskPriorityGet
|
* \defgroup uxTaskPriorityGet uxTaskPriorityGet
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskPriorityGet(const TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -885,7 +899,7 @@ UBaseType_t uxTaskPriorityGet(const TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
|||||||
*
|
*
|
||||||
* A version of uxTaskPriorityGet() that can be used from an ISR.
|
* A version of uxTaskPriorityGet() that can be used from an ISR.
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskPriorityGetFromISR(const TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -903,7 +917,7 @@ UBaseType_t uxTaskPriorityGetFromISR(const TaskHandle_t xTask) PRIVILEGED_FUNCTI
|
|||||||
* state of the task might change between the function being called, and the
|
* state of the task might change between the function being called, and the
|
||||||
* functions return value being tested by the calling task.
|
* functions return value being tested by the calling task.
|
||||||
*/
|
*/
|
||||||
eTaskState eTaskGetState(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -959,7 +973,7 @@ eTaskState eTaskGetState(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskGetInfo vTaskGetInfo
|
* \defgroup vTaskGetInfo vTaskGetInfo
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskGetInfo(TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState) PRIVILEGED_FUNCTION;
|
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1001,7 +1015,7 @@ void vTaskGetInfo(TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGe
|
|||||||
* \defgroup vTaskPrioritySet vTaskPrioritySet
|
* \defgroup vTaskPrioritySet vTaskPrioritySet
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority) PRIVILEGED_FUNCTION;
|
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1052,7 +1066,7 @@ void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority) PRIVILEGED_
|
|||||||
* \defgroup vTaskSuspend vTaskSuspend
|
* \defgroup vTaskSuspend vTaskSuspend
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskSuspend(TaskHandle_t xTaskToSuspend) PRIVILEGED_FUNCTION;
|
void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1101,7 +1115,7 @@ void vTaskSuspend(TaskHandle_t xTaskToSuspend) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskResume vTaskResume
|
* \defgroup vTaskResume vTaskResume
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskResume(TaskHandle_t xTaskToResume) PRIVILEGED_FUNCTION;
|
void vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1130,7 +1144,7 @@ void vTaskResume(TaskHandle_t xTaskToResume) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskResumeFromISR vTaskResumeFromISR
|
* \defgroup vTaskResumeFromISR vTaskResumeFromISR
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* SCHEDULER CONTROL
|
* SCHEDULER CONTROL
|
||||||
@@ -1163,7 +1177,7 @@ BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskStartScheduler vTaskStartScheduler
|
* \defgroup vTaskStartScheduler vTaskStartScheduler
|
||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
void vTaskStartScheduler(void) PRIVILEGED_FUNCTION;
|
void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1219,7 +1233,7 @@ void vTaskStartScheduler(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskEndScheduler vTaskEndScheduler
|
* \defgroup vTaskEndScheduler vTaskEndScheduler
|
||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
void vTaskEndScheduler(void) PRIVILEGED_FUNCTION;
|
void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1270,7 +1284,7 @@ void vTaskEndScheduler(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup vTaskSuspendAll vTaskSuspendAll
|
* \defgroup vTaskSuspendAll vTaskSuspendAll
|
||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
void vTaskSuspendAll(void) PRIVILEGED_FUNCTION;
|
void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1324,7 +1338,7 @@ void vTaskSuspendAll(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xTaskResumeAll xTaskResumeAll
|
* \defgroup xTaskResumeAll xTaskResumeAll
|
||||||
* \ingroup SchedulerControl
|
* \ingroup SchedulerControl
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskResumeAll(void) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* TASK UTILITIES
|
* TASK UTILITIES
|
||||||
@@ -1339,7 +1353,7 @@ BaseType_t xTaskResumeAll(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xTaskGetTickCount xTaskGetTickCount
|
* \defgroup xTaskGetTickCount xTaskGetTickCount
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
TickType_t xTaskGetTickCount(void) PRIVILEGED_FUNCTION;
|
TickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1355,7 +1369,7 @@ TickType_t xTaskGetTickCount(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR
|
* \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
TickType_t xTaskGetTickCountFromISR(void) PRIVILEGED_FUNCTION;
|
TickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1369,7 +1383,7 @@ TickType_t xTaskGetTickCountFromISR(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks
|
* \defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskGetNumberOfTasks(void) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1382,7 +1396,7 @@ UBaseType_t uxTaskGetNumberOfTasks(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup pcTaskGetName pcTaskGetName
|
* \defgroup pcTaskGetName pcTaskGetName
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
char *pcTaskGetName(TaskHandle_t xTaskToQuery) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
char *pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1398,7 +1412,7 @@ char *pcTaskGetName(TaskHandle_t xTaskToQuery) PRIVILEGED_FUNCTION; /*lint !e971
|
|||||||
* \defgroup pcTaskGetHandle pcTaskGetHandle
|
* \defgroup pcTaskGetHandle pcTaskGetHandle
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
TaskHandle_t xTaskGetHandle(const char *pcNameToQuery) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
@@ -1425,7 +1439,7 @@ TaskHandle_t xTaskGetHandle(const char *pcNameToQuery) PRIVILEGED_FUNCTION; /*li
|
|||||||
* actual spaces on the stack rather than bytes) since the task referenced by
|
* actual spaces on the stack rather than bytes) since the task referenced by
|
||||||
* xTask was created.
|
* xTask was created.
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
@@ -1452,7 +1466,7 @@ UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
|||||||
* actual spaces on the stack rather than bytes) since the task referenced by
|
* actual spaces on the stack rather than bytes) since the task referenced by
|
||||||
* xTask was created.
|
* xTask was created.
|
||||||
*/
|
*/
|
||||||
configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* When using trace macros it is sometimes necessary to include task.h before
|
/* When using trace macros it is sometimes necessary to include task.h before
|
||||||
FreeRTOS.h. When this is done TaskHookFunction_t will not yet have been defined,
|
FreeRTOS.h. When this is done TaskHookFunction_t will not yet have been defined,
|
||||||
@@ -1461,8 +1475,8 @@ fixed by simply guarding against the inclusion of these two prototypes unless
|
|||||||
they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration
|
they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration
|
||||||
constant. */
|
constant. */
|
||||||
#ifdef configUSE_APPLICATION_TASK_TAG
|
#ifdef configUSE_APPLICATION_TASK_TAG
|
||||||
#if configUSE_APPLICATION_TASK_TAG == 1
|
#if configUSE_APPLICATION_TASK_TAG == 1
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
* <pre>void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );</pre>
|
* <pre>void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );</pre>
|
||||||
*
|
*
|
||||||
@@ -1470,9 +1484,9 @@ constant. */
|
|||||||
* Passing xTask as NULL has the effect of setting the calling tasks hook
|
* Passing xTask as NULL has the effect of setting the calling tasks hook
|
||||||
* function.
|
* function.
|
||||||
*/
|
*/
|
||||||
void vTaskSetApplicationTaskTag(TaskHandle_t xTask, TaskHookFunction_t pxHookFunction) PRIVILEGED_FUNCTION;
|
void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
* <pre>void xTaskGetApplicationTaskTag( TaskHandle_t xTask );</pre>
|
* <pre>void xTaskGetApplicationTaskTag( TaskHandle_t xTask );</pre>
|
||||||
*
|
*
|
||||||
@@ -1480,28 +1494,28 @@ void vTaskSetApplicationTaskTag(TaskHandle_t xTask, TaskHookFunction_t pxHookFun
|
|||||||
* call from an interrupt service routine - call
|
* call from an interrupt service routine - call
|
||||||
* xTaskGetApplicationTaskTagFromISR() instead.
|
* xTaskGetApplicationTaskTagFromISR() instead.
|
||||||
*/
|
*/
|
||||||
TaskHookFunction_t xTaskGetApplicationTaskTag(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
* <pre>void xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );</pre>
|
* <pre>void xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );</pre>
|
||||||
*
|
*
|
||||||
* Returns the pxHookFunction value assigned to the task xTask. Can
|
* Returns the pxHookFunction value assigned to the task xTask. Can
|
||||||
* be called from an interrupt service routine.
|
* be called from an interrupt service routine.
|
||||||
*/
|
*/
|
||||||
TaskHookFunction_t xTaskGetApplicationTaskTagFromISR(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* configUSE_APPLICATION_TASK_TAG ==1 */
|
#endif /* configUSE_APPLICATION_TASK_TAG ==1 */
|
||||||
#endif /* ifdef configUSE_APPLICATION_TASK_TAG */
|
#endif /* ifdef configUSE_APPLICATION_TASK_TAG */
|
||||||
|
|
||||||
#if (configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0)
|
#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )
|
||||||
|
|
||||||
/* Each task contains an array of pointers that is dimensioned by the
|
/* Each task contains an array of pointers that is dimensioned by the
|
||||||
configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h. The
|
configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h. The
|
||||||
kernel does not use the pointers itself, so the application writer can use
|
kernel does not use the pointers itself, so the application writer can use
|
||||||
the pointers for any purpose they wish. The following two functions are
|
the pointers for any purpose they wish. The following two functions are
|
||||||
used to set and query a pointer respectively. */
|
used to set and query a pointer respectively. */
|
||||||
void vTaskSetThreadLocalStoragePointer(TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue) PRIVILEGED_FUNCTION;
|
void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void *pvValue ) PRIVILEGED_FUNCTION;
|
||||||
void *pvTaskGetThreadLocalStoragePointer(TaskHandle_t xTaskToQuery, BaseType_t xIndex) PRIVILEGED_FUNCTION;
|
void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1516,7 +1530,7 @@ void *pvTaskGetThreadLocalStoragePointer(TaskHandle_t xTaskToQuery, BaseType_t x
|
|||||||
* wants. The return value is the value returned by the task hook function
|
* wants. The return value is the value returned by the task hook function
|
||||||
* registered by the user.
|
* registered by the user.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskCallApplicationTaskHook(TaskHandle_t xTask, void *pvParameter) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xTaskGetIdleTaskHandle() is only available if
|
* xTaskGetIdleTaskHandle() is only available if
|
||||||
@@ -1525,7 +1539,7 @@ BaseType_t xTaskCallApplicationTaskHook(TaskHandle_t xTask, void *pvParameter) P
|
|||||||
* Simply returns the handle of the idle task. It is not valid to call
|
* Simply returns the handle of the idle task. It is not valid to call
|
||||||
* xTaskGetIdleTaskHandle() before the scheduler has been started.
|
* xTaskGetIdleTaskHandle() before the scheduler has been started.
|
||||||
*/
|
*/
|
||||||
TaskHandle_t xTaskGetIdleTaskHandle(void) PRIVILEGED_FUNCTION;
|
TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for
|
* configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for
|
||||||
@@ -1624,7 +1638,7 @@ TaskHandle_t xTaskGetIdleTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskGetSystemState(TaskStatus_t *const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t *const pulTotalRunTime) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, uint32_t * const pulTotalRunTime ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1671,7 +1685,7 @@ UBaseType_t uxTaskGetSystemState(TaskStatus_t *const pxTaskStatusArray, const UB
|
|||||||
* \defgroup vTaskList vTaskList
|
* \defgroup vTaskList vTaskList
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
void vTaskList(char *pcWriteBuffer) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
void vTaskList( char * pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1725,37 +1739,37 @@ void vTaskList(char *pcWriteBuffer) PRIVILEGED_FUNCTION; /*lint !e971 Unqualifie
|
|||||||
* \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats
|
* \defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
void vTaskGetRunTimeStats(char *pcWriteBuffer) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <PRE>uint32_t ulTaskGetIdleRunTimeCounter( void );</PRE>
|
* <PRE>uint32_t ulTaskGetIdleRunTimeCounter( void );</PRE>
|
||||||
*
|
*
|
||||||
* configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS
|
* configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS
|
||||||
* must both be defined as 1 for this function to be available. The application
|
* must both be defined as 1 for this function to be available. The application
|
||||||
* must also then provide definitions for
|
* must also then provide definitions for
|
||||||
* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE()
|
* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE()
|
||||||
* to configure a peripheral timer/counter and return the timers current count
|
* to configure a peripheral timer/counter and return the timers current count
|
||||||
* value respectively. The counter should be at least 10 times the frequency of
|
* value respectively. The counter should be at least 10 times the frequency of
|
||||||
* the tick count.
|
* the tick count.
|
||||||
*
|
*
|
||||||
* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total
|
* Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total
|
||||||
* accumulated execution time being stored for each task. The resolution
|
* accumulated execution time being stored for each task. The resolution
|
||||||
* of the accumulated time value depends on the frequency of the timer
|
* of the accumulated time value depends on the frequency of the timer
|
||||||
* configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.
|
* configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.
|
||||||
* While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total
|
* While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total
|
||||||
* execution time of each task into a buffer, ulTaskGetIdleRunTimeCounter()
|
* execution time of each task into a buffer, ulTaskGetIdleRunTimeCounter()
|
||||||
* returns the total execution time of just the idle task.
|
* returns the total execution time of just the idle task.
|
||||||
*
|
*
|
||||||
* @return The total run time of the idle task. This is the amount of time the
|
* @return The total run time of the idle task. This is the amount of time the
|
||||||
* idle task has actually been executing. The unit of time is dependent on the
|
* idle task has actually been executing. The unit of time is dependent on the
|
||||||
* frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
|
* frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
|
||||||
* portGET_RUN_TIME_COUNTER_VALUE() macros.
|
* portGET_RUN_TIME_COUNTER_VALUE() macros.
|
||||||
*
|
*
|
||||||
* \defgroup ulTaskGetIdleRunTimeCounter ulTaskGetIdleRunTimeCounter
|
* \defgroup ulTaskGetIdleRunTimeCounter ulTaskGetIdleRunTimeCounter
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
uint32_t ulTaskGetIdleRunTimeCounter(void) PRIVILEGED_FUNCTION;
|
uint32_t ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1836,9 +1850,9 @@ uint32_t ulTaskGetIdleRunTimeCounter(void) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xTaskNotify xTaskNotify
|
* \defgroup xTaskNotify xTaskNotify
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskGenericNotify(TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue ) PRIVILEGED_FUNCTION;
|
||||||
#define xTaskNotify(xTaskToNotify, ulValue, eAction) xTaskGenericNotify((xTaskToNotify), (ulValue), (eAction), NULL)
|
#define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL )
|
||||||
#define xTaskNotifyAndQuery(xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue) xTaskGenericNotify((xTaskToNotify), (ulValue), (eAction), (pulPreviousNotifyValue))
|
#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -1927,11 +1941,9 @@ BaseType_t xTaskGenericNotify(TaskHandle_t xTaskToNotify, uint32_t ulValue, eNot
|
|||||||
* \defgroup xTaskNotify xTaskNotify
|
* \defgroup xTaskNotify xTaskNotify
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskGenericNotifyFromISR(TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue,
|
BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t *pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION;
|
#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) )
|
||||||
#define xTaskNotifyFromISR(xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken) xTaskGenericNotifyFromISR((xTaskToNotify), (ulValue), (eAction), NULL, (pxHigherPriorityTaskWoken))
|
#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) )
|
||||||
#define xTaskNotifyAndQueryFromISR(xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken) \
|
|
||||||
xTaskGenericNotifyFromISR((xTaskToNotify), (ulValue), (eAction), (pulPreviousNotificationValue), (pxHigherPriorityTaskWoken))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -2006,7 +2018,7 @@ BaseType_t xTaskGenericNotifyFromISR(TaskHandle_t xTaskToNotify, uint32_t ulValu
|
|||||||
* \defgroup xTaskNotifyWait xTaskNotifyWait
|
* \defgroup xTaskNotifyWait xTaskNotifyWait
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskNotifyWait(uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -2052,7 +2064,7 @@ BaseType_t xTaskNotifyWait(uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClear
|
|||||||
* \defgroup xTaskNotifyGive xTaskNotifyGive
|
* \defgroup xTaskNotifyGive xTaskNotifyGive
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
#define xTaskNotifyGive(xTaskToNotify) xTaskGenericNotify((xTaskToNotify), (0), eIncrement, NULL)
|
#define xTaskNotifyGive( xTaskToNotify ) xTaskGenericNotify( ( xTaskToNotify ), ( 0 ), eIncrement, NULL )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -2107,7 +2119,7 @@ BaseType_t xTaskNotifyWait(uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClear
|
|||||||
* \defgroup xTaskNotifyWait xTaskNotifyWait
|
* \defgroup xTaskNotifyWait xTaskNotifyWait
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
void vTaskNotifyGiveFromISR(TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION;
|
void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -2176,7 +2188,7 @@ void vTaskNotifyGiveFromISR(TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPrio
|
|||||||
* \defgroup ulTaskNotifyTake ulTaskNotifyTake
|
* \defgroup ulTaskNotifyTake ulTaskNotifyTake
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
uint32_t ulTaskNotifyTake(BaseType_t xClearCountOnExit, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
@@ -2192,25 +2204,25 @@ uint32_t ulTaskNotifyTake(BaseType_t xClearCountOnExit, TickType_t xTicksToWait)
|
|||||||
* \defgroup xTaskNotifyStateClear xTaskNotifyStateClear
|
* \defgroup xTaskNotifyStateClear xTaskNotifyStateClear
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskNotifyStateClear(TaskHandle_t xTask);
|
BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <PRE>uint32_t ulTaskNotifyValueClear( TaskHandle_t xTask, uint32_t ulBitsToClear );</pre>
|
* <PRE>uint32_t ulTaskNotifyValueClear( TaskHandle_t xTask, uint32_t ulBitsToClear );</pre>
|
||||||
*
|
*
|
||||||
* Clears the bits specified by the ulBitsToClear bit mask in the notification
|
* Clears the bits specified by the ulBitsToClear bit mask in the notification
|
||||||
* value of the task referenced by xTask.
|
* value of the task referenced by xTask.
|
||||||
*
|
*
|
||||||
* Set ulBitsToClear to 0xffffffff (UINT_MAX on 32-bit architectures) to clear
|
* Set ulBitsToClear to 0xffffffff (UINT_MAX on 32-bit architectures) to clear
|
||||||
* the notification value to 0. Set ulBitsToClear to 0 to query the task's
|
* the notification value to 0. Set ulBitsToClear to 0 to query the task's
|
||||||
* notification value without clearing any bits.
|
* notification value without clearing any bits.
|
||||||
*
|
*
|
||||||
* @return The value of the target task's notification value before the bits
|
* @return The value of the target task's notification value before the bits
|
||||||
* specified by ulBitsToClear were cleared.
|
* specified by ulBitsToClear were cleared.
|
||||||
* \defgroup ulTaskNotifyValueClear ulTaskNotifyValueClear
|
* \defgroup ulTaskNotifyValueClear ulTaskNotifyValueClear
|
||||||
* \ingroup TaskNotifications
|
* \ingroup TaskNotifications
|
||||||
*/
|
*/
|
||||||
uint32_t ulTaskNotifyValueClear(TaskHandle_t xTask, uint32_t ulBitsToClear) PRIVILEGED_FUNCTION;
|
uint32_t ulTaskNotifyValueClear( TaskHandle_t xTask, uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
@@ -2224,7 +2236,7 @@ uint32_t ulTaskNotifyValueClear(TaskHandle_t xTask, uint32_t ulBitsToClear) PRIV
|
|||||||
* \defgroup vTaskSetTimeOutState vTaskSetTimeOutState
|
* \defgroup vTaskSetTimeOutState vTaskSetTimeOutState
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskSetTimeOutState(TimeOut_t *const pxTimeOut) PRIVILEGED_FUNCTION;
|
void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
@@ -2307,7 +2319,7 @@ void vTaskSetTimeOutState(TimeOut_t *const pxTimeOut) PRIVILEGED_FUNCTION;
|
|||||||
* \defgroup xTaskCheckForTimeOut xTaskCheckForTimeOut
|
* \defgroup xTaskCheckForTimeOut xTaskCheckForTimeOut
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskCheckForTimeOut(TimeOut_t *const pxTimeOut, TickType_t *const pxTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
|
* SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
|
||||||
@@ -2328,7 +2340,7 @@ BaseType_t xTaskCheckForTimeOut(TimeOut_t *const pxTimeOut, TickType_t *const px
|
|||||||
* + Time slicing is in use and there is a task of equal priority to the
|
* + Time slicing is in use and there is a task of equal priority to the
|
||||||
* currently running task.
|
* currently running task.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskIncrementTick(void) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
|
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
|
||||||
@@ -2361,8 +2373,8 @@ BaseType_t xTaskIncrementTick(void) PRIVILEGED_FUNCTION;
|
|||||||
* portTICK_PERIOD_MS can be used to convert kernel ticks into a real time
|
* portTICK_PERIOD_MS can be used to convert kernel ticks into a real time
|
||||||
* period.
|
* period.
|
||||||
*/
|
*/
|
||||||
void vTaskPlaceOnEventList(List_t *const pxEventList, const TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
void vTaskPlaceOnEventList( List_t * const pxEventList, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
void vTaskPlaceOnUnorderedEventList(List_t *pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
void vTaskPlaceOnUnorderedEventList( List_t * pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
|
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
|
||||||
@@ -2375,7 +2387,7 @@ void vTaskPlaceOnUnorderedEventList(List_t *pxEventList, const TickType_t xItemV
|
|||||||
* indefinitely, whereas vTaskPlaceOnEventList() does.
|
* indefinitely, whereas vTaskPlaceOnEventList() does.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void vTaskPlaceOnEventListRestricted(List_t *const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely) PRIVILEGED_FUNCTION;
|
void vTaskPlaceOnEventListRestricted( List_t * const pxEventList, TickType_t xTicksToWait, const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
|
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
|
||||||
@@ -2401,8 +2413,8 @@ void vTaskPlaceOnEventListRestricted(List_t *const pxEventList, TickType_t xTick
|
|||||||
* @return pdTRUE if the task being removed has a higher priority than the task
|
* @return pdTRUE if the task being removed has a higher priority than the task
|
||||||
* making the call, otherwise pdFALSE.
|
* making the call, otherwise pdFALSE.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskRemoveFromEventList(const List_t *const pxEventList) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) PRIVILEGED_FUNCTION;
|
||||||
void vTaskRemoveFromUnorderedEventList(ListItem_t *pxEventListItem, const TickType_t xItemValue) PRIVILEGED_FUNCTION;
|
void vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem, const TickType_t xItemValue ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY
|
* THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY
|
||||||
@@ -2412,42 +2424,42 @@ void vTaskRemoveFromUnorderedEventList(ListItem_t *pxEventListItem, const
|
|||||||
* Sets the pointer to the current TCB to the TCB of the highest priority task
|
* Sets the pointer to the current TCB to the TCB of the highest priority task
|
||||||
* that is ready to run.
|
* that is ready to run.
|
||||||
*/
|
*/
|
||||||
portDONT_DISCARD void vTaskSwitchContext(void) PRIVILEGED_FUNCTION;
|
portDONT_DISCARD void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE. THEY ARE USED BY
|
* THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE. THEY ARE USED BY
|
||||||
* THE EVENT BITS MODULE.
|
* THE EVENT BITS MODULE.
|
||||||
*/
|
*/
|
||||||
TickType_t uxTaskResetEventItemValue(void) PRIVILEGED_FUNCTION;
|
TickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the handle of the calling task.
|
* Return the handle of the calling task.
|
||||||
*/
|
*/
|
||||||
TaskHandle_t xTaskGetCurrentTaskHandle(void) PRIVILEGED_FUNCTION;
|
TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Shortcut used by the queue implementation to prevent unnecessary call to
|
* Shortcut used by the queue implementation to prevent unnecessary call to
|
||||||
* taskYIELD();
|
* taskYIELD();
|
||||||
*/
|
*/
|
||||||
void vTaskMissedYield(void) PRIVILEGED_FUNCTION;
|
void vTaskMissedYield( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the scheduler state as taskSCHEDULER_RUNNING,
|
* Returns the scheduler state as taskSCHEDULER_RUNNING,
|
||||||
* taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED.
|
* taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskGetSchedulerState(void) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Raises the priority of the mutex holder to that of the calling task should
|
* Raises the priority of the mutex holder to that of the calling task should
|
||||||
* the mutex holder have a priority less than the calling task.
|
* the mutex holder have a priority less than the calling task.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskPriorityInherit(TaskHandle_t const pxMutexHolder) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the priority of a task back to its proper priority in the case that it
|
* Set the priority of a task back to its proper priority in the case that it
|
||||||
* inherited a higher priority while it was holding a semaphore.
|
* inherited a higher priority while it was holding a semaphore.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTaskPriorityDisinherit(TaskHandle_t const pxMutexHolder) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If a higher priority task attempting to obtain a mutex caused a lower
|
* If a higher priority task attempting to obtain a mutex caused a lower
|
||||||
@@ -2457,18 +2469,18 @@ BaseType_t xTaskPriorityDisinherit(TaskHandle_t const pxMutexHolder) PRIVILEGED_
|
|||||||
* the highest priority task that is still waiting for the mutex (if there were
|
* the highest priority task that is still waiting for the mutex (if there were
|
||||||
* more than one task waiting for the mutex).
|
* more than one task waiting for the mutex).
|
||||||
*/
|
*/
|
||||||
void vTaskPriorityDisinheritAfterTimeout(TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask) PRIVILEGED_FUNCTION;
|
void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder, UBaseType_t uxHighestPriorityWaitingTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the uxTCBNumber assigned to the task referenced by the xTask parameter.
|
* Get the uxTCBNumber assigned to the task referenced by the xTask parameter.
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTaskGetTaskNumber(TaskHandle_t xTask) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the uxTaskNumber of the task referenced by the xTask parameter to
|
* Set the uxTaskNumber of the task referenced by the xTask parameter to
|
||||||
* uxHandle.
|
* uxHandle.
|
||||||
*/
|
*/
|
||||||
void vTaskSetTaskNumber(TaskHandle_t xTask, const UBaseType_t uxHandle) PRIVILEGED_FUNCTION;
|
void vTaskSetTaskNumber( TaskHandle_t xTask, const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only available when configUSE_TICKLESS_IDLE is set to 1.
|
* Only available when configUSE_TICKLESS_IDLE is set to 1.
|
||||||
@@ -2478,7 +2490,7 @@ void vTaskSetTaskNumber(TaskHandle_t xTask, const UBaseType_t uxHandle) PRIVILEG
|
|||||||
* to date with the actual execution time by being skipped forward by a time
|
* to date with the actual execution time by being skipped forward by a time
|
||||||
* equal to the idle period.
|
* equal to the idle period.
|
||||||
*/
|
*/
|
||||||
void vTaskStepTick(const TickType_t xTicksToJump) PRIVILEGED_FUNCTION;
|
void vTaskStepTick( const TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* Correct the tick count value after the application code has held
|
/* Correct the tick count value after the application code has held
|
||||||
interrupts disabled for an extended period. xTicksToCatchUp is the number
|
interrupts disabled for an extended period. xTicksToCatchUp is the number
|
||||||
@@ -2491,7 +2503,7 @@ vTaskStepTick(), xTaskCatchUpTicks() may move the tick count forward past a
|
|||||||
time at which a task should be removed from the blocked state. That means
|
time at which a task should be removed from the blocked state. That means
|
||||||
tasks may have to be removed from the blocked state as the tick count is
|
tasks may have to be removed from the blocked state as the tick count is
|
||||||
moved. */
|
moved. */
|
||||||
BaseType_t xTaskCatchUpTicks(TickType_t xTicksToCatchUp) PRIVILEGED_FUNCTION;
|
BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only available when configUSE_TICKLESS_IDLE is set to 1.
|
* Only available when configUSE_TICKLESS_IDLE is set to 1.
|
||||||
@@ -2507,21 +2519,25 @@ BaseType_t xTaskCatchUpTicks(TickType_t xTicksToCatchUp) PRIVILEGED_FUNCTION;
|
|||||||
* critical section between the timer being stopped and the sleep mode being
|
* critical section between the timer being stopped and the sleep mode being
|
||||||
* entered to ensure it is ok to proceed into the sleep mode.
|
* entered to ensure it is ok to proceed into the sleep mode.
|
||||||
*/
|
*/
|
||||||
eSleepModeStatus eTaskConfirmSleepModeStatus(void) PRIVILEGED_FUNCTION;
|
eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For internal use only. Increment the mutex held count when a mutex is
|
* For internal use only. Increment the mutex held count when a mutex is
|
||||||
* taken and return the handle of the task that has taken the mutex.
|
* taken and return the handle of the task that has taken the mutex.
|
||||||
*/
|
*/
|
||||||
TaskHandle_t pvTaskIncrementMutexHeldCount(void) PRIVILEGED_FUNCTION;
|
TaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For internal use only. Same as vTaskSetTimeOutState(), but without a critial
|
* For internal use only. Same as vTaskSetTimeOutState(), but without a critial
|
||||||
* section.
|
* section.
|
||||||
*/
|
*/
|
||||||
void vTaskInternalSetTimeOutState(TimeOut_t *const pxTimeOut) PRIVILEGED_FUNCTION;
|
void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* INC_TASK_H */
|
#endif /* INC_TASK_H */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,12 @@
|
|||||||
* 1 tab == 4 spaces!
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef TIMERS_H
|
#ifndef TIMERS_H
|
||||||
#define TIMERS_H
|
#define TIMERS_H
|
||||||
|
|
||||||
#ifndef INC_FREERTOS_H
|
#ifndef INC_FREERTOS_H
|
||||||
#error "include FreeRTOS.h must appear in source files before include timers.h"
|
#error "include FreeRTOS.h must appear in source files before include timers.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*lint -save -e537 This headers are only multiply included if the application code
|
/*lint -save -e537 This headers are only multiply included if the application code
|
||||||
@@ -50,20 +51,21 @@ be used solely through the macros that make up the public software timer API,
|
|||||||
as defined below. The commands that are sent from interrupts must use the
|
as defined below. The commands that are sent from interrupts must use the
|
||||||
highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task
|
highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task
|
||||||
or interrupt version of the queue send function should be used. */
|
or interrupt version of the queue send function should be used. */
|
||||||
#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ((BaseType_t)-2)
|
#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR ( ( BaseType_t ) -2 )
|
||||||
#define tmrCOMMAND_EXECUTE_CALLBACK ((BaseType_t)-1)
|
#define tmrCOMMAND_EXECUTE_CALLBACK ( ( BaseType_t ) -1 )
|
||||||
#define tmrCOMMAND_START_DONT_TRACE ((BaseType_t)0)
|
#define tmrCOMMAND_START_DONT_TRACE ( ( BaseType_t ) 0 )
|
||||||
#define tmrCOMMAND_START ((BaseType_t)1)
|
#define tmrCOMMAND_START ( ( BaseType_t ) 1 )
|
||||||
#define tmrCOMMAND_RESET ((BaseType_t)2)
|
#define tmrCOMMAND_RESET ( ( BaseType_t ) 2 )
|
||||||
#define tmrCOMMAND_STOP ((BaseType_t)3)
|
#define tmrCOMMAND_STOP ( ( BaseType_t ) 3 )
|
||||||
#define tmrCOMMAND_CHANGE_PERIOD ((BaseType_t)4)
|
#define tmrCOMMAND_CHANGE_PERIOD ( ( BaseType_t ) 4 )
|
||||||
#define tmrCOMMAND_DELETE ((BaseType_t)5)
|
#define tmrCOMMAND_DELETE ( ( BaseType_t ) 5 )
|
||||||
|
|
||||||
|
#define tmrFIRST_FROM_ISR_COMMAND ( ( BaseType_t ) 6 )
|
||||||
|
#define tmrCOMMAND_START_FROM_ISR ( ( BaseType_t ) 6 )
|
||||||
|
#define tmrCOMMAND_RESET_FROM_ISR ( ( BaseType_t ) 7 )
|
||||||
|
#define tmrCOMMAND_STOP_FROM_ISR ( ( BaseType_t ) 8 )
|
||||||
|
#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR ( ( BaseType_t ) 9 )
|
||||||
|
|
||||||
#define tmrFIRST_FROM_ISR_COMMAND ((BaseType_t)6)
|
|
||||||
#define tmrCOMMAND_START_FROM_ISR ((BaseType_t)6)
|
|
||||||
#define tmrCOMMAND_RESET_FROM_ISR ((BaseType_t)7)
|
|
||||||
#define tmrCOMMAND_STOP_FROM_ISR ((BaseType_t)8)
|
|
||||||
#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR ((BaseType_t)9)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type by which software timers are referenced. For example, a call to
|
* Type by which software timers are referenced. For example, a call to
|
||||||
@@ -72,18 +74,18 @@ or interrupt version of the queue send function should be used. */
|
|||||||
* (for example, xTimerStart(), xTimerReset(), etc.).
|
* (for example, xTimerStart(), xTimerReset(), etc.).
|
||||||
*/
|
*/
|
||||||
struct tmrTimerControl; /* The old naming convention is used to prevent breaking kernel aware debuggers. */
|
struct tmrTimerControl; /* The old naming convention is used to prevent breaking kernel aware debuggers. */
|
||||||
typedef struct tmrTimerControl *TimerHandle_t;
|
typedef struct tmrTimerControl * TimerHandle_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defines the prototype to which timer callback functions must conform.
|
* Defines the prototype to which timer callback functions must conform.
|
||||||
*/
|
*/
|
||||||
typedef void (*TimerCallbackFunction_t)(TimerHandle_t xTimer);
|
typedef void (*TimerCallbackFunction_t)( TimerHandle_t xTimer );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defines the prototype to which functions used with the
|
* Defines the prototype to which functions used with the
|
||||||
* xTimerPendFunctionCallFromISR() function must conform.
|
* xTimerPendFunctionCallFromISR() function must conform.
|
||||||
*/
|
*/
|
||||||
typedef void (*PendedFunction_t)(void *, uint32_t);
|
typedef void (*PendedFunction_t)( void *, uint32_t );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TimerHandle_t xTimerCreate( const char * const pcTimerName,
|
* TimerHandle_t xTimerCreate( const char * const pcTimerName,
|
||||||
@@ -222,9 +224,12 @@ typedef void (*PendedFunction_t)(void *, uint32_t);
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)
|
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
|
||||||
TimerHandle_t xTimerCreate(const char *const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
TimerHandle_t xTimerCreate( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void *const pvTimerID, TimerCallbackFunction_t pxCallbackFunction) PRIVILEGED_FUNCTION;
|
const TickType_t xTimerPeriodInTicks,
|
||||||
|
const UBaseType_t uxAutoReload,
|
||||||
|
void * const pvTimerID,
|
||||||
|
TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -349,10 +354,13 @@ TimerHandle_t xTimerCreate(const char *const pcTimerName, /*lint !e971 Unqualifi
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#if (configSUPPORT_STATIC_ALLOCATION == 1)
|
#if( configSUPPORT_STATIC_ALLOCATION == 1 )
|
||||||
TimerHandle_t xTimerCreateStatic(const char *const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
TimerHandle_t xTimerCreateStatic( const char * const pcTimerName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
const TickType_t xTimerPeriodInTicks, const UBaseType_t uxAutoReload, void *const pvTimerID, TimerCallbackFunction_t pxCallbackFunction,
|
const TickType_t xTimerPeriodInTicks,
|
||||||
StaticTimer_t *pxTimerBuffer) PRIVILEGED_FUNCTION;
|
const UBaseType_t uxAutoReload,
|
||||||
|
void * const pvTimerID,
|
||||||
|
TimerCallbackFunction_t pxCallbackFunction,
|
||||||
|
StaticTimer_t *pxTimerBuffer ) PRIVILEGED_FUNCTION;
|
||||||
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
#endif /* configSUPPORT_STATIC_ALLOCATION */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -375,7 +383,7 @@ TimerHandle_t xTimerCreateStatic(const char *const pcTimerName, /*lint !e971 Unq
|
|||||||
*
|
*
|
||||||
* See the xTimerCreate() API function example usage scenario.
|
* See the xTimerCreate() API function example usage scenario.
|
||||||
*/
|
*/
|
||||||
void *pvTimerGetTimerID(const TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
void *pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID );
|
* void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID );
|
||||||
@@ -396,7 +404,7 @@ void *pvTimerGetTimerID(const TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
|||||||
*
|
*
|
||||||
* See the xTimerCreate() API function example usage scenario.
|
* See the xTimerCreate() API function example usage scenario.
|
||||||
*/
|
*/
|
||||||
void vTimerSetTimerID(TimerHandle_t xTimer, void *pvNewID) PRIVILEGED_FUNCTION;
|
void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer );
|
* BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer );
|
||||||
@@ -433,7 +441,7 @@ void vTimerSetTimerID(TimerHandle_t xTimer, void *pvNewID) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
BaseType_t xTimerIsTimerActive(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TaskHandle_t xTimerGetTimerDaemonTaskHandle( void );
|
* TaskHandle_t xTimerGetTimerDaemonTaskHandle( void );
|
||||||
@@ -441,7 +449,7 @@ BaseType_t xTimerIsTimerActive(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
|||||||
* Simply returns the handle of the timer service/daemon task. It it not valid
|
* Simply returns the handle of the timer service/daemon task. It it not valid
|
||||||
* to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started.
|
* to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started.
|
||||||
*/
|
*/
|
||||||
TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
* BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
||||||
@@ -493,7 +501,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* See the xTimerCreate() API function example usage scenario.
|
* See the xTimerCreate() API function example usage scenario.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define xTimerStart(xTimer, xTicksToWait) xTimerGenericCommand((xTimer), tmrCOMMAND_START, (xTaskGetTickCount()), NULL, (xTicksToWait))
|
#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
* BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
||||||
@@ -535,7 +543,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* See the xTimerCreate() API function example usage scenario.
|
* See the xTimerCreate() API function example usage scenario.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define xTimerStop(xTimer, xTicksToWait) xTimerGenericCommand((xTimer), tmrCOMMAND_STOP, 0U, NULL, (xTicksToWait))
|
#define xTimerStop( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerChangePeriod( TimerHandle_t xTimer,
|
* BaseType_t xTimerChangePeriod( TimerHandle_t xTimer,
|
||||||
@@ -615,7 +623,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#define xTimerChangePeriod(xTimer, xNewPeriod, xTicksToWait) xTimerGenericCommand((xTimer), tmrCOMMAND_CHANGE_PERIOD, (xNewPeriod), NULL, (xTicksToWait))
|
#define xTimerChangePeriod( xTimer, xNewPeriod, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xTicksToWait ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
* BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
||||||
@@ -653,7 +661,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
*
|
*
|
||||||
* See the xTimerChangePeriod() API function example usage scenario.
|
* See the xTimerChangePeriod() API function example usage scenario.
|
||||||
*/
|
*/
|
||||||
#define xTimerDelete(xTimer, xTicksToWait) xTimerGenericCommand((xTimer), tmrCOMMAND_DELETE, 0U, NULL, (xTicksToWait))
|
#define xTimerDelete( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
* BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
|
||||||
@@ -777,7 +785,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#define xTimerReset(xTimer, xTicksToWait) xTimerGenericCommand((xTimer), tmrCOMMAND_RESET, (xTaskGetTickCount()), NULL, (xTicksToWait))
|
#define xTimerReset( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerStartFromISR( TimerHandle_t xTimer,
|
* BaseType_t xTimerStartFromISR( TimerHandle_t xTimer,
|
||||||
@@ -863,7 +871,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#define xTimerStartFromISR(xTimer, pxHigherPriorityTaskWoken) xTimerGenericCommand((xTimer), tmrCOMMAND_START_FROM_ISR, (xTaskGetTickCountFromISR()), (pxHigherPriorityTaskWoken), 0U)
|
#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerStopFromISR( TimerHandle_t xTimer,
|
* BaseType_t xTimerStopFromISR( TimerHandle_t xTimer,
|
||||||
@@ -926,7 +934,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#define xTimerStopFromISR(xTimer, pxHigherPriorityTaskWoken) xTimerGenericCommand((xTimer), tmrCOMMAND_STOP_FROM_ISR, 0, (pxHigherPriorityTaskWoken), 0U)
|
#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP_FROM_ISR, 0, ( pxHigherPriorityTaskWoken ), 0U )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer,
|
* BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer,
|
||||||
@@ -999,7 +1007,7 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#define xTimerChangePeriodFromISR(xTimer, xNewPeriod, pxHigherPriorityTaskWoken) xTimerGenericCommand((xTimer), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, (xNewPeriod), (pxHigherPriorityTaskWoken), 0U)
|
#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U )
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerResetFromISR( TimerHandle_t xTimer,
|
* BaseType_t xTimerResetFromISR( TimerHandle_t xTimer,
|
||||||
@@ -1085,7 +1093,8 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
#define xTimerResetFromISR(xTimer, pxHigherPriorityTaskWoken) xTimerGenericCommand((xTimer), tmrCOMMAND_RESET_FROM_ISR, (xTaskGetTickCountFromISR()), (pxHigherPriorityTaskWoken), 0U)
|
#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U )
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,
|
* BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,
|
||||||
@@ -1175,9 +1184,9 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle(void) PRIVILEGED_FUNCTION;
|
|||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
BaseType_t xTimerPendFunctionCallFromISR(PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken) PRIVILEGED_FUNCTION;
|
BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,
|
* BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,
|
||||||
* void *pvParameter1,
|
* void *pvParameter1,
|
||||||
* uint32_t ulParameter2,
|
* uint32_t ulParameter2,
|
||||||
@@ -1209,7 +1218,7 @@ BaseType_t xTimerPendFunctionCallFromISR(PendedFunction_t xFunctionToPend, void
|
|||||||
* timer daemon task, otherwise pdFALSE is returned.
|
* timer daemon task, otherwise pdFALSE is returned.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
BaseType_t xTimerPendFunctionCall(PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* const char * const pcTimerGetName( TimerHandle_t xTimer );
|
* const char * const pcTimerGetName( TimerHandle_t xTimer );
|
||||||
@@ -1220,7 +1229,7 @@ BaseType_t xTimerPendFunctionCall(PendedFunction_t xFunctionToPend, void *pvPara
|
|||||||
*
|
*
|
||||||
* @return The name assigned to the timer specified by the xTimer parameter.
|
* @return The name assigned to the timer specified by the xTimer parameter.
|
||||||
*/
|
*/
|
||||||
const char *pcTimerGetName(TimerHandle_t xTimer) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
const char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload );
|
* void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload );
|
||||||
@@ -1237,21 +1246,21 @@ const char *pcTimerGetName(TimerHandle_t xTimer) PRIVILEGED_FUNCTION; /*lint !e9
|
|||||||
* uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and
|
* uxAutoReload is set to pdFALSE then the timer will be a one-shot timer and
|
||||||
* enter the dormant state after it expires.
|
* enter the dormant state after it expires.
|
||||||
*/
|
*/
|
||||||
void vTimerSetReloadMode(TimerHandle_t xTimer, const UBaseType_t uxAutoReload) PRIVILEGED_FUNCTION;
|
void vTimerSetReloadMode( TimerHandle_t xTimer, const UBaseType_t uxAutoReload ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer );
|
* UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer );
|
||||||
*
|
*
|
||||||
* Queries a timer to determine if it is an auto-reload timer, in which case the timer
|
* Queries a timer to determine if it is an auto-reload timer, in which case the timer
|
||||||
* automatically resets itself each time it expires, or a one-shot timer, in
|
* automatically resets itself each time it expires, or a one-shot timer, in
|
||||||
* which case the timer will only expire once unless it is manually restarted.
|
* which case the timer will only expire once unless it is manually restarted.
|
||||||
*
|
*
|
||||||
* @param xTimer The handle of the timer being queried.
|
* @param xTimer The handle of the timer being queried.
|
||||||
*
|
*
|
||||||
* @return If the timer is an auto-reload timer then pdTRUE is returned, otherwise
|
* @return If the timer is an auto-reload timer then pdTRUE is returned, otherwise
|
||||||
* pdFALSE is returned.
|
* pdFALSE is returned.
|
||||||
*/
|
*/
|
||||||
UBaseType_t uxTimerGetReloadMode(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TickType_t xTimerGetPeriod( TimerHandle_t xTimer );
|
* TickType_t xTimerGetPeriod( TimerHandle_t xTimer );
|
||||||
@@ -1262,37 +1271,39 @@ UBaseType_t uxTimerGetReloadMode(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
|||||||
*
|
*
|
||||||
* @return The period of the timer in ticks.
|
* @return The period of the timer in ticks.
|
||||||
*/
|
*/
|
||||||
TickType_t xTimerGetPeriod(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
TickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer );
|
* TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer );
|
||||||
*
|
*
|
||||||
* Returns the time in ticks at which the timer will expire. If this is less
|
* Returns the time in ticks at which the timer will expire. If this is less
|
||||||
* than the current tick count then the expiry time has overflowed from the
|
* than the current tick count then the expiry time has overflowed from the
|
||||||
* current time.
|
* current time.
|
||||||
*
|
*
|
||||||
* @param xTimer The handle of the timer being queried.
|
* @param xTimer The handle of the timer being queried.
|
||||||
*
|
*
|
||||||
* @return If the timer is running then the time in ticks at which the timer
|
* @return If the timer is running then the time in ticks at which the timer
|
||||||
* will next expire is returned. If the timer is not running then the return
|
* will next expire is returned. If the timer is not running then the return
|
||||||
* value is undefined.
|
* value is undefined.
|
||||||
*/
|
*/
|
||||||
TickType_t xTimerGetExpiryTime(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Functions beyond this part are not part of the public API and are intended
|
* Functions beyond this part are not part of the public API and are intended
|
||||||
* for use by the kernel only.
|
* for use by the kernel only.
|
||||||
*/
|
*/
|
||||||
BaseType_t xTimerCreateTimerTask(void) PRIVILEGED_FUNCTION;
|
BaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION;
|
||||||
BaseType_t xTimerGenericCommand(TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t *const pxHigherPriorityTaskWoken,
|
BaseType_t xTimerGenericCommand( TimerHandle_t xTimer, const BaseType_t xCommandID, const TickType_t xOptionalValue, BaseType_t * const pxHigherPriorityTaskWoken, const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
const TickType_t xTicksToWait) PRIVILEGED_FUNCTION;
|
|
||||||
|
|
||||||
#if (configUSE_TRACE_FACILITY == 1)
|
#if( configUSE_TRACE_FACILITY == 1 )
|
||||||
void vTimerSetTimerNumber(TimerHandle_t xTimer, UBaseType_t uxTimerNumber) PRIVILEGED_FUNCTION;
|
void vTimerSetTimerNumber( TimerHandle_t xTimer, UBaseType_t uxTimerNumber ) PRIVILEGED_FUNCTION;
|
||||||
UBaseType_t uxTimerGetTimerNumber(TimerHandle_t xTimer) PRIVILEGED_FUNCTION;
|
UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* TIMERS_H */
|
#endif /* TIMERS_H */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,19 +25,21 @@
|
|||||||
* 1 tab == 4 spaces!
|
* 1 tab == 4 spaces!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "list.h"
|
|
||||||
#include "FreeRTOS.h"
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "list.h"
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* PUBLIC LIST API documented in list.h
|
* PUBLIC LIST API documented in list.h
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
void vListInitialise(List_t *const pxList) {
|
void vListInitialise( List_t * const pxList )
|
||||||
|
{
|
||||||
/* The list structure contains a list item which is used to mark the
|
/* The list structure contains a list item which is used to mark the
|
||||||
end of the list. To initialise the list the list end is inserted
|
end of the list. To initialise the list the list end is inserted
|
||||||
as the only list entry. */
|
as the only list entry. */
|
||||||
pxList->pxIndex = (ListItem_t *)&(pxList->xListEnd); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
||||||
|
|
||||||
/* The list end value is the highest possible value in the list to
|
/* The list end value is the highest possible value in the list to
|
||||||
ensure it remains at the end of the list. */
|
ensure it remains at the end of the list. */
|
||||||
@@ -45,37 +47,39 @@ void vListInitialise(List_t *const pxList) {
|
|||||||
|
|
||||||
/* The list end next and previous pointers point to itself so we know
|
/* The list end next and previous pointers point to itself so we know
|
||||||
when the list is empty. */
|
when the list is empty. */
|
||||||
pxList->xListEnd.pxNext = (ListItem_t *)&(pxList->xListEnd); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
||||||
pxList->xListEnd.pxPrevious = (ListItem_t *)&(pxList->xListEnd); /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );/*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */
|
||||||
|
|
||||||
pxList->uxNumberOfItems = (UBaseType_t)0U;
|
pxList->uxNumberOfItems = ( UBaseType_t ) 0U;
|
||||||
|
|
||||||
/* Write known values into the list if
|
/* Write known values into the list if
|
||||||
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
|
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
|
||||||
listSET_LIST_INTEGRITY_CHECK_1_VALUE(pxList);
|
listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );
|
||||||
listSET_LIST_INTEGRITY_CHECK_2_VALUE(pxList);
|
listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vListInitialiseItem(ListItem_t *const pxItem) {
|
void vListInitialiseItem( ListItem_t * const pxItem )
|
||||||
|
{
|
||||||
/* Make sure the list item is not recorded as being on a list. */
|
/* Make sure the list item is not recorded as being on a list. */
|
||||||
pxItem->pxContainer = NULL;
|
pxItem->pxContainer = NULL;
|
||||||
|
|
||||||
/* Write known values into the list item if
|
/* Write known values into the list item if
|
||||||
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
|
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
|
||||||
listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE(pxItem);
|
listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
|
||||||
listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE(pxItem);
|
listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vListInsertEnd(List_t *const pxList, ListItem_t *const pxNewListItem) {
|
void vListInsertEnd( List_t * const pxList, ListItem_t * const pxNewListItem )
|
||||||
ListItem_t *const pxIndex = pxList->pxIndex;
|
{
|
||||||
|
ListItem_t * const pxIndex = pxList->pxIndex;
|
||||||
|
|
||||||
/* Only effective when configASSERT() is also defined, these tests may catch
|
/* Only effective when configASSERT() is also defined, these tests may catch
|
||||||
the list data structures being overwritten in memory. They will not catch
|
the list data structures being overwritten in memory. They will not catch
|
||||||
data errors caused by incorrect configuration or use of FreeRTOS. */
|
data errors caused by incorrect configuration or use of FreeRTOS. */
|
||||||
listTEST_LIST_INTEGRITY(pxList);
|
listTEST_LIST_INTEGRITY( pxList );
|
||||||
listTEST_LIST_ITEM_INTEGRITY(pxNewListItem);
|
listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
|
||||||
|
|
||||||
/* Insert a new list item into pxList, but rather than sort the list,
|
/* Insert a new list item into pxList, but rather than sort the list,
|
||||||
makes the new list item the last item to be removed by a call to
|
makes the new list item the last item to be removed by a call to
|
||||||
@@ -92,19 +96,20 @@ void vListInsertEnd(List_t *const pxList, ListItem_t *const pxNewListItem) {
|
|||||||
/* Remember which list the item is in. */
|
/* Remember which list the item is in. */
|
||||||
pxNewListItem->pxContainer = pxList;
|
pxNewListItem->pxContainer = pxList;
|
||||||
|
|
||||||
(pxList->uxNumberOfItems)++;
|
( pxList->uxNumberOfItems )++;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem) {
|
void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
|
||||||
ListItem_t * pxIterator;
|
{
|
||||||
const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
|
ListItem_t *pxIterator;
|
||||||
|
const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;
|
||||||
|
|
||||||
/* Only effective when configASSERT() is also defined, these tests may catch
|
/* Only effective when configASSERT() is also defined, these tests may catch
|
||||||
the list data structures being overwritten in memory. They will not catch
|
the list data structures being overwritten in memory. They will not catch
|
||||||
data errors caused by incorrect configuration or use of FreeRTOS. */
|
data errors caused by incorrect configuration or use of FreeRTOS. */
|
||||||
listTEST_LIST_INTEGRITY(pxList);
|
listTEST_LIST_INTEGRITY( pxList );
|
||||||
listTEST_LIST_ITEM_INTEGRITY(pxNewListItem);
|
listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );
|
||||||
|
|
||||||
/* Insert the new list item into the list, sorted in xItemValue order.
|
/* Insert the new list item into the list, sorted in xItemValue order.
|
||||||
|
|
||||||
@@ -114,9 +119,12 @@ void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem) {
|
|||||||
share of the CPU. However, if the xItemValue is the same as the back marker
|
share of the CPU. However, if the xItemValue is the same as the back marker
|
||||||
the iteration loop below will not end. Therefore the value is checked
|
the iteration loop below will not end. Therefore the value is checked
|
||||||
first, and the algorithm slightly modified if necessary. */
|
first, and the algorithm slightly modified if necessary. */
|
||||||
if (xValueOfInsertion == portMAX_DELAY) {
|
if( xValueOfInsertion == portMAX_DELAY )
|
||||||
|
{
|
||||||
pxIterator = pxList->xListEnd.pxPrevious;
|
pxIterator = pxList->xListEnd.pxPrevious;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
/* *** NOTE ***********************************************************
|
/* *** NOTE ***********************************************************
|
||||||
If you find your application is crashing here then likely causes are
|
If you find your application is crashing here then likely causes are
|
||||||
listed below. In addition see https://www.freertos.org/FAQHelp.html for
|
listed below. In addition see https://www.freertos.org/FAQHelp.html for
|
||||||
@@ -139,10 +147,7 @@ void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem) {
|
|||||||
before vTaskStartScheduler() has been called?).
|
before vTaskStartScheduler() has been called?).
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
for (pxIterator = (ListItem_t *)&(pxList->xListEnd); pxIterator->pxNext->xItemValue <= xValueOfInsertion;
|
for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. *//*lint !e440 The iterator moves to a different value, not xValueOfInsertion. */
|
||||||
pxIterator
|
|
||||||
= pxIterator->pxNext) /*lint !e826 !e740 !e9087 The mini list structure is used as the list end to save RAM. This is checked and valid. */ /*lint !e440 The iterator moves to a
|
|
||||||
different value, not xValueOfInsertion. */
|
|
||||||
{
|
{
|
||||||
/* There is nothing to do here, just iterating to the wanted
|
/* There is nothing to do here, just iterating to the wanted
|
||||||
insertion position. */
|
insertion position. */
|
||||||
@@ -158,14 +163,15 @@ void vListInsert(List_t *const pxList, ListItem_t *const pxNewListItem) {
|
|||||||
item later. */
|
item later. */
|
||||||
pxNewListItem->pxContainer = pxList;
|
pxNewListItem->pxContainer = pxList;
|
||||||
|
|
||||||
(pxList->uxNumberOfItems)++;
|
( pxList->uxNumberOfItems )++;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
UBaseType_t uxListRemove(ListItem_t *const pxItemToRemove) {
|
UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
|
||||||
/* The list item knows which list it is in. Obtain the list from the list
|
{
|
||||||
item. */
|
/* The list item knows which list it is in. Obtain the list from the list
|
||||||
List_t *const pxList = pxItemToRemove->pxContainer;
|
item. */
|
||||||
|
List_t * const pxList = pxItemToRemove->pxContainer;
|
||||||
|
|
||||||
pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
|
pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
|
||||||
pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
|
pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
|
||||||
@@ -174,15 +180,19 @@ UBaseType_t uxListRemove(ListItem_t *const pxItemToRemove) {
|
|||||||
mtCOVERAGE_TEST_DELAY();
|
mtCOVERAGE_TEST_DELAY();
|
||||||
|
|
||||||
/* Make sure the index is left pointing to a valid item. */
|
/* Make sure the index is left pointing to a valid item. */
|
||||||
if (pxList->pxIndex == pxItemToRemove) {
|
if( pxList->pxIndex == pxItemToRemove )
|
||||||
|
{
|
||||||
pxList->pxIndex = pxItemToRemove->pxPrevious;
|
pxList->pxIndex = pxItemToRemove->pxPrevious;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
|
||||||
pxItemToRemove->pxContainer = NULL;
|
pxItemToRemove->pxContainer = NULL;
|
||||||
(pxList->uxNumberOfItems)--;
|
( pxList->uxNumberOfItems )--;
|
||||||
|
|
||||||
return pxList->uxNumberOfItems;
|
return pxList->uxNumberOfItems;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|||||||
2109
source/Middlewares/Third_Party/FreeRTOS/Source/queue.c
vendored
2109
source/Middlewares/Third_Party/FreeRTOS/Source/queue.c
vendored
File diff suppressed because it is too large
Load Diff
3600
source/Middlewares/Third_Party/FreeRTOS/Source/tasks.c
vendored
3600
source/Middlewares/Third_Party/FreeRTOS/Source/tasks.c
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user