mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-19 21:11:57 -04:00
Multiple tidy up, documentation corrections and typo corrections highlighted by Tamas Kleiber's diligent review.
This commit is contained in:
parent
2e42d7690a
commit
00ad1a0200
|
@ -174,7 +174,7 @@ corCRCB *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 ), configMAX_PRIORITIES - ( portTickType ) uxPriority );
|
listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), ( ( portTickType ) configMAX_CO_ROUTINE_PRIORITIES - ( portTickType ) 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. */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -103,48 +103,66 @@ typedef portTickType xEventBitsType;
|
||||||
* within FreeRTOSConfig.h.
|
* within FreeRTOSConfig.h.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef configMINIMAL_STACK_SIZE
|
||||||
|
#error Missing definition: configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h. configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task. Refer to the demo project provided for your port for a suitable value.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef configMAX_PRIORITIES
|
||||||
|
#error Missing definition: configMAX_PRIORITIES must be defined in FreeRTOSConfig.h. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef configUSE_PREEMPTION
|
#ifndef configUSE_PREEMPTION
|
||||||
#error Missing definition: configUSE_PREEMPTION should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configUSE_IDLE_HOOK
|
#ifndef configUSE_IDLE_HOOK
|
||||||
#error Missing definition: configUSE_IDLE_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configUSE_TICK_HOOK
|
#ifndef configUSE_TICK_HOOK
|
||||||
#error Missing definition: configUSE_TICK_HOOK should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configUSE_CO_ROUTINES
|
#ifndef configUSE_CO_ROUTINES
|
||||||
#error Missing definition: configUSE_CO_ROUTINES should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: configUSE_CO_ROUTINES must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_vTaskPrioritySet
|
#ifndef INCLUDE_vTaskPrioritySet
|
||||||
#error Missing definition: INCLUDE_vTaskPrioritySet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: INCLUDE_vTaskPrioritySet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_uxTaskPriorityGet
|
#ifndef INCLUDE_uxTaskPriorityGet
|
||||||
#error Missing definition: INCLUDE_uxTaskPriorityGet should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: INCLUDE_uxTaskPriorityGet must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_vTaskDelete
|
#ifndef INCLUDE_vTaskDelete
|
||||||
#error Missing definition: INCLUDE_vTaskDelete should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: INCLUDE_vTaskDelete must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_vTaskSuspend
|
#ifndef INCLUDE_vTaskSuspend
|
||||||
#error Missing definition: INCLUDE_vTaskSuspend should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: INCLUDE_vTaskSuspend must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_vTaskDelayUntil
|
#ifndef INCLUDE_vTaskDelayUntil
|
||||||
#error Missing definition: INCLUDE_vTaskDelayUntil should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: INCLUDE_vTaskDelayUntil must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_vTaskDelay
|
#ifndef INCLUDE_vTaskDelay
|
||||||
#error Missing definition: INCLUDE_vTaskDelay should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: INCLUDE_vTaskDelay must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef configUSE_16_BIT_TICKS
|
#ifndef configUSE_16_BIT_TICKS
|
||||||
#error Missing definition: configUSE_16_BIT_TICKS should be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
#error Missing definition: configUSE_16_BIT_TICKS must be defined in FreeRTOSConfig.h as either 1 or 0. See the Configuration section of the FreeRTOS API documentation for details.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if configUSE_CO_ROUTINES != 0
|
||||||
|
#if configMAX_CO_ROUTINE_PRIORITIES < 1
|
||||||
|
#error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1.
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if configMAX_PRIORITIES < 1
|
||||||
|
#error configMAX_PRIORITIES must be greater than or equal to 1.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef INCLUDE_xTaskGetIdleTaskHandle
|
#ifndef INCLUDE_xTaskGetIdleTaskHandle
|
||||||
|
@ -627,6 +645,10 @@ typedef portTickType xEventBitsType;
|
||||||
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()
|
#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef configUSE_TRACE_FACILITY
|
||||||
|
#define configUSE_TRACE_FACILITY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* For backward compatability. */
|
/* For backward compatability. */
|
||||||
#define eTaskStateGet eTaskGetState
|
#define eTaskStateGet eTaskGetState
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -115,8 +115,8 @@
|
||||||
* complete and obvious failure of the scheduler. If this is ever experienced
|
* complete and obvious failure of the scheduler. If this is ever experienced
|
||||||
* then the volatile qualifier can be inserted in the relevant places within the
|
* then the volatile qualifier can be inserted in the relevant places within the
|
||||||
* list structures by simply defining configLIST_VOLATILE to volatile in
|
* list structures by simply defining configLIST_VOLATILE to volatile in
|
||||||
* FreeRTOSConfig.h (as per the example at the bottom of this comment block).
|
* FreeRTOSConfig.h (as per the example at the bottom of this comment block).
|
||||||
* If configLIST_VOLATILE is not defined then the preprocessor directives below
|
* If configLIST_VOLATILE is not defined then the preprocessor directives below
|
||||||
* will simply #define configLIST_VOLATILE away completely.
|
* will simply #define configLIST_VOLATILE away completely.
|
||||||
*
|
*
|
||||||
* To use volatile list structure members then add the following line to
|
* To use volatile list structure members then add the following line to
|
||||||
|
@ -157,7 +157,7 @@ typedef struct xMINI_LIST_ITEM xMiniListItem;
|
||||||
typedef struct xLIST
|
typedef struct xLIST
|
||||||
{
|
{
|
||||||
configLIST_VOLATILE unsigned portBASE_TYPE uxNumberOfItems;
|
configLIST_VOLATILE unsigned portBASE_TYPE uxNumberOfItems;
|
||||||
xListItem * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to pvListGetOwnerOfNextEntry (). */
|
xListItem * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */
|
||||||
xMiniListItem 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. */
|
xMiniListItem 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. */
|
||||||
} xList;
|
} xList;
|
||||||
|
|
||||||
|
@ -177,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 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
|
||||||
|
@ -190,7 +190,7 @@ typedef struct xLIST
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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
|
||||||
* represent anything - for example a the priority of a task, or the time at
|
* represent anything - for example the priority of a task, or the time at
|
||||||
* which a task should be unblocked.
|
* which a task should be unblocked.
|
||||||
*
|
*
|
||||||
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
||||||
|
@ -199,7 +199,7 @@ typedef struct xLIST
|
||||||
#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue )
|
#define listGET_LIST_ITEM_VALUE( pxListItem ) ( ( pxListItem )->xItemValue )
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Access macro the 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
|
||||||
* list.
|
* list.
|
||||||
*
|
*
|
||||||
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
* \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
|
||||||
|
@ -250,7 +250,7 @@ typedef struct xLIST
|
||||||
*
|
*
|
||||||
* The list member pxIndex is used to walk through a list. Calling
|
* The list member pxIndex is used to walk through a list. Calling
|
||||||
* listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list
|
* listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list
|
||||||
* and returns that entries pxOwner parameter. Using multiple calls to this
|
* and returns that entry's pxOwner parameter. Using multiple calls to this
|
||||||
* function it is therefore possible to move through every item contained in
|
* function it is therefore possible to move through every item contained in
|
||||||
* a list.
|
* a list.
|
||||||
*
|
*
|
||||||
|
@ -259,6 +259,7 @@ typedef struct xLIST
|
||||||
* The pxOwner parameter effectively creates a two way link between the list
|
* The pxOwner parameter effectively creates a two way link between the list
|
||||||
* item and its owner.
|
* item and its owner.
|
||||||
*
|
*
|
||||||
|
* @param pxTCB pxTCB is set to the address of the owner of the next list item.
|
||||||
* @param pxList The list from which the next item owner is to be returned.
|
* @param pxList The list from which the next item owner is to be returned.
|
||||||
*
|
*
|
||||||
* \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
|
* \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
|
||||||
|
@ -303,8 +304,7 @@ xList * const pxConstList = ( pxList ); \
|
||||||
*
|
*
|
||||||
* @param pxList The list we want to know if the list item is within.
|
* @param pxList The list we want to know if the list item is within.
|
||||||
* @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 is the list item is in the list, otherwise pdFALSE.
|
* @return pdTRUE if the list item is in the list, otherwise pdFALSE.
|
||||||
* pointer against
|
|
||||||
*/
|
*/
|
||||||
#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( portBASE_TYPE ) ( ( pxListItem )->pvContainer == ( void * ) ( pxList ) ) )
|
#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( portBASE_TYPE ) ( ( pxListItem )->pvContainer == ( void * ) ( pxList ) ) )
|
||||||
|
|
||||||
|
@ -352,7 +352,7 @@ void vListInitialiseItem( xListItem * const pxItem );
|
||||||
*
|
*
|
||||||
* @param pxList The list into which the item is to be inserted.
|
* @param pxList The list into which the item is to be inserted.
|
||||||
*
|
*
|
||||||
* @param pxNewListItem The item to that is to be placed in the list.
|
* @param pxNewListItem The item that is to be placed in the list.
|
||||||
*
|
*
|
||||||
* \page vListInsert vListInsert
|
* \page vListInsert vListInsert
|
||||||
* \ingroup LinkedList
|
* \ingroup LinkedList
|
||||||
|
|
|
@ -83,7 +83,6 @@ typedef void (*pdAPPLICATION_CALLBACK_CODE)( void *, unsigned long );
|
||||||
|
|
||||||
/* Error definitions. */
|
/* Error definitions. */
|
||||||
#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 )
|
#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY ( -1 )
|
||||||
#define errNO_TASK_TO_RUN ( -2 )
|
|
||||||
#define errQUEUE_BLOCKED ( -4 )
|
#define errQUEUE_BLOCKED ( -4 )
|
||||||
#define errQUEUE_YIELD ( -5 )
|
#define errQUEUE_YIELD ( -5 )
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -1137,7 +1137,7 @@ void vQueueDelete( xQueueHandle xQueue ) PRIVILEGED_FUNCTION;
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
xQueueHandle xQueue;
|
xQueueHandle xQueue;
|
||||||
|
|
||||||
void vFunction( void *pvParameters )
|
void vFunction( void *pvParameters )
|
||||||
{
|
{
|
||||||
// Create a queue to hold one unsigned long value. It is strongly
|
// Create a queue to hold one unsigned long value. It is strongly
|
||||||
|
@ -1166,7 +1166,7 @@ unsigned long ulVarToSend, ulValReceived;
|
||||||
// Reading from the queue will now return 100.
|
// Reading from the queue will now return 100.
|
||||||
|
|
||||||
// ...
|
// ...
|
||||||
|
|
||||||
if( xHigherPrioritytaskWoken == pdTRUE )
|
if( xHigherPrioritytaskWoken == pdTRUE )
|
||||||
{
|
{
|
||||||
// Writing to the queue caused a task to unblock and the unblocked task
|
// Writing to the queue caused a task to unblock and the unblocked task
|
||||||
|
@ -1509,7 +1509,9 @@ portBASE_TYPE xQueueGiveMutexRecursive( xQueueHandle pxMutex ) PRIVILEGED_FUNCTI
|
||||||
* handles can also be passed in here.
|
* handles can also be passed in here.
|
||||||
*
|
*
|
||||||
* @param pcName The name to be associated with the handle. This is the
|
* @param pcName The name to be associated with the handle. This is the
|
||||||
* name that the kernel aware debugger will display.
|
* name that the kernel aware debugger will display. The queue registry only
|
||||||
|
* stores a pointer to the string - so the string must be persistent (global or
|
||||||
|
* preferably in ROM/Flash), not on the stack.
|
||||||
*/
|
*/
|
||||||
#if configQUEUE_REGISTRY_SIZE > 0
|
#if configQUEUE_REGISTRY_SIZE > 0
|
||||||
void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName ) PRIVILEGED_FUNCTION;
|
void vQueueAddToRegistry( xQueueHandle xQueue, signed char *pcName ) PRIVILEGED_FUNCTION;
|
||||||
|
|
|
@ -828,7 +828,7 @@ typedef xQueueHandle xSemaphoreHandle;
|
||||||
* If xMutex is not a mutex type semaphore, or the mutex is available (not held
|
* If xMutex is not a mutex type semaphore, or the mutex is available (not held
|
||||||
* by a task), return NULL.
|
* by a task), return NULL.
|
||||||
*
|
*
|
||||||
* Note: This Is is a good way of determining if the calling task is the mutex
|
* Note: This is a good way of determining if the calling task is the mutex
|
||||||
* holder, but not a good way of determining the identity of the mutex holder as
|
* holder, but not a good way of determining the identity of the mutex holder as
|
||||||
* 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.
|
||||||
|
|
|
@ -127,7 +127,7 @@ typedef struct xMEMORY_REGION
|
||||||
/*
|
/*
|
||||||
* Parameters required to create an MPU protected task.
|
* Parameters required to create an MPU protected task.
|
||||||
*/
|
*/
|
||||||
typedef struct xTASK_PARAMTERS
|
typedef struct xTASK_PARAMETERS
|
||||||
{
|
{
|
||||||
pdTASK_CODE pvTaskCode;
|
pdTASK_CODE pvTaskCode;
|
||||||
const signed char * const pcName;
|
const signed char * const pcName;
|
||||||
|
@ -161,7 +161,7 @@ typedef enum
|
||||||
} eSleepModeStatus;
|
} eSleepModeStatus;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Defines the priority used by the idle task. This must not be modified.
|
* Defines the priority used by the idle task. This must not be modified.
|
||||||
*
|
*
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
|
@ -243,7 +243,7 @@ is used in assert() statements. */
|
||||||
*<pre>
|
*<pre>
|
||||||
portBASE_TYPE xTaskCreate(
|
portBASE_TYPE xTaskCreate(
|
||||||
pdTASK_CODE pvTaskCode,
|
pdTASK_CODE pvTaskCode,
|
||||||
const char * const pcName,
|
const signed char * const pcName,
|
||||||
unsigned short usStackDepth,
|
unsigned short usStackDepth,
|
||||||
void *pvParameters,
|
void *pvParameters,
|
||||||
unsigned portBASE_TYPE uxPriority,
|
unsigned portBASE_TYPE uxPriority,
|
||||||
|
@ -261,7 +261,7 @@ is used in assert() statements. */
|
||||||
* must be implemented to never return (i.e. continuous loop).
|
* must be implemented to never return (i.e. continuous loop).
|
||||||
*
|
*
|
||||||
* @param pcName A descriptive name for the task. This is mainly used to
|
* @param pcName A descriptive name for the task. This is mainly used to
|
||||||
* facilitate debugging. Max length defined by tskMAX_TASK_NAME_LEN - default
|
* facilitate debugging. Max length defined by configMAX_TASK_NAME_LEN - default
|
||||||
* is 16.
|
* is 16.
|
||||||
*
|
*
|
||||||
* @param usStackDepth The size of the task stack specified as the number of
|
* @param usStackDepth The size of the task stack specified as the number of
|
||||||
|
@ -282,7 +282,7 @@ is used in assert() statements. */
|
||||||
* can be referenced.
|
* can be referenced.
|
||||||
*
|
*
|
||||||
* @return pdPASS if the task was successfully created and added to a ready
|
* @return pdPASS if the task was successfully created and added to a ready
|
||||||
* list, otherwise an error code defined in the file errors. h
|
* list, otherwise an error code defined in the file projdefs.h
|
||||||
*
|
*
|
||||||
* Example usage:
|
* Example usage:
|
||||||
<pre>
|
<pre>
|
||||||
|
@ -299,16 +299,20 @@ is used in assert() statements. */
|
||||||
void vOtherFunction( void )
|
void vOtherFunction( void )
|
||||||
{
|
{
|
||||||
static unsigned char ucParameterToPass;
|
static unsigned char ucParameterToPass;
|
||||||
xTaskHandle xHandle;
|
xTaskHandle xHandle = NULL;
|
||||||
|
|
||||||
// Create the task, storing the handle. Note that the passed parameter ucParameterToPass
|
// Create the task, storing the handle. Note that the passed parameter ucParameterToPass
|
||||||
// must exist for the lifetime of the task, so in this case is declared static. If it was just an
|
// must exist for the lifetime of the task, so in this case is declared static. If it was just an
|
||||||
// an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
|
// an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
|
||||||
// the new task attempts to access it.
|
// the new task attempts to access it.
|
||||||
xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
|
xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
|
||||||
|
configASSERT( xHandle );
|
||||||
|
|
||||||
// Use the handle to delete the task.
|
// Use the handle to delete the task.
|
||||||
vTaskDelete( xHandle );
|
if( xHandle != NULL )
|
||||||
|
{
|
||||||
|
vTaskDelete( xHandle );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
* \defgroup xTaskCreate xTaskCreate
|
* \defgroup xTaskCreate xTaskCreate
|
||||||
|
@ -337,7 +341,7 @@ is used in assert() statements. */
|
||||||
* can be referenced.
|
* can be referenced.
|
||||||
*
|
*
|
||||||
* @return pdPASS if the task was successfully created and added to a ready
|
* @return pdPASS if the task was successfully created and added to a ready
|
||||||
* list, otherwise an error code defined in the file errors. h
|
* list, otherwise an error code defined in the file projdefs.h
|
||||||
*
|
*
|
||||||
* Example usage:
|
* Example usage:
|
||||||
<pre>
|
<pre>
|
||||||
|
@ -376,7 +380,7 @@ xTaskHandle xHandle;
|
||||||
vTaskStartScheduler();
|
vTaskStartScheduler();
|
||||||
|
|
||||||
// Will only get here if there was insufficient memory to create the idle
|
// Will only get here if there was insufficient memory to create the idle
|
||||||
// task.
|
// and/or timer task.
|
||||||
for( ;; );
|
for( ;; );
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
|
@ -440,7 +444,7 @@ void vTaskAllocateMPURegions( xTaskHandle xTask, const xMemoryRegion * const pxR
|
||||||
* INCLUDE_vTaskDelete must be defined as 1 for this function to be available.
|
* INCLUDE_vTaskDelete must be defined as 1 for this function to be available.
|
||||||
* See the configuration section for more information.
|
* See the configuration section for more information.
|
||||||
*
|
*
|
||||||
* Remove a task from the RTOS real time kernels management. The task being
|
* Remove a task from the RTOS real time kernel's management. The task being
|
||||||
* deleted will be removed from all ready, blocked, suspended and event lists.
|
* deleted will be removed from all ready, blocked, suspended and event lists.
|
||||||
*
|
*
|
||||||
* NOTE: The idle task is responsible for freeing the kernel allocated
|
* NOTE: The idle task is responsible for freeing the kernel allocated
|
||||||
|
@ -480,7 +484,7 @@ void vTaskDelete( xTaskHandle xTaskToDelete ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>void vTaskDelay( portTickType xTicksToDelay );</pre>
|
* <pre>void vTaskDelay( const portTickType xTicksToDelay );</pre>
|
||||||
*
|
*
|
||||||
* Delay a task for a given number of ticks. The actual time that the
|
* Delay a task for a given number of ticks. The actual time that the
|
||||||
* task remains blocked depends on the tick rate. The constant
|
* task remains blocked depends on the tick rate. The constant
|
||||||
|
@ -495,7 +499,7 @@ void vTaskDelete( xTaskHandle xTaskToDelete ) PRIVILEGED_FUNCTION;
|
||||||
* the time at which vTaskDelay() is called. For example, specifying a block
|
* the time at which vTaskDelay() is called. For example, specifying a block
|
||||||
* period of 100 ticks will cause the task to unblock 100 ticks after
|
* period of 100 ticks will cause the task to unblock 100 ticks after
|
||||||
* vTaskDelay() is called. vTaskDelay() does not therefore provide a good method
|
* vTaskDelay() is called. vTaskDelay() does not therefore provide a good method
|
||||||
* of controlling the frequency of a cyclical task as the path taken through the
|
* of controlling the frequency of a periodic task as the path taken through the
|
||||||
* code, as well as other task and interrupt activity, will effect the frequency
|
* code, as well as other task and interrupt activity, will effect the frequency
|
||||||
* at which vTaskDelay() gets called and therefore the time at which the task
|
* at which vTaskDelay() gets called and therefore the time at which the task
|
||||||
* next executes. See vTaskDelayUntil() for an alternative API function designed
|
* next executes. See vTaskDelayUntil() for an alternative API function designed
|
||||||
|
@ -508,8 +512,6 @@ void vTaskDelete( xTaskHandle xTaskToDelete ) PRIVILEGED_FUNCTION;
|
||||||
*
|
*
|
||||||
* Example usage:
|
* Example usage:
|
||||||
|
|
||||||
void vTaskFunction( void * pvParameters )
|
|
||||||
{
|
|
||||||
void vTaskFunction( void * pvParameters )
|
void vTaskFunction( void * pvParameters )
|
||||||
{
|
{
|
||||||
// Block for 500ms.
|
// Block for 500ms.
|
||||||
|
@ -526,16 +528,16 @@ void vTaskDelete( xTaskHandle xTaskToDelete ) PRIVILEGED_FUNCTION;
|
||||||
* \defgroup vTaskDelay vTaskDelay
|
* \defgroup vTaskDelay vTaskDelay
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskDelay( portTickType xTicksToDelay ) PRIVILEGED_FUNCTION;
|
void vTaskDelay( const portTickType xTicksToDelay ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );</pre>
|
* <pre>void vTaskDelayUntil( portTickType *pxPreviousWakeTime, const portTickType xTimeIncrement );</pre>
|
||||||
*
|
*
|
||||||
* INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available.
|
* INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available.
|
||||||
* See the configuration section for more information.
|
* See the configuration section for more information.
|
||||||
*
|
*
|
||||||
* Delay a task until a specified time. This function can be used by cyclical
|
* Delay a task until a specified time. This function can be used by periodic
|
||||||
* tasks to ensure a constant execution frequency.
|
* tasks to ensure a constant execution frequency.
|
||||||
*
|
*
|
||||||
* This function differs from vTaskDelay () in one important aspect: vTaskDelay () will
|
* This function differs from vTaskDelay () in one important aspect: vTaskDelay () will
|
||||||
|
@ -585,13 +587,13 @@ void vTaskDelay( portTickType xTicksToDelay ) PRIVILEGED_FUNCTION;
|
||||||
* \defgroup vTaskDelayUntil vTaskDelayUntil
|
* \defgroup vTaskDelayUntil vTaskDelayUntil
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement ) PRIVILEGED_FUNCTION;
|
void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, const portTickType xTimeIncrement ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle xTask );</pre>
|
* <pre>unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle xTask );</pre>
|
||||||
*
|
*
|
||||||
* INCLUDE_xTaskPriorityGet must be defined as 1 for this function to be available.
|
* INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available.
|
||||||
* See the configuration section for more information.
|
* See the configuration section for more information.
|
||||||
*
|
*
|
||||||
* Obtain the priority of any task.
|
* Obtain the priority of any task.
|
||||||
|
@ -754,7 +756,7 @@ void vTaskSuspend( xTaskHandle xTaskToSuspend ) PRIVILEGED_FUNCTION;
|
||||||
*
|
*
|
||||||
* Resumes a suspended task.
|
* Resumes a suspended task.
|
||||||
*
|
*
|
||||||
* A task that has been suspended by one of more calls to vTaskSuspend ()
|
* A task that has been suspended by one or more calls to vTaskSuspend ()
|
||||||
* will be made available for running again by a single call to
|
* will be made available for running again by a single call to
|
||||||
* vTaskResume ().
|
* vTaskResume ().
|
||||||
*
|
*
|
||||||
|
@ -786,7 +788,7 @@ void vTaskSuspend( xTaskHandle xTaskToSuspend ) PRIVILEGED_FUNCTION;
|
||||||
vTaskResume( xHandle );
|
vTaskResume( xHandle );
|
||||||
|
|
||||||
// The created task will once again get microcontroller processing
|
// The created task will once again get microcontroller processing
|
||||||
// time in accordance with it priority within the system.
|
// time in accordance with its priority within the system.
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
* \defgroup vTaskResume vTaskResume
|
* \defgroup vTaskResume vTaskResume
|
||||||
|
@ -803,12 +805,21 @@ void vTaskResume( xTaskHandle xTaskToResume ) PRIVILEGED_FUNCTION;
|
||||||
*
|
*
|
||||||
* An implementation of vTaskResume() that can be called from within an ISR.
|
* An implementation of vTaskResume() that can be called from within an ISR.
|
||||||
*
|
*
|
||||||
* A task that has been suspended by one of more calls to vTaskSuspend ()
|
* A task that has been suspended by one or more calls to vTaskSuspend ()
|
||||||
* will be made available for running again by a single call to
|
* will be made available for running again by a single call to
|
||||||
* xTaskResumeFromISR ().
|
* xTaskResumeFromISR ().
|
||||||
*
|
*
|
||||||
|
* xTaskResumeFromISR() should not be used to synchronise a task with an
|
||||||
|
* interrupt if there is a chance that the interrupt could arrive prior to the
|
||||||
|
* task being suspended - as this can lead to interrupts being missed. Use of a
|
||||||
|
* semaphore as a synchronisation mechanism would avoid this eventuality.
|
||||||
|
*
|
||||||
* @param xTaskToResume Handle to the task being readied.
|
* @param xTaskToResume Handle to the task being readied.
|
||||||
*
|
*
|
||||||
|
* @return pdTRUE if resuming the task should result in a context switch,
|
||||||
|
* otherwise pdFALSE. This is used by the ISR to determine if a context switch
|
||||||
|
* may be required following the ISR.
|
||||||
|
*
|
||||||
* \defgroup vTaskResumeFromISR vTaskResumeFromISR
|
* \defgroup vTaskResumeFromISR vTaskResumeFromISR
|
||||||
* \ingroup TaskCtrl
|
* \ingroup TaskCtrl
|
||||||
*/
|
*/
|
||||||
|
@ -823,12 +834,7 @@ portBASE_TYPE xTaskResumeFromISR( xTaskHandle xTaskToResume ) PRIVILEGED_FUNCTIO
|
||||||
* <pre>void vTaskStartScheduler( void );</pre>
|
* <pre>void vTaskStartScheduler( void );</pre>
|
||||||
*
|
*
|
||||||
* Starts the real time kernel tick processing. After calling the kernel
|
* Starts the real time kernel tick processing. After calling the kernel
|
||||||
* has control over which tasks are executed and when. This function
|
* has control over which tasks are executed and when.
|
||||||
* does not return until an executing task calls vTaskEndScheduler ().
|
|
||||||
*
|
|
||||||
* At least one task should be created via a call to xTaskCreate ()
|
|
||||||
* before calling vTaskStartScheduler (). The idle task is created
|
|
||||||
* automatically when the first application task is created.
|
|
||||||
*
|
*
|
||||||
* See the demo application file main.c for an example of creating
|
* See the demo application file main.c for an example of creating
|
||||||
* tasks and starting the kernel.
|
* tasks and starting the kernel.
|
||||||
|
@ -856,6 +862,9 @@ void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION;
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>void vTaskEndScheduler( void );</pre>
|
* <pre>void vTaskEndScheduler( void );</pre>
|
||||||
*
|
*
|
||||||
|
* NOTE: At the time of writing only the x86 real mode port, which runs on a PC
|
||||||
|
* in place of DOS, implements this function.
|
||||||
|
*
|
||||||
* Stops the real time kernel tick. All created tasks will be automatically
|
* Stops the real time kernel tick. All created tasks will be automatically
|
||||||
* deleted and multitasking (either preemptive or cooperative) will
|
* deleted and multitasking (either preemptive or cooperative) will
|
||||||
* stop. Execution then resumes from the point where vTaskStartScheduler ()
|
* stop. Execution then resumes from the point where vTaskStartScheduler ()
|
||||||
|
@ -909,8 +918,8 @@ void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION;
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>void vTaskSuspendAll( void );</pre>
|
* <pre>void vTaskSuspendAll( void );</pre>
|
||||||
*
|
*
|
||||||
* Suspends all real time kernel activity while keeping interrupts (including the
|
* Suspends the scheduler without disabling interrupts. Context switches will
|
||||||
* kernel tick) enabled.
|
* not occur while the scheduler is suspended.
|
||||||
*
|
*
|
||||||
* After calling vTaskSuspendAll () the calling task will continue to execute
|
* After calling vTaskSuspendAll () the calling task will continue to execute
|
||||||
* without risk of being swapped out until a call to xTaskResumeAll () has been
|
* without risk of being swapped out until a call to xTaskResumeAll () has been
|
||||||
|
@ -960,9 +969,11 @@ void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION;
|
||||||
* task. h
|
* task. h
|
||||||
* <pre>char xTaskResumeAll( void );</pre>
|
* <pre>char xTaskResumeAll( void );</pre>
|
||||||
*
|
*
|
||||||
* Resumes real time kernel activity following a call to vTaskSuspendAll ().
|
* Resumes scheduler activity after it was suspended by a call to
|
||||||
* After a call to vTaskSuspendAll () the kernel will take control of which
|
* vTaskSuspendAll().
|
||||||
* task is executing at any time.
|
*
|
||||||
|
* xTaskResumeAll() only resumes the scheduler. It does not unsuspend tasks
|
||||||
|
* that were previously suspended by a call to vTaskSuspend().
|
||||||
*
|
*
|
||||||
* @return If resuming the scheduler caused a context switch then pdTRUE is
|
* @return If resuming the scheduler caused a context switch then pdTRUE is
|
||||||
* returned, otherwise pdFALSE is returned.
|
* returned, otherwise pdFALSE is returned.
|
||||||
|
@ -1017,7 +1028,7 @@ signed portBASE_TYPE xTaskResumeAll( void ) PRIVILEGED_FUNCTION;
|
||||||
* is in any other state.
|
* is in any other state.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
|
signed portBASE_TYPE xTaskIsTaskSuspended( const xTaskHandle xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/*-----------------------------------------------------------
|
||||||
* TASK UTILITIES
|
* TASK UTILITIES
|
||||||
|
@ -1045,7 +1056,7 @@ portTickType xTaskGetTickCount( void ) PRIVILEGED_FUNCTION;
|
||||||
* microcontroller being used or interrupt nesting is either not supported or
|
* microcontroller being used or interrupt nesting is either not supported or
|
||||||
* not being used.
|
* not being used.
|
||||||
*
|
*
|
||||||
* \defgroup xTaskGetTickCount xTaskGetTickCount
|
* \defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR
|
||||||
* \ingroup TaskUtils
|
* \ingroup TaskUtils
|
||||||
*/
|
*/
|
||||||
portTickType xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION;
|
portTickType xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION;
|
||||||
|
@ -1069,7 +1080,7 @@ unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION;
|
||||||
* <PRE>signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery );</PRE>
|
* <PRE>signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery );</PRE>
|
||||||
*
|
*
|
||||||
* @return The text (human readable) name of the task referenced by the handle
|
* @return The text (human readable) name of the task referenced by the handle
|
||||||
* xTaskToQueury. A task can query its own name by either passing in its own
|
* xTaskToQuery. A task can query its own name by either passing in its own
|
||||||
* handle, or by setting xTaskToQuery to NULL. INCLUDE_pcTaskGetTaskName must be
|
* handle, or by setting xTaskToQuery to NULL. INCLUDE_pcTaskGetTaskName must be
|
||||||
* set to 1 in FreeRTOSConfig.h for pcTaskGetTaskName() to be available.
|
* set to 1 in FreeRTOSConfig.h for pcTaskGetTaskName() to be available.
|
||||||
*
|
*
|
||||||
|
@ -1093,12 +1104,13 @@ signed char *pcTaskGetTaskName( xTaskHandle xTaskToQuery );
|
||||||
* @param xTask Handle of the task associated with the stack to be checked.
|
* @param xTask Handle of the task associated with the stack to be checked.
|
||||||
* Set xTask to NULL to check the stack of the calling task.
|
* Set xTask to NULL to check the stack of the calling task.
|
||||||
*
|
*
|
||||||
* @return The smallest amount of free stack space there has been (in bytes)
|
* @return The smallest amount of free stack space there has been (in words, so
|
||||||
* since the task referenced by xTask was created.
|
* actual spaces on the stack rather than bytes) since the task referenced by
|
||||||
|
* xTask was created.
|
||||||
*/
|
*/
|
||||||
unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
|
unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/* When using trace macros it is sometimes necessary to include tasks.h before
|
/* When using trace macros it is sometimes necessary to include task.h before
|
||||||
FreeRTOS.h. When this is done pdTASK_HOOK_CODE will not yet have been defined,
|
FreeRTOS.h. When this is done pdTASK_HOOK_CODE will not yet have been defined,
|
||||||
so the following two prototypes will cause a compilation error. This can be
|
so the following two prototypes will cause a compilation error. This can be
|
||||||
fixed by simply guarding against the inclusion of these two prototypes unless
|
fixed by simply guarding against the inclusion of these two prototypes unless
|
||||||
|
@ -1128,13 +1140,14 @@ constant. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* task.h
|
* task.h
|
||||||
* <pre>portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );</pre>
|
* <pre>portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter );</pre>
|
||||||
*
|
*
|
||||||
* Calls the hook function associated with xTask. Passing xTask as NULL has
|
* Calls the hook function associated with xTask. Passing xTask as NULL has
|
||||||
* the effect of calling the Running tasks (the calling task) hook function.
|
* the effect of calling the Running tasks (the calling task) hook function.
|
||||||
*
|
*
|
||||||
* pvParameter is passed to the hook function for the task to interpret as it
|
* pvParameter is passed to the hook function for the task to interpret as it
|
||||||
* wants.
|
* wants. The return value is the value returned by the task hook function
|
||||||
|
* registered by the user.
|
||||||
*/
|
*/
|
||||||
portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter ) PRIVILEGED_FUNCTION;
|
portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
@ -1148,7 +1161,7 @@ portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter
|
||||||
xTaskHandle xTaskGetIdleTaskHandle( void );
|
xTaskHandle xTaskGetIdleTaskHandle( void );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* configUSE_TRACE_FACILITY must bet defined as 1 in FreeRTOSConfig.h for
|
* configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for
|
||||||
* uxTaskGetSystemState() to be available.
|
* uxTaskGetSystemState() to be available.
|
||||||
*
|
*
|
||||||
* uxTaskGetSystemState() populates an xTaskStatusType structure for each task in
|
* uxTaskGetSystemState() populates an xTaskStatusType structure for each task in
|
||||||
|
@ -1197,11 +1210,11 @@ xTaskHandle xTaskGetIdleTaskHandle( void );
|
||||||
|
|
||||||
// Take a snapshot of the number of tasks in case it changes while this
|
// Take a snapshot of the number of tasks in case it changes while this
|
||||||
// function is executing.
|
// function is executing.
|
||||||
uxArraySize = uxCurrentNumberOfTasks();
|
uxArraySize = uxTaskGetNumberOfTasks();
|
||||||
|
|
||||||
// Allocate a xTaskStatusType structure for each task. An array could be
|
// Allocate a xTaskStatusType structure for each task. An array could be
|
||||||
// allocated statically at compile time.
|
// allocated statically at compile time.
|
||||||
pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( xTaskStatusType ) );
|
pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( xTaskStatusType ) );
|
||||||
|
|
||||||
if( pxTaskStatusArray != NULL )
|
if( pxTaskStatusArray != NULL )
|
||||||
{
|
{
|
||||||
|
@ -1284,7 +1297,7 @@ unsigned portBASE_TYPE uxTaskGetSystemState( xTaskStatusType *pxTaskStatusArray,
|
||||||
* call to vTaskList().
|
* call to vTaskList().
|
||||||
*
|
*
|
||||||
* @param pcWriteBuffer A buffer into which the above mentioned details
|
* @param pcWriteBuffer A buffer into which the above mentioned details
|
||||||
* will be written, in ascii form. This buffer is assumed to be large
|
* will be written, in ASCII form. This buffer is assumed to be large
|
||||||
* enough to contain the generated report. Approximately 40 bytes per
|
* enough to contain the generated report. Approximately 40 bytes per
|
||||||
* task should be sufficient.
|
* task should be sufficient.
|
||||||
*
|
*
|
||||||
|
@ -1300,7 +1313,7 @@ void vTaskList( signed char *pcWriteBuffer ) PRIVILEGED_FUNCTION;
|
||||||
* 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.
|
||||||
|
@ -1338,7 +1351,7 @@ void vTaskList( signed char *pcWriteBuffer ) PRIVILEGED_FUNCTION;
|
||||||
* vTaskGetRunTimeStats().
|
* vTaskGetRunTimeStats().
|
||||||
*
|
*
|
||||||
* @param pcWriteBuffer A buffer into which the execution times will be
|
* @param pcWriteBuffer A buffer into which the execution times will be
|
||||||
* written, in ascii form. This buffer is assumed to be large enough to
|
* written, in ASCII form. This buffer is assumed to be large enough to
|
||||||
* contain the generated report. Approximately 40 bytes per task should
|
* contain the generated report. Approximately 40 bytes per task should
|
||||||
* be sufficient.
|
* be sufficient.
|
||||||
*
|
*
|
||||||
|
@ -1412,8 +1425,6 @@ void vTaskPlaceOnUnorderedEventList( xList * pxEventList, portTickType xItemValu
|
||||||
* The difference being that this function does not permit tasks to block
|
* The difference being that this function does not permit tasks to block
|
||||||
* indefinitely, whereas vTaskPlaceOnEventList() does.
|
* indefinitely, whereas vTaskPlaceOnEventList() does.
|
||||||
*
|
*
|
||||||
* @return pdTRUE if the task being removed has a higher priority than the task
|
|
||||||
* making the call, otherwise pdFALSE.
|
|
||||||
*/
|
*/
|
||||||
void vTaskPlaceOnEventListRestricted( xList * const pxEventList, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;
|
void vTaskPlaceOnEventListRestricted( xList * const pxEventList, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
|
@ -1512,21 +1523,23 @@ signed portBASE_TYPE xTaskGenericCreate( pdTASK_CODE pxTaskCode, const signed ch
|
||||||
unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
|
unsigned portBASE_TYPE uxTaskGetTaskNumber( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the uxTCBNumber of the task referenced by the xTask parameter to
|
* Set the uxTaskNumber of the task referenced by the xTask parameter to
|
||||||
* ucHandle.
|
* uxHandle.
|
||||||
*/
|
*/
|
||||||
void vTaskSetTaskNumber( xTaskHandle xTask, unsigned portBASE_TYPE uxHandle ) PRIVILEGED_FUNCTION;
|
void vTaskSetTaskNumber( xTaskHandle xTask, unsigned portBASE_TYPE uxHandle ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Only available when configUSE_TICKLESS_IDLE is set to 1.
|
||||||
* If tickless mode is being used, or a low power mode is implemented, then
|
* If tickless mode is being used, or a low power mode is implemented, then
|
||||||
* the tick interrupt will not execute during idle periods. When this is the
|
* the tick interrupt will not execute during idle periods. When this is the
|
||||||
* case, the tick count value maintained by the scheduler needs to be kept up
|
* case, the tick count value maintained by the scheduler needs to be kept up
|
||||||
* to date with the actual execution time by being skipped forward by the by
|
* to date with the actual execution time by being skipped forward by a time
|
||||||
* a time equal to the idle period.
|
* equal to the idle period.
|
||||||
*/
|
*/
|
||||||
void vTaskStepTick( portTickType xTicksToJump ) PRIVILEGED_FUNCTION;
|
void vTaskStepTick( portTickType xTicksToJump ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Only avilable when configUSE_TICKLESS_IDLE is set to 1.
|
||||||
* Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port
|
* Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port
|
||||||
* specific sleep function to determine if it is ok to proceed with the sleep,
|
* specific sleep function to determine if it is ok to proceed with the sleep,
|
||||||
* and if it is ok to proceed, if it is ok to sleep indefinitely.
|
* and if it is ok to proceed, if it is ok to sleep indefinitely.
|
||||||
|
|
|
@ -80,6 +80,10 @@ happens to also be including task.h. */
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------
|
||||||
|
* MACROS AND DEFINITIONS
|
||||||
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
/* IDs for commands that can be sent/received on the timer queue. These are to
|
/* IDs for commands that can be sent/received on the timer queue. These are to
|
||||||
be used solely through the macros that make up the public software timer API,
|
be used solely through the macros that make up the public software timer API,
|
||||||
as defined below. */
|
as defined below. */
|
||||||
|
@ -89,11 +93,7 @@ as defined below. */
|
||||||
#define tmrCOMMAND_CHANGE_PERIOD ( ( portBASE_TYPE ) 2 )
|
#define tmrCOMMAND_CHANGE_PERIOD ( ( portBASE_TYPE ) 2 )
|
||||||
#define tmrCOMMAND_DELETE ( ( portBASE_TYPE ) 3 )
|
#define tmrCOMMAND_DELETE ( ( portBASE_TYPE ) 3 )
|
||||||
|
|
||||||
/*-----------------------------------------------------------
|
/**
|
||||||
* MACROS AND DEFINITIONS
|
|
||||||
*----------------------------------------------------------*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Type by which software timers are referenced. For example, a call to
|
* Type by which software timers are referenced. For example, a call to
|
||||||
* xTimerCreate() returns an xTimerHandle variable that can then be used to
|
* xTimerCreate() returns an xTimerHandle variable that can then be used to
|
||||||
* reference the subject timer in calls to other software timer API functions
|
* reference the subject timer in calls to other software timer API functions
|
||||||
|
@ -105,7 +105,7 @@ typedef void * xTimerHandle;
|
||||||
typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer );
|
typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* xTimerHandle xTimerCreate( const signed char *pcTimerName,
|
* xTimerHandle xTimerCreate( const signed char * const pcTimerName,
|
||||||
* portTickType xTimerPeriodInTicks,
|
* portTickType xTimerPeriodInTicks,
|
||||||
* unsigned portBASE_TYPE uxAutoReload,
|
* unsigned portBASE_TYPE uxAutoReload,
|
||||||
* void * pvTimerID,
|
* void * pvTimerID,
|
||||||
|
@ -145,10 +145,10 @@ typedef void (*tmrTIMER_CALLBACK)( xTimerHandle xTimer );
|
||||||
* Callback functions must have the prototype defined by tmrTIMER_CALLBACK,
|
* Callback functions must have the prototype defined by tmrTIMER_CALLBACK,
|
||||||
* which is "void vCallbackFunction( xTimerHandle xTimer );".
|
* which is "void vCallbackFunction( xTimerHandle xTimer );".
|
||||||
*
|
*
|
||||||
* @return If the timer is successfully create then a handle to the newly
|
* @return If the timer is successfully created then a handle to the newly
|
||||||
* created timer is returned. If the timer cannot be created (because either
|
* created timer is returned. If the timer cannot be created (because either
|
||||||
* there is insufficient FreeRTOS heap remaining to allocate the timer
|
* there is insufficient FreeRTOS heap remaining to allocate the timer
|
||||||
* structures, or the timer period was set to 0) then 0 is returned.
|
* structures, or the timer period was set to 0) then NULL is returned.
|
||||||
*
|
*
|
||||||
* Example usage:
|
* Example usage:
|
||||||
* @verbatim
|
* @verbatim
|
||||||
|
@ -263,7 +263,7 @@ void *pvTimerGetTimerID( xTimerHandle xTimer ) PRIVILEGED_FUNCTION;
|
||||||
*
|
*
|
||||||
* A timer will be dormant if:
|
* A timer will be dormant if:
|
||||||
* 1) It has been created but not started, or
|
* 1) It has been created but not started, or
|
||||||
* 2) It is an expired on-shot timer that has not been restarted.
|
* 2) It is an expired one-shot timer that has not been restarted.
|
||||||
*
|
*
|
||||||
* Timers are created in the dormant state. The xTimerStart(), xTimerReset(),
|
* Timers are created in the dormant state. The xTimerStart(), xTimerReset(),
|
||||||
* xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and
|
* xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and
|
||||||
|
@ -294,6 +294,8 @@ void *pvTimerGetTimerID( xTimerHandle xTimer ) PRIVILEGED_FUNCTION;
|
||||||
portBASE_TYPE xTimerIsTimerActive( xTimerHandle xTimer ) PRIVILEGED_FUNCTION;
|
portBASE_TYPE xTimerIsTimerActive( xTimerHandle xTimer ) PRIVILEGED_FUNCTION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
|
*
|
||||||
* xTimerGetTimerDaemonTaskHandle() is only available if
|
* xTimerGetTimerDaemonTaskHandle() is only available if
|
||||||
* INCLUDE_xTimerGetTimerDaemonTaskHandle is set to 1 in FreeRTOSConfig.h.
|
* INCLUDE_xTimerGetTimerDaemonTaskHandle is set to 1 in FreeRTOSConfig.h.
|
||||||
*
|
*
|
||||||
|
@ -307,7 +309,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
*
|
*
|
||||||
* Timer functionality is provided by a timer service/daemon task. Many of the
|
* Timer functionality is provided by a timer service/daemon task. Many of the
|
||||||
* public FreeRTOS timer API functions send commands to the timer service task
|
* public FreeRTOS timer API functions send commands to the timer service task
|
||||||
* though a queue called the timer command queue. The timer command queue is
|
* through a queue called the timer command queue. The timer command queue is
|
||||||
* private to the kernel itself and is not directly accessible to application
|
* private to the kernel itself and is not directly accessible to application
|
||||||
* code. The length of the timer command queue is set by the
|
* code. The length of the timer command queue is set by the
|
||||||
* configTIMER_QUEUE_LENGTH configuration constant.
|
* configTIMER_QUEUE_LENGTH configuration constant.
|
||||||
|
@ -359,7 +361,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
*
|
*
|
||||||
* Timer functionality is provided by a timer service/daemon task. Many of the
|
* Timer functionality is provided by a timer service/daemon task. Many of the
|
||||||
* public FreeRTOS timer API functions send commands to the timer service task
|
* public FreeRTOS timer API functions send commands to the timer service task
|
||||||
* though a queue called the timer command queue. The timer command queue is
|
* through a queue called the timer command queue. The timer command queue is
|
||||||
* private to the kernel itself and is not directly accessible to application
|
* private to the kernel itself and is not directly accessible to application
|
||||||
* code. The length of the timer command queue is set by the
|
* code. The length of the timer command queue is set by the
|
||||||
* configTIMER_QUEUE_LENGTH configuration constant.
|
* configTIMER_QUEUE_LENGTH configuration constant.
|
||||||
|
@ -403,7 +405,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
*
|
*
|
||||||
* Timer functionality is provided by a timer service/daemon task. Many of the
|
* Timer functionality is provided by a timer service/daemon task. Many of the
|
||||||
* public FreeRTOS timer API functions send commands to the timer service task
|
* public FreeRTOS timer API functions send commands to the timer service task
|
||||||
* though a queue called the timer command queue. The timer command queue is
|
* through a queue called the timer command queue. The timer command queue is
|
||||||
* private to the kernel itself and is not directly accessible to application
|
* private to the kernel itself and is not directly accessible to application
|
||||||
* code. The length of the timer command queue is set by the
|
* code. The length of the timer command queue is set by the
|
||||||
* configTIMER_QUEUE_LENGTH configuration constant.
|
* configTIMER_QUEUE_LENGTH configuration constant.
|
||||||
|
@ -481,7 +483,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
*
|
*
|
||||||
* Timer functionality is provided by a timer service/daemon task. Many of the
|
* Timer functionality is provided by a timer service/daemon task. Many of the
|
||||||
* public FreeRTOS timer API functions send commands to the timer service task
|
* public FreeRTOS timer API functions send commands to the timer service task
|
||||||
* though a queue called the timer command queue. The timer command queue is
|
* through a queue called the timer command queue. The timer command queue is
|
||||||
* private to the kernel itself and is not directly accessible to application
|
* private to the kernel itself and is not directly accessible to application
|
||||||
* code. The length of the timer command queue is set by the
|
* code. The length of the timer command queue is set by the
|
||||||
* configTIMER_QUEUE_LENGTH configuration constant.
|
* configTIMER_QUEUE_LENGTH configuration constant.
|
||||||
|
@ -519,7 +521,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
*
|
*
|
||||||
* Timer functionality is provided by a timer service/daemon task. Many of the
|
* Timer functionality is provided by a timer service/daemon task. Many of the
|
||||||
* public FreeRTOS timer API functions send commands to the timer service task
|
* public FreeRTOS timer API functions send commands to the timer service task
|
||||||
* though a queue called the timer command queue. The timer command queue is
|
* through a queue called the timer command queue. The timer command queue is
|
||||||
* private to the kernel itself and is not directly accessible to application
|
* private to the kernel itself and is not directly accessible to application
|
||||||
* code. The length of the timer command queue is set by the
|
* code. The length of the timer command queue is set by the
|
||||||
* configTIMER_QUEUE_LENGTH configuration constant.
|
* configTIMER_QUEUE_LENGTH configuration constant.
|
||||||
|
@ -716,7 +718,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
* if( xHigherPriorityTaskWoken != pdFALSE )
|
* if( xHigherPriorityTaskWoken != pdFALSE )
|
||||||
* {
|
* {
|
||||||
* // Call the interrupt safe yield function here (actual function
|
* // Call the interrupt safe yield function here (actual function
|
||||||
* // depends on the FreeRTOS port being used.
|
* // depends on the FreeRTOS port being used).
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
|
@ -779,7 +781,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
* if( xHigherPriorityTaskWoken != pdFALSE )
|
* if( xHigherPriorityTaskWoken != pdFALSE )
|
||||||
* {
|
* {
|
||||||
* // Call the interrupt safe yield function here (actual function
|
* // Call the interrupt safe yield function here (actual function
|
||||||
* // depends on the FreeRTOS port being used.
|
* // depends on the FreeRTOS port being used).
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
|
@ -852,7 +854,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
* if( xHigherPriorityTaskWoken != pdFALSE )
|
* if( xHigherPriorityTaskWoken != pdFALSE )
|
||||||
* {
|
* {
|
||||||
* // Call the interrupt safe yield function here (actual function
|
* // Call the interrupt safe yield function here (actual function
|
||||||
* // depends on the FreeRTOS port being used.
|
* // depends on the FreeRTOS port being used).
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
|
@ -938,7 +940,7 @@ xTaskHandle xTimerGetTimerDaemonTaskHandle( void );
|
||||||
* if( xHigherPriorityTaskWoken != pdFALSE )
|
* if( xHigherPriorityTaskWoken != pdFALSE )
|
||||||
* {
|
* {
|
||||||
* // Call the interrupt safe yield function here (actual function
|
* // Call the interrupt safe yield function here (actual function
|
||||||
* // depends on the FreeRTOS port being used.
|
* // depends on the FreeRTOS port being used).
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -101,13 +101,11 @@ void vListInitialiseItem( xListItem * const pxItem )
|
||||||
|
|
||||||
void vListInsertEnd( xList * const pxList, xListItem * const pxNewListItem )
|
void vListInsertEnd( xList * const pxList, xListItem * const pxNewListItem )
|
||||||
{
|
{
|
||||||
xListItem * pxIndex;
|
xListItem * const pxIndex = pxList->pxIndex;
|
||||||
|
|
||||||
/* 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
|
||||||
pvListGetOwnerOfNextEntry. */
|
listGET_OWNER_OF_NEXT_ENTRY(). */
|
||||||
pxIndex = pxList->pxIndex;
|
|
||||||
|
|
||||||
pxNewListItem->pxNext = pxIndex;
|
pxNewListItem->pxNext = pxIndex;
|
||||||
pxNewListItem->pxPrevious = pxIndex->pxPrevious;
|
pxNewListItem->pxPrevious = pxIndex->pxPrevious;
|
||||||
pxIndex->pxPrevious->pxNext = pxNewListItem;
|
pxIndex->pxPrevious->pxNext = pxNewListItem;
|
||||||
|
@ -123,14 +121,13 @@ xListItem * pxIndex;
|
||||||
void vListInsert( xList * const pxList, xListItem * const pxNewListItem )
|
void vListInsert( xList * const pxList, xListItem * const pxNewListItem )
|
||||||
{
|
{
|
||||||
xListItem *pxIterator;
|
xListItem *pxIterator;
|
||||||
portTickType xValueOfInsertion;
|
const portTickType xValueOfInsertion = pxNewListItem->xItemValue;
|
||||||
|
|
||||||
/* Insert the new list item into the list, sorted in ulListItem order. */
|
/* Insert the new list item into the list, sorted in xItemValue order.
|
||||||
xValueOfInsertion = pxNewListItem->xItemValue;
|
|
||||||
|
|
||||||
/* If the list already contains a list item with the same item value then
|
If the list already contains a list item with the same item value then
|
||||||
the new list item should be placed after it. This ensures that TCB's which
|
the new list item should be placed after it. This ensures that TCB's which
|
||||||
are stored in ready lists (all of which have the same ulListItem value)
|
are stored in ready lists (all of which have the same xItemValue value)
|
||||||
get an equal share of the CPU. However, if the xItemValue is the same as
|
get an equal share of the CPU. However, if the xItemValue is the same as
|
||||||
the back marker the iteration loop below will not end. This means we need
|
the back marker the iteration loop below will not end. This means we need
|
||||||
to guard against this by checking the value first and modifying the
|
to guard against this by checking the value first and modifying the
|
||||||
|
@ -180,15 +177,13 @@ portTickType xValueOfInsertion;
|
||||||
|
|
||||||
unsigned portBASE_TYPE uxListRemove( xListItem * const pxItemToRemove )
|
unsigned portBASE_TYPE uxListRemove( xListItem * const pxItemToRemove )
|
||||||
{
|
{
|
||||||
xList * pxList;
|
/* The list item knows which list it is in. Obtain the list from the list
|
||||||
|
item. */
|
||||||
|
xList * const pxList = ( xList * ) pxItemToRemove->pvContainer;
|
||||||
|
|
||||||
pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
|
pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
|
||||||
pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
|
pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
|
||||||
|
|
||||||
/* The list item knows which list it is in. Obtain the list from the list
|
|
||||||
item. */
|
|
||||||
pxList = ( xList * ) pxItemToRemove->pvContainer;
|
|
||||||
|
|
||||||
/* 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 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -258,8 +258,9 @@ portBASE_TYPE xPortStartScheduler(void)
|
||||||
*/
|
*/
|
||||||
void vPortEndScheduler(void)
|
void vPortEndScheduler(void)
|
||||||
{
|
{
|
||||||
/* It is unlikely that the port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( ulCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -185,7 +185,7 @@ void vPortStartFirstTask( void )
|
||||||
" pop {pc} \n" /* Finally, pop the PC to jump to the user defined task code. */
|
" pop {pc} \n" /* Finally, pop the PC to jump to the user defined task code. */
|
||||||
" \n"
|
" \n"
|
||||||
" .align 2 \n"
|
" .align 2 \n"
|
||||||
"pxCurrentTCBConst2: .word pxCurrentTCB "
|
"pxCurrentTCBConst2: .word pxCurrentTCB "
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -208,7 +208,7 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
/* Start the first task. */
|
/* Start the first task. */
|
||||||
vPortStartFirstTask();
|
vPortStartFirstTask();
|
||||||
|
|
||||||
/* Should never get here as the tasks will now be executing! Call the task
|
/* Should never get here as the tasks will now be executing! Call the task
|
||||||
exit error function to prevent compiler warnings about a static function
|
exit error function to prevent compiler warnings about a static function
|
||||||
not being called in the case that the application writer overrides this
|
not being called in the case that the application writer overrides this
|
||||||
|
@ -222,8 +222,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM0 port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -250,6 +251,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -370,8 +370,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM3 port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -390,6 +391,7 @@ void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
portBASE_TYPE xRunningPrivileged = prvRaisePrivilege();
|
portBASE_TYPE xRunningPrivileged = prvRaisePrivilege();
|
||||||
|
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* ------------------------ Architecture specifics ------------------------ */
|
/* ------------------------ Architecture specifics ------------------------ */
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -80,8 +80,8 @@
|
||||||
#include <xil_exception.h>
|
#include <xil_exception.h>
|
||||||
#include <microblaze_exceptions_g.h>
|
#include <microblaze_exceptions_g.h>
|
||||||
|
|
||||||
/* Tasks are started with a critical section nesting of 0 - however, prior to
|
/* Tasks are started with a critical section nesting of 0 - however, prior to
|
||||||
the scheduler being commenced interrupts should not be enabled, so the critical
|
the scheduler being commenced interrupts should not be enabled, so the critical
|
||||||
nesting variable is initialised to a non-zero value. */
|
nesting variable is initialised to a non-zero value. */
|
||||||
#define portINITIAL_NESTING_VALUE ( 0xff )
|
#define portINITIAL_NESTING_VALUE ( 0xff )
|
||||||
|
|
||||||
|
@ -100,14 +100,14 @@ created. */
|
||||||
*/
|
*/
|
||||||
static long prvInitialiseInterruptController( void );
|
static long prvInitialiseInterruptController( void );
|
||||||
|
|
||||||
/* Ensure the interrupt controller instance variable is initialised before it is
|
/* Ensure the interrupt controller instance variable is initialised before it is
|
||||||
* used, and that the initialisation only happens once.
|
* used, and that the initialisation only happens once.
|
||||||
*/
|
*/
|
||||||
static long prvEnsureInterruptControllerIsInitialised( void );
|
static long prvEnsureInterruptControllerIsInitialised( void );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* Counts the nesting depth of calls to portENTER_CRITICAL(). Each task
|
/* Counts the nesting depth of calls to portENTER_CRITICAL(). Each task
|
||||||
maintains its own count, so this variable is saved as part of the task
|
maintains its own count, so this variable is saved as part of the task
|
||||||
context. */
|
context. */
|
||||||
volatile unsigned portBASE_TYPE uxCriticalNesting = portINITIAL_NESTING_VALUE;
|
volatile unsigned portBASE_TYPE uxCriticalNesting = portINITIAL_NESTING_VALUE;
|
||||||
|
@ -121,8 +121,8 @@ unsigned long *pulISRStack;
|
||||||
get set to 1. ulTaskSwitchRequested is inspected just before the main interrupt
|
get set to 1. ulTaskSwitchRequested is inspected just before the main interrupt
|
||||||
handler exits. If, at that time, ulTaskSwitchRequested is set to 1, the kernel
|
handler exits. If, at that time, ulTaskSwitchRequested is set to 1, the kernel
|
||||||
will call vTaskSwitchContext() to ensure the task that runs immediately after
|
will call vTaskSwitchContext() to ensure the task that runs immediately after
|
||||||
the interrupt exists is the highest priority task that is able to run. This is
|
the interrupt exists is the highest priority task that is able to run. This is
|
||||||
an unusual mechanism, but is used for this port because a single interrupt can
|
an unusual mechanism, but is used for this port because a single interrupt can
|
||||||
cause the servicing of multiple peripherals - and it is inefficient to call
|
cause the servicing of multiple peripherals - and it is inefficient to call
|
||||||
vTaskSwitchContext() multiple times as each peripheral is serviced. */
|
vTaskSwitchContext() multiple times as each peripheral is serviced. */
|
||||||
volatile unsigned long ulTaskSwitchRequested = 0UL;
|
volatile unsigned long ulTaskSwitchRequested = 0UL;
|
||||||
|
@ -133,10 +133,10 @@ static XIntc xInterruptControllerInstance;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialise the stack of a task to look exactly as if a call to
|
* Initialise the stack of a task to look exactly as if a call to
|
||||||
* portSAVE_CONTEXT had been made.
|
* portSAVE_CONTEXT had been made.
|
||||||
*
|
*
|
||||||
* See the portable.h header file.
|
* See the portable.h header file.
|
||||||
*/
|
*/
|
||||||
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
||||||
|
@ -145,7 +145,7 @@ extern void *_SDA2_BASE_, *_SDA_BASE_;
|
||||||
const unsigned long ulR2 = ( unsigned long ) &_SDA2_BASE_;
|
const unsigned long ulR2 = ( unsigned long ) &_SDA2_BASE_;
|
||||||
const unsigned long ulR13 = ( unsigned long ) &_SDA_BASE_;
|
const unsigned long ulR13 = ( unsigned long ) &_SDA_BASE_;
|
||||||
|
|
||||||
/* Place a few bytes of known values on the bottom of the stack.
|
/* Place a few bytes of known values on the bottom of the stack.
|
||||||
This is essential for the Microblaze port and these lines must
|
This is essential for the Microblaze port and these lines must
|
||||||
not be omitted. */
|
not be omitted. */
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) 0x00000000;
|
*pxTopOfStack = ( portSTACK_TYPE ) 0x00000000;
|
||||||
|
@ -170,7 +170,7 @@ const unsigned long ulR13 = ( unsigned long ) &_SDA_BASE_;
|
||||||
/* First stack an initial value for the critical section nesting. This
|
/* First stack an initial value for the critical section nesting. This
|
||||||
is initialised to zero. */
|
is initialised to zero. */
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) 0x00;
|
*pxTopOfStack = ( portSTACK_TYPE ) 0x00;
|
||||||
|
|
||||||
/* R0 is always zero. */
|
/* R0 is always zero. */
|
||||||
/* R1 is the SP. */
|
/* R1 is the SP. */
|
||||||
|
|
||||||
|
@ -203,13 +203,13 @@ const unsigned long ulR13 = ( unsigned long ) &_SDA_BASE_;
|
||||||
#else
|
#else
|
||||||
pxTopOfStack-= 8;
|
pxTopOfStack-= 8;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) ulR13; /* R13 - read/write small data area. */
|
*pxTopOfStack = ( portSTACK_TYPE ) ulR13; /* R13 - read/write small data area. */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) pxCode; /* R14 - return address for interrupt. */
|
*pxTopOfStack = ( portSTACK_TYPE ) pxCode; /* R14 - return address for interrupt. */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) NULL; /* R15 - return address for subroutine. */
|
*pxTopOfStack = ( portSTACK_TYPE ) NULL; /* R15 - return address for subroutine. */
|
||||||
|
|
||||||
#ifdef portPRE_LOAD_STACK_FOR_DEBUGGING
|
#ifdef portPRE_LOAD_STACK_FOR_DEBUGGING
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) 0x10; /* R16 - return address for trap (debugger). */
|
*pxTopOfStack = ( portSTACK_TYPE ) 0x10; /* R16 - return address for trap (debugger). */
|
||||||
|
@ -221,10 +221,10 @@ const unsigned long ulR13 = ( unsigned long ) &_SDA_BASE_;
|
||||||
#else
|
#else
|
||||||
pxTopOfStack -= 4;
|
pxTopOfStack -= 4;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) 0x00; /* R19 - must be saved across function calls. Callee-save. Seems to be interpreted as the frame pointer. */
|
*pxTopOfStack = ( portSTACK_TYPE ) 0x00; /* R19 - must be saved across function calls. Callee-save. Seems to be interpreted as the frame pointer. */
|
||||||
|
|
||||||
#ifdef portPRE_LOAD_STACK_FOR_DEBUGGING
|
#ifdef portPRE_LOAD_STACK_FOR_DEBUGGING
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) 0x14; /* R20 - reserved for storing a pointer to the Global Offset Table (GOT) in Position Independent Code (PIC). Non-volatile in non-PIC code. Must be saved across function calls. Callee-save. Not used by FreeRTOS. */
|
*pxTopOfStack = ( portSTACK_TYPE ) 0x14; /* R20 - reserved for storing a pointer to the Global Offset Table (GOT) in Position Independent Code (PIC). Non-volatile in non-PIC code. Must be saved across function calls. Callee-save. Not used by FreeRTOS. */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
|
@ -254,7 +254,7 @@ const unsigned long ulR13 = ( unsigned long ) &_SDA_BASE_;
|
||||||
pxTopOfStack -= 13;
|
pxTopOfStack -= 13;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Return a pointer to the top of the stack that has been generated so this
|
/* Return a pointer to the top of the stack that has been generated so this
|
||||||
can be stored in the task control block for the task. */
|
can be stored in the task control block for the task. */
|
||||||
return pxTopOfStack;
|
return pxTopOfStack;
|
||||||
}
|
}
|
||||||
|
@ -266,11 +266,11 @@ extern void ( vPortStartFirstTask )( void );
|
||||||
extern unsigned long _stack[];
|
extern unsigned long _stack[];
|
||||||
|
|
||||||
/* Setup the hardware to generate the tick. Interrupts are disabled when
|
/* Setup the hardware to generate the tick. Interrupts are disabled when
|
||||||
this function is called.
|
this function is called.
|
||||||
|
|
||||||
This port uses an application defined callback function to install the tick
|
This port uses an application defined callback function to install the tick
|
||||||
interrupt handler because the kernel will run on lots of different
|
interrupt handler because the kernel will run on lots of different
|
||||||
MicroBlaze and FPGA configurations - not all of which will have the same
|
MicroBlaze and FPGA configurations - not all of which will have the same
|
||||||
timer peripherals defined or available. An example definition of
|
timer peripherals defined or available. An example definition of
|
||||||
vApplicationSetupTimerInterrupt() is provided in the official demo
|
vApplicationSetupTimerInterrupt() is provided in the official demo
|
||||||
application that accompanies this port. */
|
application that accompanies this port. */
|
||||||
|
@ -294,12 +294,14 @@ extern unsigned long _stack[];
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Manual context switch called by portYIELD or taskYIELD.
|
* Manual context switch called by portYIELD or taskYIELD.
|
||||||
*/
|
*/
|
||||||
void vPortYield( void )
|
void vPortYield( void )
|
||||||
{
|
{
|
||||||
|
@ -331,7 +333,7 @@ long lReturn;
|
||||||
{
|
{
|
||||||
XIntc_Enable( &xInterruptControllerInstance, ucInterruptID );
|
XIntc_Enable( &xInterruptControllerInstance, ucInterruptID );
|
||||||
}
|
}
|
||||||
|
|
||||||
configASSERT( lReturn );
|
configASSERT( lReturn );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -344,12 +346,12 @@ long lReturn;
|
||||||
controller because the interrupt controller instance variable is private
|
controller because the interrupt controller instance variable is private
|
||||||
to this file. */
|
to this file. */
|
||||||
lReturn = prvEnsureInterruptControllerIsInitialised();
|
lReturn = prvEnsureInterruptControllerIsInitialised();
|
||||||
|
|
||||||
if( lReturn == pdPASS )
|
if( lReturn == pdPASS )
|
||||||
{
|
{
|
||||||
XIntc_Disable( &xInterruptControllerInstance, ucInterruptID );
|
XIntc_Disable( &xInterruptControllerInstance, ucInterruptID );
|
||||||
}
|
}
|
||||||
|
|
||||||
configASSERT( lReturn );
|
configASSERT( lReturn );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -358,11 +360,11 @@ portBASE_TYPE xPortInstallInterruptHandler( unsigned char ucInterruptID, XInterr
|
||||||
{
|
{
|
||||||
long lReturn;
|
long lReturn;
|
||||||
|
|
||||||
/* An API function is provided to install an interrupt handler because the
|
/* An API function is provided to install an interrupt handler because the
|
||||||
interrupt controller instance variable is private to this file. */
|
interrupt controller instance variable is private to this file. */
|
||||||
|
|
||||||
lReturn = prvEnsureInterruptControllerIsInitialised();
|
lReturn = prvEnsureInterruptControllerIsInitialised();
|
||||||
|
|
||||||
if( lReturn == pdPASS )
|
if( lReturn == pdPASS )
|
||||||
{
|
{
|
||||||
lReturn = XIntc_Connect( &xInterruptControllerInstance, ucInterruptID, pxHandler, pvCallBackRef );
|
lReturn = XIntc_Connect( &xInterruptControllerInstance, ucInterruptID, pxHandler, pvCallBackRef );
|
||||||
|
@ -372,7 +374,7 @@ long lReturn;
|
||||||
{
|
{
|
||||||
lReturn = pdPASS;
|
lReturn = pdPASS;
|
||||||
}
|
}
|
||||||
|
|
||||||
configASSERT( lReturn == pdPASS );
|
configASSERT( lReturn == pdPASS );
|
||||||
|
|
||||||
return lReturn;
|
return lReturn;
|
||||||
|
@ -389,7 +391,7 @@ long lReturn;
|
||||||
if( lInterruptControllerInitialised != pdTRUE )
|
if( lInterruptControllerInitialised != pdTRUE )
|
||||||
{
|
{
|
||||||
lReturn = prvInitialiseInterruptController();
|
lReturn = prvInitialiseInterruptController();
|
||||||
|
|
||||||
if( lReturn == pdPASS )
|
if( lReturn == pdPASS )
|
||||||
{
|
{
|
||||||
lInterruptControllerInitialised = pdTRUE;
|
lInterruptControllerInitialised = pdTRUE;
|
||||||
|
@ -404,7 +406,7 @@ long lReturn;
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handler for the timer interrupt. This is the handler that the application
|
* Handler for the timer interrupt. This is the handler that the application
|
||||||
* defined callback function vApplicationSetupTimerInterrupt() should install.
|
* defined callback function vApplicationSetupTimerInterrupt() should install.
|
||||||
*/
|
*/
|
||||||
|
@ -416,11 +418,11 @@ extern void vApplicationClearTimerInterrupt( void );
|
||||||
( void ) pvUnused;
|
( void ) pvUnused;
|
||||||
|
|
||||||
/* This port uses an application defined callback function to clear the tick
|
/* This port uses an application defined callback function to clear the tick
|
||||||
interrupt because the kernel will run on lots of different MicroBlaze and
|
interrupt because the kernel will run on lots of different MicroBlaze and
|
||||||
FPGA configurations - not all of which will have the same timer peripherals
|
FPGA configurations - not all of which will have the same timer peripherals
|
||||||
defined or available. An example definition of
|
defined or available. An example definition of
|
||||||
vApplicationClearTimerInterrupt() is provided in the official demo
|
vApplicationClearTimerInterrupt() is provided in the official demo
|
||||||
application that accompanies this port. */
|
application that accompanies this port. */
|
||||||
vApplicationClearTimerInterrupt();
|
vApplicationClearTimerInterrupt();
|
||||||
|
|
||||||
/* Increment the RTOS tick - this might cause a task to unblock. */
|
/* Increment the RTOS tick - this might cause a task to unblock. */
|
||||||
|
|
|
@ -98,7 +98,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -299,7 +299,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -79,15 +79,15 @@
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* Tasks should start with interrupts enabled and in Supervisor mode, therefore
|
/* Tasks should start with interrupts enabled and in Supervisor mode, therefore
|
||||||
PSW is set with U and I set, and PM and IPL clear. */
|
PSW is set with U and I set, and PM and IPL clear. */
|
||||||
#define portINITIAL_PSW ( ( portSTACK_TYPE ) 0x00030000 )
|
#define portINITIAL_PSW ( ( portSTACK_TYPE ) 0x00030000 )
|
||||||
#define portINITIAL_FPSW ( ( portSTACK_TYPE ) 0x00000100 )
|
#define portINITIAL_FPSW ( ( portSTACK_TYPE ) 0x00000100 )
|
||||||
|
|
||||||
/* These macros allow a critical section to be added around the call to
|
/* These macros allow a critical section to be added around the call to
|
||||||
xTaskIncrementTick(), which is only ever called from interrupts at the kernel
|
xTaskIncrementTick(), which is only ever called from interrupts at the kernel
|
||||||
priority - ie a known priority. Therefore these local macros are a slight
|
priority - ie a known priority. Therefore these local macros are a slight
|
||||||
optimisation compared to calling the global SET/CLEAR_INTERRUPT_MASK macros,
|
optimisation compared to calling the global SET/CLEAR_INTERRUPT_MASK macros,
|
||||||
which would require the old IPL to be read first and stored in a local variable. */
|
which would require the old IPL to be read first and stored in a local variable. */
|
||||||
#define portDISABLE_INTERRUPTS_FROM_KERNEL_ISR() __asm volatile ( "MVTIPL %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )
|
#define portDISABLE_INTERRUPTS_FROM_KERNEL_ISR() __asm volatile ( "MVTIPL %0" ::"i"(configMAX_SYSCALL_INTERRUPT_PRIORITY) )
|
||||||
#define portENABLE_INTERRUPTS_FROM_KERNEL_ISR() __asm volatile ( "MVTIPL %0" ::"i"(configKERNEL_INTERRUPT_PRIORITY) )
|
#define portENABLE_INTERRUPTS_FROM_KERNEL_ISR() __asm volatile ( "MVTIPL %0" ::"i"(configKERNEL_INTERRUPT_PRIORITY) )
|
||||||
|
@ -96,7 +96,7 @@ which would require the old IPL to be read first and stored in a local variable.
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function to start the first task executing - written in asm code as direct
|
* Function to start the first task executing - written in asm code as direct
|
||||||
* access to registers is required.
|
* access to registers is required.
|
||||||
*/
|
*/
|
||||||
static void prvStartFirstTask( void ) __attribute__((naked));
|
static void prvStartFirstTask( void ) __attribute__((naked));
|
||||||
|
|
||||||
|
@ -118,19 +118,19 @@ extern void *pxCurrentTCB;
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See header file for description.
|
* See header file for description.
|
||||||
*/
|
*/
|
||||||
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
||||||
{
|
{
|
||||||
/* R0 is not included as it is the stack pointer. */
|
/* R0 is not included as it is the stack pointer. */
|
||||||
|
|
||||||
*pxTopOfStack = 0x00;
|
*pxTopOfStack = 0x00;
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = portINITIAL_PSW;
|
*pxTopOfStack = portINITIAL_PSW;
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) pxCode;
|
*pxTopOfStack = ( portSTACK_TYPE ) pxCode;
|
||||||
|
|
||||||
/* When debugging it can be useful if every register is set to a known
|
/* When debugging it can be useful if every register is set to a known
|
||||||
value. Otherwise code space can be saved by just setting the registers
|
value. Otherwise code space can be saved by just setting the registers
|
||||||
that need to be set. */
|
that need to be set. */
|
||||||
|
@ -171,9 +171,9 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
|
||||||
pxTopOfStack -= 15;
|
pxTopOfStack -= 15;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R1 */
|
*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R1 */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = portINITIAL_FPSW;
|
*pxTopOfStack = portINITIAL_FPSW;
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = 0x12345678; /* Accumulator. */
|
*pxTopOfStack = 0x12345678; /* Accumulator. */
|
||||||
|
@ -192,16 +192,16 @@ extern void vApplicationSetupTimerInterrupt( void );
|
||||||
if( pxCurrentTCB != NULL )
|
if( pxCurrentTCB != NULL )
|
||||||
{
|
{
|
||||||
/* Call an application function to set up the timer that will generate the
|
/* Call an application function to set up the timer that will generate the
|
||||||
tick interrupt. This way the application can decide which peripheral to
|
tick interrupt. This way the application can decide which peripheral to
|
||||||
use. A demo application is provided to show a suitable example. */
|
use. A demo application is provided to show a suitable example. */
|
||||||
vApplicationSetupTimerInterrupt();
|
vApplicationSetupTimerInterrupt();
|
||||||
|
|
||||||
/* Enable the software interrupt. */
|
/* Enable the software interrupt. */
|
||||||
_IEN( _ICU_SWINT ) = 1;
|
_IEN( _ICU_SWINT ) = 1;
|
||||||
|
|
||||||
/* Ensure the software interrupt is clear. */
|
/* Ensure the software interrupt is clear. */
|
||||||
_IR( _ICU_SWINT ) = 0;
|
_IR( _ICU_SWINT ) = 0;
|
||||||
|
|
||||||
/* Ensure the software interrupt is set to the kernel priority. */
|
/* Ensure the software interrupt is set to the kernel priority. */
|
||||||
_IPR( _ICU_SWINT ) = configKERNEL_INTERRUPT_PRIORITY;
|
_IPR( _ICU_SWINT ) = configKERNEL_INTERRUPT_PRIORITY;
|
||||||
|
|
||||||
|
@ -216,43 +216,45 @@ extern void vApplicationSetupTimerInterrupt( void );
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
static void prvStartFirstTask( void )
|
static void prvStartFirstTask( void )
|
||||||
{
|
{
|
||||||
__asm volatile
|
__asm volatile
|
||||||
(
|
(
|
||||||
/* When starting the scheduler there is nothing that needs moving to the
|
/* When starting the scheduler there is nothing that needs moving to the
|
||||||
interrupt stack because the function is not called from an interrupt.
|
interrupt stack because the function is not called from an interrupt.
|
||||||
Just ensure the current stack is the user stack. */
|
Just ensure the current stack is the user stack. */
|
||||||
"SETPSW U \n" \
|
"SETPSW U \n" \
|
||||||
|
|
||||||
/* Obtain the location of the stack associated with which ever task
|
/* Obtain the location of the stack associated with which ever task
|
||||||
pxCurrentTCB is currently pointing to. */
|
pxCurrentTCB is currently pointing to. */
|
||||||
"MOV.L #_pxCurrentTCB, R15 \n" \
|
"MOV.L #_pxCurrentTCB, R15 \n" \
|
||||||
"MOV.L [R15], R15 \n" \
|
"MOV.L [R15], R15 \n" \
|
||||||
"MOV.L [R15], R0 \n" \
|
"MOV.L [R15], R0 \n" \
|
||||||
|
|
||||||
/* Restore the registers from the stack of the task pointed to by
|
/* Restore the registers from the stack of the task pointed to by
|
||||||
pxCurrentTCB. */
|
pxCurrentTCB. */
|
||||||
"POP R15 \n" \
|
"POP R15 \n" \
|
||||||
|
|
||||||
/* Accumulator low 32 bits. */
|
/* Accumulator low 32 bits. */
|
||||||
"MVTACLO R15 \n" \
|
"MVTACLO R15 \n" \
|
||||||
"POP R15 \n" \
|
"POP R15 \n" \
|
||||||
|
|
||||||
/* Accumulator high 32 bits. */
|
/* Accumulator high 32 bits. */
|
||||||
"MVTACHI R15 \n" \
|
"MVTACHI R15 \n" \
|
||||||
"POP R15 \n" \
|
"POP R15 \n" \
|
||||||
|
|
||||||
/* Floating point status word. */
|
/* Floating point status word. */
|
||||||
"MVTC R15, FPSW \n" \
|
"MVTC R15, FPSW \n" \
|
||||||
|
|
||||||
/* R1 to R15 - R0 is not included as it is the SP. */
|
/* R1 to R15 - R0 is not included as it is the SP. */
|
||||||
"POPM R1-R15 \n" \
|
"POPM R1-R15 \n" \
|
||||||
|
|
||||||
/* This pops the remaining registers. */
|
/* This pops the remaining registers. */
|
||||||
"RTE \n" \
|
"RTE \n" \
|
||||||
"NOP \n" \
|
"NOP \n" \
|
||||||
|
@ -269,18 +271,18 @@ void vSoftwareInterruptISR( void )
|
||||||
"SETPSW I \n" \
|
"SETPSW I \n" \
|
||||||
|
|
||||||
/* Move the data that was automatically pushed onto the interrupt stack when
|
/* Move the data that was automatically pushed onto the interrupt stack when
|
||||||
the interrupt occurred from the interrupt stack to the user stack.
|
the interrupt occurred from the interrupt stack to the user stack.
|
||||||
|
|
||||||
R15 is saved before it is clobbered. */
|
R15 is saved before it is clobbered. */
|
||||||
"PUSH.L R15 \n" \
|
"PUSH.L R15 \n" \
|
||||||
|
|
||||||
/* Read the user stack pointer. */
|
/* Read the user stack pointer. */
|
||||||
"MVFC USP, R15 \n" \
|
"MVFC USP, R15 \n" \
|
||||||
|
|
||||||
/* Move the address down to the data being moved. */
|
/* Move the address down to the data being moved. */
|
||||||
"SUB #12, R15 \n" \
|
"SUB #12, R15 \n" \
|
||||||
"MVTC R15, USP \n" \
|
"MVTC R15, USP \n" \
|
||||||
|
|
||||||
/* Copy the data across, R15, then PC, then PSW. */
|
/* Copy the data across, R15, then PC, then PSW. */
|
||||||
"MOV.L [ R0 ], [ R15 ] \n" \
|
"MOV.L [ R0 ], [ R15 ] \n" \
|
||||||
"MOV.L 4[ R0 ], 4[ R15 ] \n" \
|
"MOV.L 4[ R0 ], 4[ R15 ] \n" \
|
||||||
|
@ -288,22 +290,22 @@ void vSoftwareInterruptISR( void )
|
||||||
|
|
||||||
/* Move the interrupt stack pointer to its new correct position. */
|
/* Move the interrupt stack pointer to its new correct position. */
|
||||||
"ADD #12, R0 \n" \
|
"ADD #12, R0 \n" \
|
||||||
|
|
||||||
/* All the rest of the registers are saved directly to the user stack. */
|
/* All the rest of the registers are saved directly to the user stack. */
|
||||||
"SETPSW U \n" \
|
"SETPSW U \n" \
|
||||||
|
|
||||||
/* Save the rest of the general registers (R15 has been saved already). */
|
/* Save the rest of the general registers (R15 has been saved already). */
|
||||||
"PUSHM R1-R14 \n" \
|
"PUSHM R1-R14 \n" \
|
||||||
|
|
||||||
/* Save the FPSW and accumulator. */
|
/* Save the FPSW and accumulator. */
|
||||||
"MVFC FPSW, R15 \n" \
|
"MVFC FPSW, R15 \n" \
|
||||||
"PUSH.L R15 \n" \
|
"PUSH.L R15 \n" \
|
||||||
"MVFACHI R15 \n" \
|
"MVFACHI R15 \n" \
|
||||||
"PUSH.L R15 \n" \
|
"PUSH.L R15 \n" \
|
||||||
|
|
||||||
/* Middle word. */
|
/* Middle word. */
|
||||||
"MVFACMI R15 \n" \
|
"MVFACMI R15 \n" \
|
||||||
|
|
||||||
/* Shifted left as it is restored to the low order word. */
|
/* Shifted left as it is restored to the low order word. */
|
||||||
"SHLL #16, R15 \n" \
|
"SHLL #16, R15 \n" \
|
||||||
"PUSH.L R15 \n" \
|
"PUSH.L R15 \n" \
|
||||||
|
@ -312,7 +314,7 @@ void vSoftwareInterruptISR( void )
|
||||||
"MOV.L #_pxCurrentTCB, R15 \n" \
|
"MOV.L #_pxCurrentTCB, R15 \n" \
|
||||||
"MOV.L [ R15 ], R15 \n" \
|
"MOV.L [ R15 ], R15 \n" \
|
||||||
"MOV.L R0, [ R15 ] \n" \
|
"MOV.L R0, [ R15 ] \n" \
|
||||||
|
|
||||||
/* Ensure the interrupt mask is set to the syscall priority while the kernel
|
/* Ensure the interrupt mask is set to the syscall priority while the kernel
|
||||||
structures are being accessed. */
|
structures are being accessed. */
|
||||||
"MVTIPL %0 \n" \
|
"MVTIPL %0 \n" \
|
||||||
|
@ -350,7 +352,7 @@ void vTickISR( void )
|
||||||
{
|
{
|
||||||
/* Re-enabled interrupts. */
|
/* Re-enabled interrupts. */
|
||||||
__asm volatile( "SETPSW I" );
|
__asm volatile( "SETPSW I" );
|
||||||
|
|
||||||
/* Increment the tick, and perform any processing the new tick value
|
/* Increment the tick, and perform any processing the new tick value
|
||||||
necessitates. Ensure IPL is at the max syscall value first. */
|
necessitates. Ensure IPL is at the max syscall value first. */
|
||||||
portDISABLE_INTERRUPTS_FROM_KERNEL_ISR();
|
portDISABLE_INTERRUPTS_FROM_KERNEL_ISR();
|
||||||
|
@ -367,12 +369,12 @@ void vTickISR( void )
|
||||||
unsigned long ulPortGetIPL( void )
|
unsigned long ulPortGetIPL( void )
|
||||||
{
|
{
|
||||||
__asm volatile
|
__asm volatile
|
||||||
(
|
(
|
||||||
"MVFC PSW, R1 \n" \
|
"MVFC PSW, R1 \n" \
|
||||||
"SHLR #24, R1 \n" \
|
"SHLR #24, R1 \n" \
|
||||||
"RTS "
|
"RTS "
|
||||||
);
|
);
|
||||||
|
|
||||||
/* This will never get executed, but keeps the compiler from complaining. */
|
/* This will never get executed, but keeps the compiler from complaining. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -381,7 +383,7 @@ unsigned long ulPortGetIPL( void )
|
||||||
void vPortSetIPL( unsigned long ulNewIPL )
|
void vPortSetIPL( unsigned long ulNewIPL )
|
||||||
{
|
{
|
||||||
__asm volatile
|
__asm volatile
|
||||||
(
|
(
|
||||||
"PUSH R5 \n" \
|
"PUSH R5 \n" \
|
||||||
"MVFC PSW, R5 \n" \
|
"MVFC PSW, R5 \n" \
|
||||||
"SHLL #24, R1 \n" \
|
"SHLL #24, R1 \n" \
|
||||||
|
|
|
@ -96,7 +96,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned long portTickType;
|
typedef unsigned long portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -297,8 +297,9 @@ unsigned long ulAPSR;
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the ARM port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( ulCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@
|
||||||
#define portSTACK_TYPE unsigned long
|
#define portSTACK_TYPE unsigned long
|
||||||
#define portBASE_TYPE portLONG
|
#define portBASE_TYPE portLONG
|
||||||
typedef unsigned long portTickType;
|
typedef unsigned long portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -145,13 +145,13 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
|
||||||
Artificially force an assert() to be triggered if configASSERT() is
|
Artificially force an assert() to be triggered if configASSERT() is
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
for( ;; );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -182,8 +182,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM0 port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -210,6 +211,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -214,13 +214,13 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
|
||||||
Artificially force an assert() to be triggered if configASSERT() is
|
Artificially force an assert() to be triggered if configASSERT() is
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
for( ;; );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -295,8 +295,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM3 port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -323,6 +324,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
@ -390,10 +392,10 @@ void xPortSysTickHandler( void )
|
||||||
/* Restart from whatever is left in the count register to complete
|
/* Restart from whatever is left in the count register to complete
|
||||||
this tick period. */
|
this tick period. */
|
||||||
portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;
|
portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;
|
||||||
|
|
||||||
/* Restart SysTick. */
|
/* Restart SysTick. */
|
||||||
portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
|
portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
|
||||||
|
|
||||||
/* Reset the reload register to the value required for normal tick
|
/* Reset the reload register to the value required for normal tick
|
||||||
periods. */
|
periods. */
|
||||||
portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
|
portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
|
||||||
|
@ -442,23 +444,23 @@ void xPortSysTickHandler( void )
|
||||||
if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 )
|
if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 )
|
||||||
{
|
{
|
||||||
unsigned long ulCalculatedLoadValue;
|
unsigned long ulCalculatedLoadValue;
|
||||||
|
|
||||||
/* The tick interrupt has already executed, and the SysTick
|
/* The tick interrupt has already executed, and the SysTick
|
||||||
count reloaded with ulReloadValue. Reset the
|
count reloaded with ulReloadValue. Reset the
|
||||||
portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick
|
portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick
|
||||||
period. */
|
period. */
|
||||||
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG );
|
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG );
|
||||||
|
|
||||||
/* Don't allow a tiny value, or values that have somehow
|
/* Don't allow a tiny value, or values that have somehow
|
||||||
underflowed because the post sleep hook did something
|
underflowed because the post sleep hook did something
|
||||||
that took too long. */
|
that took too long. */
|
||||||
if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) )
|
if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) )
|
||||||
{
|
{
|
||||||
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL );
|
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL );
|
||||||
}
|
}
|
||||||
|
|
||||||
portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;
|
portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;
|
||||||
|
|
||||||
/* The tick interrupt handler will already have pended the tick
|
/* The tick interrupt handler will already have pended the tick
|
||||||
processing in the kernel. As the pending tick will be
|
processing in the kernel. As the pending tick will be
|
||||||
processed as soon as this function exits, the tick value
|
processed as soon as this function exits, the tick value
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -321,8 +321,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM4F port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -349,6 +350,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
@ -468,23 +470,23 @@ void xPortSysTickHandler( void )
|
||||||
if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 )
|
if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 )
|
||||||
{
|
{
|
||||||
unsigned long ulCalculatedLoadValue;
|
unsigned long ulCalculatedLoadValue;
|
||||||
|
|
||||||
/* The tick interrupt has already executed, and the SysTick
|
/* The tick interrupt has already executed, and the SysTick
|
||||||
count reloaded with ulReloadValue. Reset the
|
count reloaded with ulReloadValue. Reset the
|
||||||
portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick
|
portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick
|
||||||
period. */
|
period. */
|
||||||
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG );
|
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG );
|
||||||
|
|
||||||
/* Don't allow a tiny value, or values that have somehow
|
/* Don't allow a tiny value, or values that have somehow
|
||||||
underflowed because the post sleep hook did something
|
underflowed because the post sleep hook did something
|
||||||
that took too long. */
|
that took too long. */
|
||||||
if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) )
|
if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) )
|
||||||
{
|
{
|
||||||
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL );
|
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL );
|
||||||
}
|
}
|
||||||
|
|
||||||
portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;
|
portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;
|
||||||
|
|
||||||
/* The tick interrupt handler will already have pended the tick
|
/* The tick interrupt handler will already have pended the tick
|
||||||
processing in the kernel. As the pending tick will be
|
processing in the kernel. As the pending tick will be
|
||||||
processed as soon as this function exits, the tick value
|
processed as soon as this function exits, the tick value
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -120,7 +120,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -110,7 +110,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned long portTickType;
|
typedef unsigned long portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -317,7 +317,9 @@ __interrupt static void prvTickISR( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -221,7 +221,9 @@ __interrupt void vTickISR( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -300,9 +300,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the scheduler for the PIC port will get stopped
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
once running. If required disable the tick interrupt here, then return
|
Artificially force an assert. */
|
||||||
to xPortStartScheduler(). */
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -346,6 +346,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -270,10 +270,9 @@ const unsigned long ulCompareMatch = ( (configPERIPHERAL_CLOCK_HZ / portTIMER_PR
|
||||||
|
|
||||||
void vPortEndScheduler(void)
|
void vPortEndScheduler(void)
|
||||||
{
|
{
|
||||||
/* It is unlikely that the scheduler for the PIC port will get stopped
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
once running. If required disable the tick interrupt here, then return
|
Artificially force an assert. */
|
||||||
to xPortStartScheduler(). */
|
configASSERT( uxInterruptNesting == 1000UL );
|
||||||
for( ;; );
|
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned long portTickType;
|
typedef unsigned long portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -279,10 +279,9 @@ const unsigned long ulCompareMatch = ( (configPERIPHERAL_CLOCK_HZ / portTIMER_PR
|
||||||
|
|
||||||
void vPortEndScheduler(void)
|
void vPortEndScheduler(void)
|
||||||
{
|
{
|
||||||
/* It is unlikely that the scheduler for the PIC port will get stopped
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
once running. If required disable the tick interrupt here, then return
|
Artificially force an assert. */
|
||||||
to xPortStartScheduler(). */
|
configASSERT( uxInterruptNesting == 1000UL );
|
||||||
for( ;; );
|
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned long portTickType;
|
typedef unsigned long portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Hardware specifics. */
|
/* Hardware specifics. */
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ typedef void ( __interrupt __far *pxISR )();
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -316,9 +316,9 @@ unsigned long ulAPSR;
|
||||||
setting. See the comments in vPortValidateInterruptPriority() below for
|
setting. See the comments in vPortValidateInterruptPriority() below for
|
||||||
more information. */
|
more information. */
|
||||||
configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
|
configASSERT( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE );
|
||||||
|
|
||||||
if( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE )
|
if( ( portICCBPR_BINARY_POINT_REGISTER & portBINARY_POINT_BITS ) <= portMAX_BINARY_POINT_VALUE )
|
||||||
{
|
{
|
||||||
/* Start the timer that generates the tick ISR. */
|
/* Start the timer that generates the tick ISR. */
|
||||||
configSETUP_TICK_INTERRUPT();
|
configSETUP_TICK_INTERRUPT();
|
||||||
|
|
||||||
|
@ -336,8 +336,9 @@ unsigned long ulAPSR;
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the ARM port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( ulCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned long portTickType;
|
typedef unsigned long portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -142,20 +142,20 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
|
||||||
Artificially force an assert() to be triggered if configASSERT() is
|
Artificially force an assert() to be triggered if configASSERT() is
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
for( ;; );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vPortSVCHandler( void )
|
void vPortSVCHandler( void )
|
||||||
{
|
{
|
||||||
/* This function is no longer used, but retained for backward
|
/* This function is no longer used, but retained for backward
|
||||||
compatibility. */
|
compatibility. */
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -163,15 +163,15 @@ void vPortSVCHandler( void )
|
||||||
__asm void prvPortStartFirstTask( void )
|
__asm void prvPortStartFirstTask( void )
|
||||||
{
|
{
|
||||||
extern pxCurrentTCB;
|
extern pxCurrentTCB;
|
||||||
|
|
||||||
PRESERVE8
|
PRESERVE8
|
||||||
|
|
||||||
/* The MSP stack is not reset as, unlike on M3/4 parts, there is no vector
|
/* The MSP stack is not reset as, unlike on M3/4 parts, there is no vector
|
||||||
table offset register that can be used to locate the initial stack value.
|
table offset register that can be used to locate the initial stack value.
|
||||||
Not all M0 parts have the application vector table at address 0. */
|
Not all M0 parts have the application vector table at address 0. */
|
||||||
|
|
||||||
ldr r3, =pxCurrentTCB /* Obtain location of pxCurrentTCB. */
|
ldr r3, =pxCurrentTCB /* Obtain location of pxCurrentTCB. */
|
||||||
ldr r1, [r3]
|
ldr r1, [r3]
|
||||||
ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */
|
ldr r0, [r1] /* The first item in pxCurrentTCB is the task top of stack. */
|
||||||
adds r0, #32 /* Discard everything up to r0. */
|
adds r0, #32 /* Discard everything up to r0. */
|
||||||
msr psp, r0 /* This is now the new top of stack to use in the task. */
|
msr psp, r0 /* This is now the new top of stack to use in the task. */
|
||||||
|
@ -212,8 +212,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM0 port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -240,6 +241,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -186,7 +186,7 @@ static void prvTaskExitError( void );
|
||||||
#endif /* configUSE_TICKLESS_IDLE */
|
#endif /* configUSE_TICKLESS_IDLE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure
|
* Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure
|
||||||
* FreeRTOS API functions are not called from interrupts that have been assigned
|
* FreeRTOS API functions are not called from interrupts that have been assigned
|
||||||
* a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.
|
* a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.
|
||||||
*/
|
*/
|
||||||
|
@ -223,13 +223,13 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
|
||||||
static void prvTaskExitError( void )
|
static void prvTaskExitError( void )
|
||||||
{
|
{
|
||||||
/* A function that implements a task must not exit or attempt to return to
|
/* A function that implements a task must not exit or attempt to return to
|
||||||
its caller as there is nothing to return to. If a task wants to exit it
|
its caller as there is nothing to return to. If a task wants to exit it
|
||||||
should instead call vTaskDelete( NULL ).
|
should instead call vTaskDelete( NULL ).
|
||||||
|
|
||||||
Artificially force an assert() to be triggered if configASSERT() is
|
Artificially force an assert() to be triggered if configASSERT() is
|
||||||
defined, then stop here so application writers can catch the error. */
|
defined, then stop here so application writers can catch the error. */
|
||||||
configASSERT( uxCriticalNesting == ~0UL );
|
configASSERT( uxCriticalNesting == ~0UL );
|
||||||
portDISABLE_INTERRUPTS();
|
portDISABLE_INTERRUPTS();
|
||||||
for( ;; );
|
for( ;; );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -338,8 +338,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM3 port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -366,6 +367,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
@ -466,10 +468,10 @@ void xPortSysTickHandler( void )
|
||||||
/* Restart from whatever is left in the count register to complete
|
/* Restart from whatever is left in the count register to complete
|
||||||
this tick period. */
|
this tick period. */
|
||||||
portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;
|
portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;
|
||||||
|
|
||||||
/* Restart SysTick. */
|
/* Restart SysTick. */
|
||||||
portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
|
portNVIC_SYSTICK_CTRL_REG = portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT;
|
||||||
|
|
||||||
/* Reset the reload register to the value required for normal tick
|
/* Reset the reload register to the value required for normal tick
|
||||||
periods. */
|
periods. */
|
||||||
portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
|
portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;
|
||||||
|
@ -518,23 +520,23 @@ void xPortSysTickHandler( void )
|
||||||
if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 )
|
if( ( portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT ) != 0 )
|
||||||
{
|
{
|
||||||
unsigned long ulCalculatedLoadValue;
|
unsigned long ulCalculatedLoadValue;
|
||||||
|
|
||||||
/* The tick interrupt has already executed, and the SysTick
|
/* The tick interrupt has already executed, and the SysTick
|
||||||
count reloaded with ulReloadValue. Reset the
|
count reloaded with ulReloadValue. Reset the
|
||||||
portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick
|
portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick
|
||||||
period. */
|
period. */
|
||||||
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG );
|
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL ) - ( ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG );
|
||||||
|
|
||||||
/* Don't allow a tiny value, or values that have somehow
|
/* Don't allow a tiny value, or values that have somehow
|
||||||
underflowed because the post sleep hook did something
|
underflowed because the post sleep hook did something
|
||||||
that took too long. */
|
that took too long. */
|
||||||
if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) )
|
if( ( ulCalculatedLoadValue < ulStoppedTimerCompensation ) || ( ulCalculatedLoadValue > ulTimerCountsForOneTick ) )
|
||||||
{
|
{
|
||||||
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL );
|
ulCalculatedLoadValue = ( ulTimerCountsForOneTick - 1UL );
|
||||||
}
|
}
|
||||||
|
|
||||||
portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;
|
portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;
|
||||||
|
|
||||||
/* The tick interrupt handler will already have pended the tick
|
/* The tick interrupt handler will already have pended the tick
|
||||||
processing in the kernel. As the pending tick will be
|
processing in the kernel. As the pending tick will be
|
||||||
processed as soon as this function exits, the tick value
|
processed as soon as this function exits, the tick value
|
||||||
|
@ -627,7 +629,7 @@ __asm void vPortClearInterruptMask( unsigned long ulNewMask )
|
||||||
__asm unsigned long vPortGetIPSR( void )
|
__asm unsigned long vPortGetIPSR( void )
|
||||||
{
|
{
|
||||||
PRESERVE8
|
PRESERVE8
|
||||||
|
|
||||||
mrs r0, ipsr
|
mrs r0, ipsr
|
||||||
bx r14
|
bx r14
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -382,8 +382,9 @@ portBASE_TYPE xPortStartScheduler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* It is unlikely that the CM4F port will require this function as there
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
is nothing to return to. */
|
Artificially force an assert. */
|
||||||
|
configASSERT( uxCriticalNesting == 1000UL );
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -410,6 +411,7 @@ void vPortEnterCritical( void )
|
||||||
|
|
||||||
void vPortExitCritical( void )
|
void vPortExitCritical( void )
|
||||||
{
|
{
|
||||||
|
configASSERT( uxCriticalNesting );
|
||||||
uxCriticalNesting--;
|
uxCriticalNesting--;
|
||||||
if( uxCriticalNesting == 0 )
|
if( uxCriticalNesting == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern "C" {
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -444,7 +444,9 @@ static void prvYieldHandler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
|
|
||||||
/* The following line is just to prevent the symbol getting optimised away. */
|
/* The following line is just to prevent the symbol getting optimised away. */
|
||||||
( void ) vTaskSwitchContext();
|
( void ) vTaskSwitchContext();
|
||||||
|
|
|
@ -99,7 +99,7 @@ than portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/* Tasks should start with interrupts enabled and in Supervisor mode, therefore
|
/* Tasks should start with interrupts enabled and in Supervisor mode, therefore
|
||||||
PSW is set with U and I set, and PM and IPL clear. */
|
PSW is set with U and I set, and PM and IPL clear. */
|
||||||
#define portINITIAL_PSW ( ( portSTACK_TYPE ) 0x00030000 )
|
#define portINITIAL_PSW ( ( portSTACK_TYPE ) 0x00030000 )
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ const portBASE_TYPE * p_vSoftwareInterruptEntry = &vSoftwareInterruptEntry;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function to start the first task executing - written in asm code as direct
|
* Function to start the first task executing - written in asm code as direct
|
||||||
* access to registers is required.
|
* access to registers is required.
|
||||||
*/
|
*/
|
||||||
static void prvStartFirstTask( void );
|
static void prvStartFirstTask( void );
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ static void prvYieldHandler( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The entry point for the software interrupt handler. This is the function
|
* The entry point for the software interrupt handler. This is the function
|
||||||
* that calls the inline asm function prvYieldHandler(). It is installed in
|
* that calls the inline asm function prvYieldHandler(). It is installed in
|
||||||
* the vector table, but the code that installs it is in prvYieldHandler rather
|
* the vector table, but the code that installs it is in prvYieldHandler rather
|
||||||
* than using a #pragma.
|
* than using a #pragma.
|
||||||
*/
|
*/
|
||||||
|
@ -123,8 +123,8 @@ extern void vTaskSwitchContext( void );
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* See header file for description.
|
* See header file for description.
|
||||||
*/
|
*/
|
||||||
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
|
||||||
{
|
{
|
||||||
|
@ -180,9 +180,9 @@ portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE
|
||||||
pxTopOfStack -= 15;
|
pxTopOfStack -= 15;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R1 */
|
*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R1 */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = 0x12345678; /* Accumulator. */
|
*pxTopOfStack = 0x12345678; /* Accumulator. */
|
||||||
pxTopOfStack--;
|
pxTopOfStack--;
|
||||||
*pxTopOfStack = 0x87654321; /* Accumulator. */
|
*pxTopOfStack = 0x87654321; /* Accumulator. */
|
||||||
|
@ -199,19 +199,19 @@ extern void vApplicationSetupTimerInterrupt( void );
|
||||||
if( pxCurrentTCB != NULL )
|
if( pxCurrentTCB != NULL )
|
||||||
{
|
{
|
||||||
/* Call an application function to set up the timer that will generate the
|
/* Call an application function to set up the timer that will generate the
|
||||||
tick interrupt. This way the application can decide which peripheral to
|
tick interrupt. This way the application can decide which peripheral to
|
||||||
use. A demo application is provided to show a suitable example. */
|
use. A demo application is provided to show a suitable example. */
|
||||||
vApplicationSetupTimerInterrupt();
|
vApplicationSetupTimerInterrupt();
|
||||||
|
|
||||||
/* Enable the software interrupt. */
|
/* Enable the software interrupt. */
|
||||||
_IEN( _ICU_SWINT ) = 1;
|
_IEN( _ICU_SWINT ) = 1;
|
||||||
|
|
||||||
/* Ensure the software interrupt is clear. */
|
/* Ensure the software interrupt is clear. */
|
||||||
_IR( _ICU_SWINT ) = 0;
|
_IR( _ICU_SWINT ) = 0;
|
||||||
|
|
||||||
/* Ensure the software interrupt is set to the kernel priority. */
|
/* Ensure the software interrupt is set to the kernel priority. */
|
||||||
_IPR( _ICU_SWINT ) = configKERNEL_INTERRUPT_PRIORITY;
|
_IPR( _ICU_SWINT ) = configKERNEL_INTERRUPT_PRIORITY;
|
||||||
|
|
||||||
/* Start the first task. */
|
/* Start the first task. */
|
||||||
prvStartFirstTask();
|
prvStartFirstTask();
|
||||||
}
|
}
|
||||||
|
@ -232,13 +232,13 @@ static void prvStartFirstTask( void )
|
||||||
Just ensure the current stack is the user stack. */
|
Just ensure the current stack is the user stack. */
|
||||||
SETPSW U
|
SETPSW U
|
||||||
|
|
||||||
/* Obtain the location of the stack associated with which ever task
|
/* Obtain the location of the stack associated with which ever task
|
||||||
pxCurrentTCB is currently pointing to. */
|
pxCurrentTCB is currently pointing to. */
|
||||||
MOV.L #_pxCurrentTCB, R15
|
MOV.L #_pxCurrentTCB, R15
|
||||||
MOV.L [R15], R15
|
MOV.L [R15], R15
|
||||||
MOV.L [R15], R0
|
MOV.L [R15], R0
|
||||||
|
|
||||||
/* Restore the registers from the stack of the task pointed to by
|
/* Restore the registers from the stack of the task pointed to by
|
||||||
pxCurrentTCB. */
|
pxCurrentTCB. */
|
||||||
POP R15
|
POP R15
|
||||||
MVTACLO R15 /* Accumulator low 32 bits. */
|
MVTACLO R15 /* Accumulator low 32 bits. */
|
||||||
|
@ -280,18 +280,18 @@ static void prvYieldHandler( void )
|
||||||
SETPSW I
|
SETPSW I
|
||||||
|
|
||||||
/* Move the data that was automatically pushed onto the interrupt stack when
|
/* Move the data that was automatically pushed onto the interrupt stack when
|
||||||
the interrupt occurred from the interrupt stack to the user stack.
|
the interrupt occurred from the interrupt stack to the user stack.
|
||||||
|
|
||||||
R15 is saved before it is clobbered. */
|
R15 is saved before it is clobbered. */
|
||||||
PUSH.L R15
|
PUSH.L R15
|
||||||
|
|
||||||
/* Read the user stack pointer. */
|
/* Read the user stack pointer. */
|
||||||
MVFC USP, R15
|
MVFC USP, R15
|
||||||
|
|
||||||
/* Move the address down to the data being moved. */
|
/* Move the address down to the data being moved. */
|
||||||
SUB #12, R15
|
SUB #12, R15
|
||||||
MVTC R15, USP
|
MVTC R15, USP
|
||||||
|
|
||||||
/* Copy the data across. */
|
/* Copy the data across. */
|
||||||
MOV.L [ R0 ], [ R15 ] ; R15
|
MOV.L [ R0 ], [ R15 ] ; R15
|
||||||
MOV.L 4[ R0 ], 4[ R15 ] ; PC
|
MOV.L 4[ R0 ], 4[ R15 ] ; PC
|
||||||
|
@ -299,13 +299,13 @@ static void prvYieldHandler( void )
|
||||||
|
|
||||||
/* Move the interrupt stack pointer to its new correct position. */
|
/* Move the interrupt stack pointer to its new correct position. */
|
||||||
ADD #12, R0
|
ADD #12, R0
|
||||||
|
|
||||||
/* All the rest of the registers are saved directly to the user stack. */
|
/* All the rest of the registers are saved directly to the user stack. */
|
||||||
SETPSW U
|
SETPSW U
|
||||||
|
|
||||||
/* Save the rest of the general registers (R15 has been saved already). */
|
/* Save the rest of the general registers (R15 has been saved already). */
|
||||||
PUSHM R1-R14
|
PUSHM R1-R14
|
||||||
|
|
||||||
/* Save the accumulator. */
|
/* Save the accumulator. */
|
||||||
MVFACHI R15
|
MVFACHI R15
|
||||||
PUSH.L R15
|
PUSH.L R15
|
||||||
|
@ -317,7 +317,7 @@ static void prvYieldHandler( void )
|
||||||
MOV.L #_pxCurrentTCB, R15
|
MOV.L #_pxCurrentTCB, R15
|
||||||
MOV.L [ R15 ], R15
|
MOV.L [ R15 ], R15
|
||||||
MOV.L R0, [ R15 ]
|
MOV.L R0, [ R15 ]
|
||||||
|
|
||||||
/* Ensure the interrupt mask is set to the syscall priority while the kernel
|
/* Ensure the interrupt mask is set to the syscall priority while the kernel
|
||||||
structures are being accessed. */
|
structures are being accessed. */
|
||||||
MVTIPL #configMAX_SYSCALL_INTERRUPT_PRIORITY
|
MVTIPL #configMAX_SYSCALL_INTERRUPT_PRIORITY
|
||||||
|
@ -349,8 +349,10 @@ static void prvYieldHandler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
|
|
||||||
/* The following line is just to prevent the symbol getting optimised away. */
|
/* The following line is just to prevent the symbol getting optimised away. */
|
||||||
( void ) vTaskSwitchContext();
|
( void ) vTaskSwitchContext();
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
FreeRTOS V7.6.0 - Copyright (C) 2013 Real Time Engineers Ltd.
|
||||||
All rights reserved
|
All rights reserved
|
||||||
|
|
||||||
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
|
||||||
|
@ -354,7 +354,9 @@ static void prvYieldHandler( void )
|
||||||
|
|
||||||
void vPortEndScheduler( void )
|
void vPortEndScheduler( void )
|
||||||
{
|
{
|
||||||
/* Not implemented as there is nothing to return to. */
|
/* Not implemented in ports where there is nothing to return to.
|
||||||
|
Artificially force an assert. */
|
||||||
|
configASSERT( pxCurrentTCB == NULL );
|
||||||
|
|
||||||
/* The following line is just to prevent the symbol getting optimised away. */
|
/* The following line is just to prevent the symbol getting optimised away. */
|
||||||
( void ) vTaskSwitchContext();
|
( void ) vTaskSwitchContext();
|
||||||
|
|
|
@ -99,7 +99,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ portSTACK_TYPE and portBASE_TYPE. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
|
@ -99,7 +99,7 @@ void vSerialISR( void ) interrupt 4;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ FreeRTOSConfig.h to set the configMEMMODEL value. */
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffff
|
#define portMAX_DELAY ( portTickType ) 0xffff
|
||||||
#else
|
#else
|
||||||
typedef unsigned portLONG portTickType;
|
typedef unsigned portLONG portTickType;
|
||||||
#define portMAX_DELAY ( portTickType ) 0xffffffff
|
#define portMAX_DELAY ( portTickType ) 0xffffffffUL
|
||||||
#endif
|
#endif
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue