Please see my note book http://mbed.org/users/kenjiArai/notebook/freertos-on-mbed-board-with-mbed-cloud-ide--never-/

This is too old.
Below is another FreeRTOS on mbed.
http://developer.mbed.org/users/rgrover1/code/FreeRTOS/
I don't know it works well or not.
I have not evaluated it.

Committer:
kenjiArai
Date:
Sat Jan 01 11:17:45 2011 +0000
Revision:
0:d4960fcea8ff

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:d4960fcea8ff 1 /*
kenjiArai 0:d4960fcea8ff 2 FreeRTOS V6.0.3 - Copyright (C) 2010 Real Time Engineers Ltd.
kenjiArai 0:d4960fcea8ff 3
kenjiArai 0:d4960fcea8ff 4 ***************************************************************************
kenjiArai 0:d4960fcea8ff 5 * *
kenjiArai 0:d4960fcea8ff 6 * If you are: *
kenjiArai 0:d4960fcea8ff 7 * *
kenjiArai 0:d4960fcea8ff 8 * + New to FreeRTOS, *
kenjiArai 0:d4960fcea8ff 9 * + Wanting to learn FreeRTOS or multitasking in general quickly *
kenjiArai 0:d4960fcea8ff 10 * + Looking for basic training, *
kenjiArai 0:d4960fcea8ff 11 * + Wanting to improve your FreeRTOS skills and productivity *
kenjiArai 0:d4960fcea8ff 12 * *
kenjiArai 0:d4960fcea8ff 13 * then take a look at the FreeRTOS eBook *
kenjiArai 0:d4960fcea8ff 14 * *
kenjiArai 0:d4960fcea8ff 15 * "Using the FreeRTOS Real Time Kernel - a Practical Guide" *
kenjiArai 0:d4960fcea8ff 16 * http://www.FreeRTOS.org/Documentation *
kenjiArai 0:d4960fcea8ff 17 * *
kenjiArai 0:d4960fcea8ff 18 * A pdf reference manual is also available. Both are usually delivered *
kenjiArai 0:d4960fcea8ff 19 * to your inbox within 20 minutes to two hours when purchased between 8am *
kenjiArai 0:d4960fcea8ff 20 * and 8pm GMT (although please allow up to 24 hours in case of *
kenjiArai 0:d4960fcea8ff 21 * exceptional circumstances). Thank you for your support! *
kenjiArai 0:d4960fcea8ff 22 * *
kenjiArai 0:d4960fcea8ff 23 ***************************************************************************
kenjiArai 0:d4960fcea8ff 24
kenjiArai 0:d4960fcea8ff 25 This file is part of the FreeRTOS distribution.
kenjiArai 0:d4960fcea8ff 26
kenjiArai 0:d4960fcea8ff 27 FreeRTOS is free software; you can redistribute it and/or modify it under
kenjiArai 0:d4960fcea8ff 28 the terms of the GNU General Public License (version 2) as published by the
kenjiArai 0:d4960fcea8ff 29 Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
kenjiArai 0:d4960fcea8ff 30 ***NOTE*** The exception to the GPL is included to allow you to distribute
kenjiArai 0:d4960fcea8ff 31 a combined work that includes FreeRTOS without being obliged to provide the
kenjiArai 0:d4960fcea8ff 32 source code for proprietary components outside of the FreeRTOS kernel.
kenjiArai 0:d4960fcea8ff 33 FreeRTOS is distributed in the hope that it will be useful, but WITHOUT
kenjiArai 0:d4960fcea8ff 34 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
kenjiArai 0:d4960fcea8ff 35 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
kenjiArai 0:d4960fcea8ff 36 more details. You should have received a copy of the GNU General Public
kenjiArai 0:d4960fcea8ff 37 License and the FreeRTOS license exception along with FreeRTOS; if not it
kenjiArai 0:d4960fcea8ff 38 can be viewed here: http://www.freertos.org/a00114.html and also obtained
kenjiArai 0:d4960fcea8ff 39 by writing to Richard Barry, contact details for whom are available on the
kenjiArai 0:d4960fcea8ff 40 FreeRTOS WEB site.
kenjiArai 0:d4960fcea8ff 41
kenjiArai 0:d4960fcea8ff 42 1 tab == 4 spaces!
kenjiArai 0:d4960fcea8ff 43
kenjiArai 0:d4960fcea8ff 44 http://www.FreeRTOS.org - Documentation, latest information, license and
kenjiArai 0:d4960fcea8ff 45 contact details.
kenjiArai 0:d4960fcea8ff 46
kenjiArai 0:d4960fcea8ff 47 http://www.SafeRTOS.com - A version that is certified for use in safety
kenjiArai 0:d4960fcea8ff 48 critical systems.
kenjiArai 0:d4960fcea8ff 49
kenjiArai 0:d4960fcea8ff 50 http://www.OpenRTOS.com - Commercial support, development, porting,
kenjiArai 0:d4960fcea8ff 51 licensing and training services.
kenjiArai 0:d4960fcea8ff 52 */
kenjiArai 0:d4960fcea8ff 53
kenjiArai 0:d4960fcea8ff 54
kenjiArai 0:d4960fcea8ff 55 #ifndef INC_FREERTOS_H
kenjiArai 0:d4960fcea8ff 56 #error "#include FreeRTOS.h" must appear in source files before "#include task.h"
kenjiArai 0:d4960fcea8ff 57 #endif
kenjiArai 0:d4960fcea8ff 58
kenjiArai 0:d4960fcea8ff 59
kenjiArai 0:d4960fcea8ff 60
kenjiArai 0:d4960fcea8ff 61 #ifndef TASK_H
kenjiArai 0:d4960fcea8ff 62 #define TASK_H
kenjiArai 0:d4960fcea8ff 63
kenjiArai 0:d4960fcea8ff 64 #include "portable.h"
kenjiArai 0:d4960fcea8ff 65 #include "list.h"
kenjiArai 0:d4960fcea8ff 66
kenjiArai 0:d4960fcea8ff 67 #ifdef __cplusplus
kenjiArai 0:d4960fcea8ff 68 extern "C" {
kenjiArai 0:d4960fcea8ff 69 #endif
kenjiArai 0:d4960fcea8ff 70
kenjiArai 0:d4960fcea8ff 71 /*-----------------------------------------------------------
kenjiArai 0:d4960fcea8ff 72 * MACROS AND DEFINITIONS
kenjiArai 0:d4960fcea8ff 73 *----------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 74
kenjiArai 0:d4960fcea8ff 75 #define tskKERNEL_VERSION_NUMBER "V6.0.3"
kenjiArai 0:d4960fcea8ff 76
kenjiArai 0:d4960fcea8ff 77 /**
kenjiArai 0:d4960fcea8ff 78 * task. h
kenjiArai 0:d4960fcea8ff 79 *
kenjiArai 0:d4960fcea8ff 80 * Type by which tasks are referenced. For example, a call to xTaskCreate
kenjiArai 0:d4960fcea8ff 81 * returns (via a pointer parameter) an xTaskHandle variable that can then
kenjiArai 0:d4960fcea8ff 82 * be used as a parameter to vTaskDelete to delete the task.
kenjiArai 0:d4960fcea8ff 83 *
kenjiArai 0:d4960fcea8ff 84 * \page xTaskHandle xTaskHandle
kenjiArai 0:d4960fcea8ff 85 * \ingroup Tasks
kenjiArai 0:d4960fcea8ff 86 */
kenjiArai 0:d4960fcea8ff 87 typedef void * xTaskHandle;
kenjiArai 0:d4960fcea8ff 88
kenjiArai 0:d4960fcea8ff 89 /*
kenjiArai 0:d4960fcea8ff 90 * Used internally only.
kenjiArai 0:d4960fcea8ff 91 */
kenjiArai 0:d4960fcea8ff 92 typedef struct xTIME_OUT
kenjiArai 0:d4960fcea8ff 93 {
kenjiArai 0:d4960fcea8ff 94 portBASE_TYPE xOverflowCount;
kenjiArai 0:d4960fcea8ff 95 portTickType xTimeOnEntering;
kenjiArai 0:d4960fcea8ff 96 } xTimeOutType;
kenjiArai 0:d4960fcea8ff 97
kenjiArai 0:d4960fcea8ff 98 /*
kenjiArai 0:d4960fcea8ff 99 * Defines the memory ranges allocated to the task when an MPU is used.
kenjiArai 0:d4960fcea8ff 100 */
kenjiArai 0:d4960fcea8ff 101 typedef struct xMEMORY_REGION
kenjiArai 0:d4960fcea8ff 102 {
kenjiArai 0:d4960fcea8ff 103 void *pvBaseAddress;
kenjiArai 0:d4960fcea8ff 104 unsigned long ulLengthInBytes;
kenjiArai 0:d4960fcea8ff 105 unsigned long ulParameters;
kenjiArai 0:d4960fcea8ff 106 } xMemoryRegion;
kenjiArai 0:d4960fcea8ff 107
kenjiArai 0:d4960fcea8ff 108 #if 0
kenjiArai 0:d4960fcea8ff 109 // modified by K.Arai Oct. 28th, 2010
kenjiArai 0:d4960fcea8ff 110 // due to compile error!
kenjiArai 0:d4960fcea8ff 111 /*
kenjiArai 0:d4960fcea8ff 112 * Parameters required to create an MPU protected task.
kenjiArai 0:d4960fcea8ff 113 */
kenjiArai 0:d4960fcea8ff 114 typedef struct xTASK_PARAMTERS
kenjiArai 0:d4960fcea8ff 115 {
kenjiArai 0:d4960fcea8ff 116 pdTASK_CODE pvTaskCode;
kenjiArai 0:d4960fcea8ff 117 const signed char * const pcName;
kenjiArai 0:d4960fcea8ff 118 unsigned short usStackDepth;
kenjiArai 0:d4960fcea8ff 119 void *pvParameters;
kenjiArai 0:d4960fcea8ff 120 unsigned portBASE_TYPE uxPriority;
kenjiArai 0:d4960fcea8ff 121 portSTACK_TYPE *puxStackBuffer;
kenjiArai 0:d4960fcea8ff 122 xMemoryRegion xRegions[ portNUM_CONFIGURABLE_REGIONS ];
kenjiArai 0:d4960fcea8ff 123 } xTaskParameters;
kenjiArai 0:d4960fcea8ff 124 #endif
kenjiArai 0:d4960fcea8ff 125
kenjiArai 0:d4960fcea8ff 126 /*
kenjiArai 0:d4960fcea8ff 127 * Defines the priority used by the idle task. This must not be modified.
kenjiArai 0:d4960fcea8ff 128 *
kenjiArai 0:d4960fcea8ff 129 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 130 */
kenjiArai 0:d4960fcea8ff 131 #define tskIDLE_PRIORITY ( ( unsigned portBASE_TYPE ) 0 )
kenjiArai 0:d4960fcea8ff 132
kenjiArai 0:d4960fcea8ff 133 /**
kenjiArai 0:d4960fcea8ff 134 * task. h
kenjiArai 0:d4960fcea8ff 135 *
kenjiArai 0:d4960fcea8ff 136 * Macro for forcing a context switch.
kenjiArai 0:d4960fcea8ff 137 *
kenjiArai 0:d4960fcea8ff 138 * \page taskYIELD taskYIELD
kenjiArai 0:d4960fcea8ff 139 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 140 */
kenjiArai 0:d4960fcea8ff 141 #define taskYIELD() portYIELD()
kenjiArai 0:d4960fcea8ff 142
kenjiArai 0:d4960fcea8ff 143 /**
kenjiArai 0:d4960fcea8ff 144 * task. h
kenjiArai 0:d4960fcea8ff 145 *
kenjiArai 0:d4960fcea8ff 146 * Macro to mark the start of a critical code region. Preemptive context
kenjiArai 0:d4960fcea8ff 147 * switches cannot occur when in a critical region.
kenjiArai 0:d4960fcea8ff 148 *
kenjiArai 0:d4960fcea8ff 149 * NOTE: This may alter the stack (depending on the portable implementation)
kenjiArai 0:d4960fcea8ff 150 * so must be used with care!
kenjiArai 0:d4960fcea8ff 151 *
kenjiArai 0:d4960fcea8ff 152 * \page taskENTER_CRITICAL taskENTER_CRITICAL
kenjiArai 0:d4960fcea8ff 153 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 154 */
kenjiArai 0:d4960fcea8ff 155 #define taskENTER_CRITICAL() portENTER_CRITICAL()
kenjiArai 0:d4960fcea8ff 156
kenjiArai 0:d4960fcea8ff 157 /**
kenjiArai 0:d4960fcea8ff 158 * task. h
kenjiArai 0:d4960fcea8ff 159 *
kenjiArai 0:d4960fcea8ff 160 * Macro to mark the end of a critical code region. Preemptive context
kenjiArai 0:d4960fcea8ff 161 * switches cannot occur when in a critical region.
kenjiArai 0:d4960fcea8ff 162 *
kenjiArai 0:d4960fcea8ff 163 * NOTE: This may alter the stack (depending on the portable implementation)
kenjiArai 0:d4960fcea8ff 164 * so must be used with care!
kenjiArai 0:d4960fcea8ff 165 *
kenjiArai 0:d4960fcea8ff 166 * \page taskEXIT_CRITICAL taskEXIT_CRITICAL
kenjiArai 0:d4960fcea8ff 167 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 168 */
kenjiArai 0:d4960fcea8ff 169 #define taskEXIT_CRITICAL() portEXIT_CRITICAL()
kenjiArai 0:d4960fcea8ff 170
kenjiArai 0:d4960fcea8ff 171 /**
kenjiArai 0:d4960fcea8ff 172 * task. h
kenjiArai 0:d4960fcea8ff 173 *
kenjiArai 0:d4960fcea8ff 174 * Macro to disable all maskable interrupts.
kenjiArai 0:d4960fcea8ff 175 *
kenjiArai 0:d4960fcea8ff 176 * \page taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS
kenjiArai 0:d4960fcea8ff 177 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 178 */
kenjiArai 0:d4960fcea8ff 179 #define taskDISABLE_INTERRUPTS() portDISABLE_INTERRUPTS()
kenjiArai 0:d4960fcea8ff 180
kenjiArai 0:d4960fcea8ff 181 /**
kenjiArai 0:d4960fcea8ff 182 * task. h
kenjiArai 0:d4960fcea8ff 183 *
kenjiArai 0:d4960fcea8ff 184 * Macro to enable microcontroller interrupts.
kenjiArai 0:d4960fcea8ff 185 *
kenjiArai 0:d4960fcea8ff 186 * \page taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS
kenjiArai 0:d4960fcea8ff 187 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 188 */
kenjiArai 0:d4960fcea8ff 189 #define taskENABLE_INTERRUPTS() portENABLE_INTERRUPTS()
kenjiArai 0:d4960fcea8ff 190
kenjiArai 0:d4960fcea8ff 191 /* Definitions returned by xTaskGetSchedulerState(). */
kenjiArai 0:d4960fcea8ff 192 #define taskSCHEDULER_NOT_STARTED 0
kenjiArai 0:d4960fcea8ff 193 #define taskSCHEDULER_RUNNING 1
kenjiArai 0:d4960fcea8ff 194 #define taskSCHEDULER_SUSPENDED 2
kenjiArai 0:d4960fcea8ff 195
kenjiArai 0:d4960fcea8ff 196 /*-----------------------------------------------------------
kenjiArai 0:d4960fcea8ff 197 * TASK CREATION API
kenjiArai 0:d4960fcea8ff 198 *----------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 199
kenjiArai 0:d4960fcea8ff 200 /**
kenjiArai 0:d4960fcea8ff 201 * task. h
kenjiArai 0:d4960fcea8ff 202 *<pre>
kenjiArai 0:d4960fcea8ff 203 portBASE_TYPE xTaskCreate(
kenjiArai 0:d4960fcea8ff 204 pdTASK_CODE pvTaskCode,
kenjiArai 0:d4960fcea8ff 205 const char * const pcName,
kenjiArai 0:d4960fcea8ff 206 unsigned short usStackDepth,
kenjiArai 0:d4960fcea8ff 207 void *pvParameters,
kenjiArai 0:d4960fcea8ff 208 unsigned portBASE_TYPE uxPriority,
kenjiArai 0:d4960fcea8ff 209 xTaskHandle *pvCreatedTask
kenjiArai 0:d4960fcea8ff 210 );</pre>
kenjiArai 0:d4960fcea8ff 211 *
kenjiArai 0:d4960fcea8ff 212 * Create a new task and add it to the list of tasks that are ready to run.
kenjiArai 0:d4960fcea8ff 213 *
kenjiArai 0:d4960fcea8ff 214 * xTaskCreate() can only be used to create a task that has unrestricted
kenjiArai 0:d4960fcea8ff 215 * access to the entire microcontroller memory map. Systems that include MPU
kenjiArai 0:d4960fcea8ff 216 * support can alternatively create an MPU constrained task using
kenjiArai 0:d4960fcea8ff 217 * xTaskCreateRestricted().
kenjiArai 0:d4960fcea8ff 218 *
kenjiArai 0:d4960fcea8ff 219 * @param pvTaskCode Pointer to the task entry function. Tasks
kenjiArai 0:d4960fcea8ff 220 * must be implemented to never return (i.e. continuous loop).
kenjiArai 0:d4960fcea8ff 221 *
kenjiArai 0:d4960fcea8ff 222 * @param pcName A descriptive name for the task. This is mainly used to
kenjiArai 0:d4960fcea8ff 223 * facilitate debugging. Max length defined by tskMAX_TASK_NAME_LEN - default
kenjiArai 0:d4960fcea8ff 224 * is 16.
kenjiArai 0:d4960fcea8ff 225 *
kenjiArai 0:d4960fcea8ff 226 * @param usStackDepth The size of the task stack specified as the number of
kenjiArai 0:d4960fcea8ff 227 * variables the stack can hold - not the number of bytes. For example, if
kenjiArai 0:d4960fcea8ff 228 * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes
kenjiArai 0:d4960fcea8ff 229 * will be allocated for stack storage.
kenjiArai 0:d4960fcea8ff 230 *
kenjiArai 0:d4960fcea8ff 231 * @param pvParameters Pointer that will be used as the parameter for the task
kenjiArai 0:d4960fcea8ff 232 * being created.
kenjiArai 0:d4960fcea8ff 233 *
kenjiArai 0:d4960fcea8ff 234 * @param uxPriority The priority at which the task should run. Systems that
kenjiArai 0:d4960fcea8ff 235 * include MPU support can optionally create tasks in a privileged (system)
kenjiArai 0:d4960fcea8ff 236 * mode by setting bit portPRIVILEGE_BIT of the priority parameter. For
kenjiArai 0:d4960fcea8ff 237 * example, to create a privileged task at priority 2 the uxPriority parameter
kenjiArai 0:d4960fcea8ff 238 * should be set to ( 2 | portPRIVILEGE_BIT ).
kenjiArai 0:d4960fcea8ff 239 *
kenjiArai 0:d4960fcea8ff 240 * @param pvCreatedTask Used to pass back a handle by which the created task
kenjiArai 0:d4960fcea8ff 241 * can be referenced.
kenjiArai 0:d4960fcea8ff 242 *
kenjiArai 0:d4960fcea8ff 243 * @return pdPASS if the task was successfully created and added to a ready
kenjiArai 0:d4960fcea8ff 244 * list, otherwise an error code defined in the file errors. h
kenjiArai 0:d4960fcea8ff 245 *
kenjiArai 0:d4960fcea8ff 246 * Example usage:
kenjiArai 0:d4960fcea8ff 247 <pre>
kenjiArai 0:d4960fcea8ff 248 // Task to be created.
kenjiArai 0:d4960fcea8ff 249 void vTaskCode( void * pvParameters )
kenjiArai 0:d4960fcea8ff 250 {
kenjiArai 0:d4960fcea8ff 251 for( ;; )
kenjiArai 0:d4960fcea8ff 252 {
kenjiArai 0:d4960fcea8ff 253 // Task code goes here.
kenjiArai 0:d4960fcea8ff 254 }
kenjiArai 0:d4960fcea8ff 255 }
kenjiArai 0:d4960fcea8ff 256
kenjiArai 0:d4960fcea8ff 257 // Function that creates a task.
kenjiArai 0:d4960fcea8ff 258 void vOtherFunction( void )
kenjiArai 0:d4960fcea8ff 259 {
kenjiArai 0:d4960fcea8ff 260 static unsigned char ucParameterToPass;
kenjiArai 0:d4960fcea8ff 261 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 262
kenjiArai 0:d4960fcea8ff 263 // Create the task, storing the handle. Note that the passed parameter ucParameterToPass
kenjiArai 0:d4960fcea8ff 264 // must exist for the lifetime of the task, so in this case is declared static. If it was just an
kenjiArai 0:d4960fcea8ff 265 // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time
kenjiArai 0:d4960fcea8ff 266 // the new task attempts to access it.
kenjiArai 0:d4960fcea8ff 267 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );
kenjiArai 0:d4960fcea8ff 268
kenjiArai 0:d4960fcea8ff 269 // Use the handle to delete the task.
kenjiArai 0:d4960fcea8ff 270 vTaskDelete( xHandle );
kenjiArai 0:d4960fcea8ff 271 }
kenjiArai 0:d4960fcea8ff 272 </pre>
kenjiArai 0:d4960fcea8ff 273 * \defgroup xTaskCreate xTaskCreate
kenjiArai 0:d4960fcea8ff 274 * \ingroup Tasks
kenjiArai 0:d4960fcea8ff 275 */
kenjiArai 0:d4960fcea8ff 276 #define xTaskCreate( pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask ) xTaskGenericCreate( ( pvTaskCode ), ( pcName ), ( usStackDepth ), ( pvParameters ), ( uxPriority ), ( pxCreatedTask ), ( NULL ), ( NULL ) )
kenjiArai 0:d4960fcea8ff 277
kenjiArai 0:d4960fcea8ff 278 /**
kenjiArai 0:d4960fcea8ff 279 * task. h
kenjiArai 0:d4960fcea8ff 280 *<pre>
kenjiArai 0:d4960fcea8ff 281 portBASE_TYPE xTaskCreateRestricted( xTaskParameters *pxTaskDefinition, xTaskHandle *pxCreatedTask );</pre>
kenjiArai 0:d4960fcea8ff 282 *
kenjiArai 0:d4960fcea8ff 283 * xTaskCreateRestricted() should only be used in systems that include an MPU
kenjiArai 0:d4960fcea8ff 284 * implementation.
kenjiArai 0:d4960fcea8ff 285 *
kenjiArai 0:d4960fcea8ff 286 * Create a new task and add it to the list of tasks that are ready to run.
kenjiArai 0:d4960fcea8ff 287 * The function parameters define the memory regions and associated access
kenjiArai 0:d4960fcea8ff 288 * permissions allocated to the task.
kenjiArai 0:d4960fcea8ff 289 *
kenjiArai 0:d4960fcea8ff 290 * @param pxTaskDefinition Pointer to a structure that contains a member
kenjiArai 0:d4960fcea8ff 291 * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API
kenjiArai 0:d4960fcea8ff 292 * documentation) plus an optional stack buffer and the memory region
kenjiArai 0:d4960fcea8ff 293 * definitions.
kenjiArai 0:d4960fcea8ff 294 *
kenjiArai 0:d4960fcea8ff 295 * @param pxCreatedTask Used to pass back a handle by which the created task
kenjiArai 0:d4960fcea8ff 296 * can be referenced.
kenjiArai 0:d4960fcea8ff 297 *
kenjiArai 0:d4960fcea8ff 298 * @return pdPASS if the task was successfully created and added to a ready
kenjiArai 0:d4960fcea8ff 299 * list, otherwise an error code defined in the file errors. h
kenjiArai 0:d4960fcea8ff 300 *
kenjiArai 0:d4960fcea8ff 301 * Example usage:
kenjiArai 0:d4960fcea8ff 302 <pre>
kenjiArai 0:d4960fcea8ff 303 // Create an xTaskParameters structure that defines the task to be created.
kenjiArai 0:d4960fcea8ff 304 static const xTaskParameters xCheckTaskParameters =
kenjiArai 0:d4960fcea8ff 305 {
kenjiArai 0:d4960fcea8ff 306 vATask, // pvTaskCode - the function that implements the task.
kenjiArai 0:d4960fcea8ff 307 "ATask", // pcName - just a text name for the task to assist debugging.
kenjiArai 0:d4960fcea8ff 308 100, // usStackDepth - the stack size DEFINED IN WORDS.
kenjiArai 0:d4960fcea8ff 309 NULL, // pvParameters - passed into the task function as the function parameters.
kenjiArai 0:d4960fcea8ff 310 ( 1UL | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.
kenjiArai 0:d4960fcea8ff 311 cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.
kenjiArai 0:d4960fcea8ff 312
kenjiArai 0:d4960fcea8ff 313 // xRegions - Allocate up to three separate memory regions for access by
kenjiArai 0:d4960fcea8ff 314 // the task, with appropriate access permissions. Different processors have
kenjiArai 0:d4960fcea8ff 315 // different memory alignment requirements - refer to the FreeRTOS documentation
kenjiArai 0:d4960fcea8ff 316 // for full information.
kenjiArai 0:d4960fcea8ff 317 {
kenjiArai 0:d4960fcea8ff 318 // Base address Length Parameters
kenjiArai 0:d4960fcea8ff 319 { cReadWriteArray, 32, portMPU_REGION_READ_WRITE },
kenjiArai 0:d4960fcea8ff 320 { cReadOnlyArray, 32, portMPU_REGION_READ_ONLY },
kenjiArai 0:d4960fcea8ff 321 { cPrivilegedOnlyAccessArray, 128, portMPU_REGION_PRIVILEGED_READ_WRITE }
kenjiArai 0:d4960fcea8ff 322 }
kenjiArai 0:d4960fcea8ff 323 };
kenjiArai 0:d4960fcea8ff 324
kenjiArai 0:d4960fcea8ff 325 int main( void )
kenjiArai 0:d4960fcea8ff 326 {
kenjiArai 0:d4960fcea8ff 327 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 328
kenjiArai 0:d4960fcea8ff 329 // Create a task from the const structure defined above. The task handle
kenjiArai 0:d4960fcea8ff 330 // is requested (the second parameter is not NULL) but in this case just for
kenjiArai 0:d4960fcea8ff 331 // demonstration purposes as its not actually used.
kenjiArai 0:d4960fcea8ff 332 xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );
kenjiArai 0:d4960fcea8ff 333
kenjiArai 0:d4960fcea8ff 334 // Start the scheduler.
kenjiArai 0:d4960fcea8ff 335 vTaskStartScheduler();
kenjiArai 0:d4960fcea8ff 336
kenjiArai 0:d4960fcea8ff 337 // Will only get here if there was insufficient memory to create the idle
kenjiArai 0:d4960fcea8ff 338 // task.
kenjiArai 0:d4960fcea8ff 339 for( ;; );
kenjiArai 0:d4960fcea8ff 340 }
kenjiArai 0:d4960fcea8ff 341 </pre>
kenjiArai 0:d4960fcea8ff 342 * \defgroup xTaskCreateRestricted xTaskCreateRestricted
kenjiArai 0:d4960fcea8ff 343 * \ingroup Tasks
kenjiArai 0:d4960fcea8ff 344 */
kenjiArai 0:d4960fcea8ff 345 #define xTaskCreateRestricted( x, pxCreatedTask ) xTaskGenericCreate( ((x)->pvTaskCode), ((x)->pcName), ((x)->usStackDepth), ((x)->pvParameters), ((x)->uxPriority), (pxCreatedTask), ((x)->puxStackBuffer), ((x)->xRegions) )
kenjiArai 0:d4960fcea8ff 346
kenjiArai 0:d4960fcea8ff 347 /**
kenjiArai 0:d4960fcea8ff 348 * task. h
kenjiArai 0:d4960fcea8ff 349 *<pre>
kenjiArai 0:d4960fcea8ff 350 void vTaskAllocateMPURegions( xTaskHandle xTask, const xMemoryRegion * const pxRegions );</pre>
kenjiArai 0:d4960fcea8ff 351 *
kenjiArai 0:d4960fcea8ff 352 * Memory regions are assigned to a restricted task when the task is created by
kenjiArai 0:d4960fcea8ff 353 * a call to xTaskCreateRestricted(). These regions can be redefined using
kenjiArai 0:d4960fcea8ff 354 * vTaskAllocateMPURegions().
kenjiArai 0:d4960fcea8ff 355 *
kenjiArai 0:d4960fcea8ff 356 * @param xTask The handle of the task being updated.
kenjiArai 0:d4960fcea8ff 357 *
kenjiArai 0:d4960fcea8ff 358 * @param xRegions A pointer to an xMemoryRegion structure that contains the
kenjiArai 0:d4960fcea8ff 359 * new memory region definitions.
kenjiArai 0:d4960fcea8ff 360 *
kenjiArai 0:d4960fcea8ff 361 * Example usage:
kenjiArai 0:d4960fcea8ff 362 <pre>
kenjiArai 0:d4960fcea8ff 363 // Define an array of xMemoryRegion structures that configures an MPU region
kenjiArai 0:d4960fcea8ff 364 // allowing read/write access for 1024 bytes starting at the beginning of the
kenjiArai 0:d4960fcea8ff 365 // ucOneKByte array. The other two of the maximum 3 definable regions are
kenjiArai 0:d4960fcea8ff 366 // unused so set to zero.
kenjiArai 0:d4960fcea8ff 367 static const xMemoryRegion xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =
kenjiArai 0:d4960fcea8ff 368 {
kenjiArai 0:d4960fcea8ff 369 // Base address Length Parameters
kenjiArai 0:d4960fcea8ff 370 { ucOneKByte, 1024, portMPU_REGION_READ_WRITE },
kenjiArai 0:d4960fcea8ff 371 { 0, 0, 0 },
kenjiArai 0:d4960fcea8ff 372 { 0, 0, 0 }
kenjiArai 0:d4960fcea8ff 373 };
kenjiArai 0:d4960fcea8ff 374
kenjiArai 0:d4960fcea8ff 375 void vATask( void *pvParameters )
kenjiArai 0:d4960fcea8ff 376 {
kenjiArai 0:d4960fcea8ff 377 // This task was created such that it has access to certain regions of
kenjiArai 0:d4960fcea8ff 378 // memory as defined by the MPU configuration. At some point it is
kenjiArai 0:d4960fcea8ff 379 // desired that these MPU regions are replaced with that defined in the
kenjiArai 0:d4960fcea8ff 380 // xAltRegions const struct above. Use a call to vTaskAllocateMPURegions()
kenjiArai 0:d4960fcea8ff 381 // for this purpose. NULL is used as the task handle to indicate that this
kenjiArai 0:d4960fcea8ff 382 // function should modify the MPU regions of the calling task.
kenjiArai 0:d4960fcea8ff 383 vTaskAllocateMPURegions( NULL, xAltRegions );
kenjiArai 0:d4960fcea8ff 384
kenjiArai 0:d4960fcea8ff 385 // Now the task can continue its function, but from this point on can only
kenjiArai 0:d4960fcea8ff 386 // access its stack and the ucOneKByte array (unless any other statically
kenjiArai 0:d4960fcea8ff 387 // defined or shared regions have been declared elsewhere).
kenjiArai 0:d4960fcea8ff 388 }
kenjiArai 0:d4960fcea8ff 389 </pre>
kenjiArai 0:d4960fcea8ff 390 * \defgroup xTaskCreateRestricted xTaskCreateRestricted
kenjiArai 0:d4960fcea8ff 391 * \ingroup Tasks
kenjiArai 0:d4960fcea8ff 392 */
kenjiArai 0:d4960fcea8ff 393 void vTaskAllocateMPURegions( xTaskHandle xTask, const xMemoryRegion * const pxRegions ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 394
kenjiArai 0:d4960fcea8ff 395 /**
kenjiArai 0:d4960fcea8ff 396 * task. h
kenjiArai 0:d4960fcea8ff 397 * <pre>void vTaskDelete( xTaskHandle pxTask );</pre>
kenjiArai 0:d4960fcea8ff 398 *
kenjiArai 0:d4960fcea8ff 399 * INCLUDE_vTaskDelete must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 400 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 401 *
kenjiArai 0:d4960fcea8ff 402 * Remove a task from the RTOS real time kernels management. The task being
kenjiArai 0:d4960fcea8ff 403 * deleted will be removed from all ready, blocked, suspended and event lists.
kenjiArai 0:d4960fcea8ff 404 *
kenjiArai 0:d4960fcea8ff 405 * NOTE: The idle task is responsible for freeing the kernel allocated
kenjiArai 0:d4960fcea8ff 406 * memory from tasks that have been deleted. It is therefore important that
kenjiArai 0:d4960fcea8ff 407 * the idle task is not starved of microcontroller processing time if your
kenjiArai 0:d4960fcea8ff 408 * application makes any calls to vTaskDelete (). Memory allocated by the
kenjiArai 0:d4960fcea8ff 409 * task code is not automatically freed, and should be freed before the task
kenjiArai 0:d4960fcea8ff 410 * is deleted.
kenjiArai 0:d4960fcea8ff 411 *
kenjiArai 0:d4960fcea8ff 412 * See the demo application file death.c for sample code that utilises
kenjiArai 0:d4960fcea8ff 413 * vTaskDelete ().
kenjiArai 0:d4960fcea8ff 414 *
kenjiArai 0:d4960fcea8ff 415 * @param pxTask The handle of the task to be deleted. Passing NULL will
kenjiArai 0:d4960fcea8ff 416 * cause the calling task to be deleted.
kenjiArai 0:d4960fcea8ff 417 *
kenjiArai 0:d4960fcea8ff 418 * Example usage:
kenjiArai 0:d4960fcea8ff 419 <pre>
kenjiArai 0:d4960fcea8ff 420 void vOtherFunction( void )
kenjiArai 0:d4960fcea8ff 421 {
kenjiArai 0:d4960fcea8ff 422 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 423
kenjiArai 0:d4960fcea8ff 424 // Create the task, storing the handle.
kenjiArai 0:d4960fcea8ff 425 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
kenjiArai 0:d4960fcea8ff 426
kenjiArai 0:d4960fcea8ff 427 // Use the handle to delete the task.
kenjiArai 0:d4960fcea8ff 428 vTaskDelete( xHandle );
kenjiArai 0:d4960fcea8ff 429 }
kenjiArai 0:d4960fcea8ff 430 </pre>
kenjiArai 0:d4960fcea8ff 431 * \defgroup vTaskDelete vTaskDelete
kenjiArai 0:d4960fcea8ff 432 * \ingroup Tasks
kenjiArai 0:d4960fcea8ff 433 */
kenjiArai 0:d4960fcea8ff 434 void vTaskDelete( xTaskHandle pxTask ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 435
kenjiArai 0:d4960fcea8ff 436
kenjiArai 0:d4960fcea8ff 437 /*-----------------------------------------------------------
kenjiArai 0:d4960fcea8ff 438 * TASK CONTROL API
kenjiArai 0:d4960fcea8ff 439 *----------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 440
kenjiArai 0:d4960fcea8ff 441 /**
kenjiArai 0:d4960fcea8ff 442 * task. h
kenjiArai 0:d4960fcea8ff 443 * <pre>void vTaskDelay( portTickType xTicksToDelay );</pre>
kenjiArai 0:d4960fcea8ff 444 *
kenjiArai 0:d4960fcea8ff 445 * Delay a task for a given number of ticks. The actual time that the
kenjiArai 0:d4960fcea8ff 446 * task remains blocked depends on the tick rate. The constant
kenjiArai 0:d4960fcea8ff 447 * portTICK_RATE_MS can be used to calculate real time from the tick
kenjiArai 0:d4960fcea8ff 448 * rate - with the resolution of one tick period.
kenjiArai 0:d4960fcea8ff 449 *
kenjiArai 0:d4960fcea8ff 450 * INCLUDE_vTaskDelay must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 451 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 452 *
kenjiArai 0:d4960fcea8ff 453 *
kenjiArai 0:d4960fcea8ff 454 * vTaskDelay() specifies a time at which the task wishes to unblock relative to
kenjiArai 0:d4960fcea8ff 455 * the time at which vTaskDelay() is called. For example, specifying a block
kenjiArai 0:d4960fcea8ff 456 * period of 100 ticks will cause the task to unblock 100 ticks after
kenjiArai 0:d4960fcea8ff 457 * vTaskDelay() is called. vTaskDelay() does not therefore provide a good method
kenjiArai 0:d4960fcea8ff 458 * of controlling the frequency of a cyclical task as the path taken through the
kenjiArai 0:d4960fcea8ff 459 * code, as well as other task and interrupt activity, will effect the frequency
kenjiArai 0:d4960fcea8ff 460 * at which vTaskDelay() gets called and therefore the time at which the task
kenjiArai 0:d4960fcea8ff 461 * next executes. See vTaskDelayUntil() for an alternative API function designed
kenjiArai 0:d4960fcea8ff 462 * to facilitate fixed frequency execution. It does this by specifying an
kenjiArai 0:d4960fcea8ff 463 * absolute time (rather than a relative time) at which the calling task should
kenjiArai 0:d4960fcea8ff 464 * unblock.
kenjiArai 0:d4960fcea8ff 465 *
kenjiArai 0:d4960fcea8ff 466 * @param xTicksToDelay The amount of time, in tick periods, that
kenjiArai 0:d4960fcea8ff 467 * the calling task should block.
kenjiArai 0:d4960fcea8ff 468 *
kenjiArai 0:d4960fcea8ff 469 * Example usage:
kenjiArai 0:d4960fcea8ff 470
kenjiArai 0:d4960fcea8ff 471 void vTaskFunction( void * pvParameters )
kenjiArai 0:d4960fcea8ff 472 {
kenjiArai 0:d4960fcea8ff 473 void vTaskFunction( void * pvParameters )
kenjiArai 0:d4960fcea8ff 474 {
kenjiArai 0:d4960fcea8ff 475 // Block for 500ms.
kenjiArai 0:d4960fcea8ff 476 const portTickType xDelay = 500 / portTICK_RATE_MS;
kenjiArai 0:d4960fcea8ff 477
kenjiArai 0:d4960fcea8ff 478 for( ;; )
kenjiArai 0:d4960fcea8ff 479 {
kenjiArai 0:d4960fcea8ff 480 // Simply toggle the LED every 500ms, blocking between each toggle.
kenjiArai 0:d4960fcea8ff 481 vToggleLED();
kenjiArai 0:d4960fcea8ff 482 vTaskDelay( xDelay );
kenjiArai 0:d4960fcea8ff 483 }
kenjiArai 0:d4960fcea8ff 484 }
kenjiArai 0:d4960fcea8ff 485
kenjiArai 0:d4960fcea8ff 486 * \defgroup vTaskDelay vTaskDelay
kenjiArai 0:d4960fcea8ff 487 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 488 */
kenjiArai 0:d4960fcea8ff 489 void vTaskDelay( portTickType xTicksToDelay ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 490
kenjiArai 0:d4960fcea8ff 491 /**
kenjiArai 0:d4960fcea8ff 492 * task. h
kenjiArai 0:d4960fcea8ff 493 * <pre>void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );</pre>
kenjiArai 0:d4960fcea8ff 494 *
kenjiArai 0:d4960fcea8ff 495 * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 496 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 497 *
kenjiArai 0:d4960fcea8ff 498 * Delay a task until a specified time. This function can be used by cyclical
kenjiArai 0:d4960fcea8ff 499 * tasks to ensure a constant execution frequency.
kenjiArai 0:d4960fcea8ff 500 *
kenjiArai 0:d4960fcea8ff 501 * This function differs from vTaskDelay () in one important aspect: vTaskDelay () will
kenjiArai 0:d4960fcea8ff 502 * cause a task to block for the specified number of ticks from the time vTaskDelay () is
kenjiArai 0:d4960fcea8ff 503 * called. It is therefore difficult to use vTaskDelay () by itself to generate a fixed
kenjiArai 0:d4960fcea8ff 504 * execution frequency as the time between a task starting to execute and that task
kenjiArai 0:d4960fcea8ff 505 * calling vTaskDelay () may not be fixed [the task may take a different path though the
kenjiArai 0:d4960fcea8ff 506 * code between calls, or may get interrupted or preempted a different number of times
kenjiArai 0:d4960fcea8ff 507 * each time it executes].
kenjiArai 0:d4960fcea8ff 508 *
kenjiArai 0:d4960fcea8ff 509 * Whereas vTaskDelay () specifies a wake time relative to the time at which the function
kenjiArai 0:d4960fcea8ff 510 * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to
kenjiArai 0:d4960fcea8ff 511 * unblock.
kenjiArai 0:d4960fcea8ff 512 *
kenjiArai 0:d4960fcea8ff 513 * The constant portTICK_RATE_MS can be used to calculate real time from the tick
kenjiArai 0:d4960fcea8ff 514 * rate - with the resolution of one tick period.
kenjiArai 0:d4960fcea8ff 515 *
kenjiArai 0:d4960fcea8ff 516 * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the
kenjiArai 0:d4960fcea8ff 517 * task was last unblocked. The variable must be initialised with the current time
kenjiArai 0:d4960fcea8ff 518 * prior to its first use (see the example below). Following this the variable is
kenjiArai 0:d4960fcea8ff 519 * automatically updated within vTaskDelayUntil ().
kenjiArai 0:d4960fcea8ff 520 *
kenjiArai 0:d4960fcea8ff 521 * @param xTimeIncrement The cycle time period. The task will be unblocked at
kenjiArai 0:d4960fcea8ff 522 * time *pxPreviousWakeTime + xTimeIncrement. Calling vTaskDelayUntil with the
kenjiArai 0:d4960fcea8ff 523 * same xTimeIncrement parameter value will cause the task to execute with
kenjiArai 0:d4960fcea8ff 524 * a fixed interface period.
kenjiArai 0:d4960fcea8ff 525 *
kenjiArai 0:d4960fcea8ff 526 * Example usage:
kenjiArai 0:d4960fcea8ff 527 <pre>
kenjiArai 0:d4960fcea8ff 528 // Perform an action every 10 ticks.
kenjiArai 0:d4960fcea8ff 529 void vTaskFunction( void * pvParameters )
kenjiArai 0:d4960fcea8ff 530 {
kenjiArai 0:d4960fcea8ff 531 portTickType xLastWakeTime;
kenjiArai 0:d4960fcea8ff 532 const portTickType xFrequency = 10;
kenjiArai 0:d4960fcea8ff 533
kenjiArai 0:d4960fcea8ff 534 // Initialise the xLastWakeTime variable with the current time.
kenjiArai 0:d4960fcea8ff 535 xLastWakeTime = xTaskGetTickCount ();
kenjiArai 0:d4960fcea8ff 536 for( ;; )
kenjiArai 0:d4960fcea8ff 537 {
kenjiArai 0:d4960fcea8ff 538 // Wait for the next cycle.
kenjiArai 0:d4960fcea8ff 539 vTaskDelayUntil( &xLastWakeTime, xFrequency );
kenjiArai 0:d4960fcea8ff 540
kenjiArai 0:d4960fcea8ff 541 // Perform action here.
kenjiArai 0:d4960fcea8ff 542 }
kenjiArai 0:d4960fcea8ff 543 }
kenjiArai 0:d4960fcea8ff 544 </pre>
kenjiArai 0:d4960fcea8ff 545 * \defgroup vTaskDelayUntil vTaskDelayUntil
kenjiArai 0:d4960fcea8ff 546 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 547 */
kenjiArai 0:d4960fcea8ff 548 void vTaskDelayUntil( portTickType * const pxPreviousWakeTime, portTickType xTimeIncrement ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 549
kenjiArai 0:d4960fcea8ff 550 /**
kenjiArai 0:d4960fcea8ff 551 * task. h
kenjiArai 0:d4960fcea8ff 552 * <pre>unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );</pre>
kenjiArai 0:d4960fcea8ff 553 *
kenjiArai 0:d4960fcea8ff 554 * INCLUDE_xTaskPriorityGet must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 555 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 556 *
kenjiArai 0:d4960fcea8ff 557 * Obtain the priority of any task.
kenjiArai 0:d4960fcea8ff 558 *
kenjiArai 0:d4960fcea8ff 559 * @param pxTask Handle of the task to be queried. Passing a NULL
kenjiArai 0:d4960fcea8ff 560 * handle results in the priority of the calling task being returned.
kenjiArai 0:d4960fcea8ff 561 *
kenjiArai 0:d4960fcea8ff 562 * @return The priority of pxTask.
kenjiArai 0:d4960fcea8ff 563 *
kenjiArai 0:d4960fcea8ff 564 * Example usage:
kenjiArai 0:d4960fcea8ff 565 <pre>
kenjiArai 0:d4960fcea8ff 566 void vAFunction( void )
kenjiArai 0:d4960fcea8ff 567 {
kenjiArai 0:d4960fcea8ff 568 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 569
kenjiArai 0:d4960fcea8ff 570 // Create a task, storing the handle.
kenjiArai 0:d4960fcea8ff 571 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
kenjiArai 0:d4960fcea8ff 572
kenjiArai 0:d4960fcea8ff 573 // ...
kenjiArai 0:d4960fcea8ff 574
kenjiArai 0:d4960fcea8ff 575 // Use the handle to obtain the priority of the created task.
kenjiArai 0:d4960fcea8ff 576 // It was created with tskIDLE_PRIORITY, but may have changed
kenjiArai 0:d4960fcea8ff 577 // it itself.
kenjiArai 0:d4960fcea8ff 578 if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )
kenjiArai 0:d4960fcea8ff 579 {
kenjiArai 0:d4960fcea8ff 580 // The task has changed it's priority.
kenjiArai 0:d4960fcea8ff 581 }
kenjiArai 0:d4960fcea8ff 582
kenjiArai 0:d4960fcea8ff 583 // ...
kenjiArai 0:d4960fcea8ff 584
kenjiArai 0:d4960fcea8ff 585 // Is our priority higher than the created task?
kenjiArai 0:d4960fcea8ff 586 if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )
kenjiArai 0:d4960fcea8ff 587 {
kenjiArai 0:d4960fcea8ff 588 // Our priority (obtained using NULL handle) is higher.
kenjiArai 0:d4960fcea8ff 589 }
kenjiArai 0:d4960fcea8ff 590 }
kenjiArai 0:d4960fcea8ff 591 </pre>
kenjiArai 0:d4960fcea8ff 592 * \defgroup uxTaskPriorityGet uxTaskPriorityGet
kenjiArai 0:d4960fcea8ff 593 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 594 */
kenjiArai 0:d4960fcea8ff 595 unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 596
kenjiArai 0:d4960fcea8ff 597 /**
kenjiArai 0:d4960fcea8ff 598 * task. h
kenjiArai 0:d4960fcea8ff 599 * <pre>void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority );</pre>
kenjiArai 0:d4960fcea8ff 600 *
kenjiArai 0:d4960fcea8ff 601 * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 602 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 603 *
kenjiArai 0:d4960fcea8ff 604 * Set the priority of any task.
kenjiArai 0:d4960fcea8ff 605 *
kenjiArai 0:d4960fcea8ff 606 * A context switch will occur before the function returns if the priority
kenjiArai 0:d4960fcea8ff 607 * being set is higher than the currently executing task.
kenjiArai 0:d4960fcea8ff 608 *
kenjiArai 0:d4960fcea8ff 609 * @param pxTask Handle to the task for which the priority is being set.
kenjiArai 0:d4960fcea8ff 610 * Passing a NULL handle results in the priority of the calling task being set.
kenjiArai 0:d4960fcea8ff 611 *
kenjiArai 0:d4960fcea8ff 612 * @param uxNewPriority The priority to which the task will be set.
kenjiArai 0:d4960fcea8ff 613 *
kenjiArai 0:d4960fcea8ff 614 * Example usage:
kenjiArai 0:d4960fcea8ff 615 <pre>
kenjiArai 0:d4960fcea8ff 616 void vAFunction( void )
kenjiArai 0:d4960fcea8ff 617 {
kenjiArai 0:d4960fcea8ff 618 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 619
kenjiArai 0:d4960fcea8ff 620 // Create a task, storing the handle.
kenjiArai 0:d4960fcea8ff 621 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
kenjiArai 0:d4960fcea8ff 622
kenjiArai 0:d4960fcea8ff 623 // ...
kenjiArai 0:d4960fcea8ff 624
kenjiArai 0:d4960fcea8ff 625 // Use the handle to raise the priority of the created task.
kenjiArai 0:d4960fcea8ff 626 vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );
kenjiArai 0:d4960fcea8ff 627
kenjiArai 0:d4960fcea8ff 628 // ...
kenjiArai 0:d4960fcea8ff 629
kenjiArai 0:d4960fcea8ff 630 // Use a NULL handle to raise our priority to the same value.
kenjiArai 0:d4960fcea8ff 631 vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );
kenjiArai 0:d4960fcea8ff 632 }
kenjiArai 0:d4960fcea8ff 633 </pre>
kenjiArai 0:d4960fcea8ff 634 * \defgroup vTaskPrioritySet vTaskPrioritySet
kenjiArai 0:d4960fcea8ff 635 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 636 */
kenjiArai 0:d4960fcea8ff 637 void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 638
kenjiArai 0:d4960fcea8ff 639 /**
kenjiArai 0:d4960fcea8ff 640 * task. h
kenjiArai 0:d4960fcea8ff 641 * <pre>void vTaskSuspend( xTaskHandle pxTaskToSuspend );</pre>
kenjiArai 0:d4960fcea8ff 642 *
kenjiArai 0:d4960fcea8ff 643 * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 644 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 645 *
kenjiArai 0:d4960fcea8ff 646 * Suspend any task. When suspended a task will never get any microcontroller
kenjiArai 0:d4960fcea8ff 647 * processing time, no matter what its priority.
kenjiArai 0:d4960fcea8ff 648 *
kenjiArai 0:d4960fcea8ff 649 * Calls to vTaskSuspend are not accumulative -
kenjiArai 0:d4960fcea8ff 650 * i.e. calling vTaskSuspend () twice on the same task still only requires one
kenjiArai 0:d4960fcea8ff 651 * call to vTaskResume () to ready the suspended task.
kenjiArai 0:d4960fcea8ff 652 *
kenjiArai 0:d4960fcea8ff 653 * @param pxTaskToSuspend Handle to the task being suspended. Passing a NULL
kenjiArai 0:d4960fcea8ff 654 * handle will cause the calling task to be suspended.
kenjiArai 0:d4960fcea8ff 655 *
kenjiArai 0:d4960fcea8ff 656 * Example usage:
kenjiArai 0:d4960fcea8ff 657 <pre>
kenjiArai 0:d4960fcea8ff 658 void vAFunction( void )
kenjiArai 0:d4960fcea8ff 659 {
kenjiArai 0:d4960fcea8ff 660 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 661
kenjiArai 0:d4960fcea8ff 662 // Create a task, storing the handle.
kenjiArai 0:d4960fcea8ff 663 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
kenjiArai 0:d4960fcea8ff 664
kenjiArai 0:d4960fcea8ff 665 // ...
kenjiArai 0:d4960fcea8ff 666
kenjiArai 0:d4960fcea8ff 667 // Use the handle to suspend the created task.
kenjiArai 0:d4960fcea8ff 668 vTaskSuspend( xHandle );
kenjiArai 0:d4960fcea8ff 669
kenjiArai 0:d4960fcea8ff 670 // ...
kenjiArai 0:d4960fcea8ff 671
kenjiArai 0:d4960fcea8ff 672 // The created task will not run during this period, unless
kenjiArai 0:d4960fcea8ff 673 // another task calls vTaskResume( xHandle ).
kenjiArai 0:d4960fcea8ff 674
kenjiArai 0:d4960fcea8ff 675 //...
kenjiArai 0:d4960fcea8ff 676
kenjiArai 0:d4960fcea8ff 677
kenjiArai 0:d4960fcea8ff 678 // Suspend ourselves.
kenjiArai 0:d4960fcea8ff 679 vTaskSuspend( NULL );
kenjiArai 0:d4960fcea8ff 680
kenjiArai 0:d4960fcea8ff 681 // We cannot get here unless another task calls vTaskResume
kenjiArai 0:d4960fcea8ff 682 // with our handle as the parameter.
kenjiArai 0:d4960fcea8ff 683 }
kenjiArai 0:d4960fcea8ff 684 </pre>
kenjiArai 0:d4960fcea8ff 685 * \defgroup vTaskSuspend vTaskSuspend
kenjiArai 0:d4960fcea8ff 686 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 687 */
kenjiArai 0:d4960fcea8ff 688 void vTaskSuspend( xTaskHandle pxTaskToSuspend ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 689
kenjiArai 0:d4960fcea8ff 690 /**
kenjiArai 0:d4960fcea8ff 691 * task. h
kenjiArai 0:d4960fcea8ff 692 * <pre>void vTaskResume( xTaskHandle pxTaskToResume );</pre>
kenjiArai 0:d4960fcea8ff 693 *
kenjiArai 0:d4960fcea8ff 694 * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available.
kenjiArai 0:d4960fcea8ff 695 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 696 *
kenjiArai 0:d4960fcea8ff 697 * Resumes a suspended task.
kenjiArai 0:d4960fcea8ff 698 *
kenjiArai 0:d4960fcea8ff 699 * A task that has been suspended by one of more calls to vTaskSuspend ()
kenjiArai 0:d4960fcea8ff 700 * will be made available for running again by a single call to
kenjiArai 0:d4960fcea8ff 701 * vTaskResume ().
kenjiArai 0:d4960fcea8ff 702 *
kenjiArai 0:d4960fcea8ff 703 * @param pxTaskToResume Handle to the task being readied.
kenjiArai 0:d4960fcea8ff 704 *
kenjiArai 0:d4960fcea8ff 705 * Example usage:
kenjiArai 0:d4960fcea8ff 706 <pre>
kenjiArai 0:d4960fcea8ff 707 void vAFunction( void )
kenjiArai 0:d4960fcea8ff 708 {
kenjiArai 0:d4960fcea8ff 709 xTaskHandle xHandle;
kenjiArai 0:d4960fcea8ff 710
kenjiArai 0:d4960fcea8ff 711 // Create a task, storing the handle.
kenjiArai 0:d4960fcea8ff 712 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );
kenjiArai 0:d4960fcea8ff 713
kenjiArai 0:d4960fcea8ff 714 // ...
kenjiArai 0:d4960fcea8ff 715
kenjiArai 0:d4960fcea8ff 716 // Use the handle to suspend the created task.
kenjiArai 0:d4960fcea8ff 717 vTaskSuspend( xHandle );
kenjiArai 0:d4960fcea8ff 718
kenjiArai 0:d4960fcea8ff 719 // ...
kenjiArai 0:d4960fcea8ff 720
kenjiArai 0:d4960fcea8ff 721 // The created task will not run during this period, unless
kenjiArai 0:d4960fcea8ff 722 // another task calls vTaskResume( xHandle ).
kenjiArai 0:d4960fcea8ff 723
kenjiArai 0:d4960fcea8ff 724 //...
kenjiArai 0:d4960fcea8ff 725
kenjiArai 0:d4960fcea8ff 726
kenjiArai 0:d4960fcea8ff 727 // Resume the suspended task ourselves.
kenjiArai 0:d4960fcea8ff 728 vTaskResume( xHandle );
kenjiArai 0:d4960fcea8ff 729
kenjiArai 0:d4960fcea8ff 730 // The created task will once again get microcontroller processing
kenjiArai 0:d4960fcea8ff 731 // time in accordance with it priority within the system.
kenjiArai 0:d4960fcea8ff 732 }
kenjiArai 0:d4960fcea8ff 733 </pre>
kenjiArai 0:d4960fcea8ff 734 * \defgroup vTaskResume vTaskResume
kenjiArai 0:d4960fcea8ff 735 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 736 */
kenjiArai 0:d4960fcea8ff 737 void vTaskResume( xTaskHandle pxTaskToResume ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 738
kenjiArai 0:d4960fcea8ff 739 /**
kenjiArai 0:d4960fcea8ff 740 * task. h
kenjiArai 0:d4960fcea8ff 741 * <pre>void xTaskResumeFromISR( xTaskHandle pxTaskToResume );</pre>
kenjiArai 0:d4960fcea8ff 742 *
kenjiArai 0:d4960fcea8ff 743 * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be
kenjiArai 0:d4960fcea8ff 744 * available. See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 745 *
kenjiArai 0:d4960fcea8ff 746 * An implementation of vTaskResume() that can be called from within an ISR.
kenjiArai 0:d4960fcea8ff 747 *
kenjiArai 0:d4960fcea8ff 748 * A task that has been suspended by one of more calls to vTaskSuspend ()
kenjiArai 0:d4960fcea8ff 749 * will be made available for running again by a single call to
kenjiArai 0:d4960fcea8ff 750 * xTaskResumeFromISR ().
kenjiArai 0:d4960fcea8ff 751 *
kenjiArai 0:d4960fcea8ff 752 * @param pxTaskToResume Handle to the task being readied.
kenjiArai 0:d4960fcea8ff 753 *
kenjiArai 0:d4960fcea8ff 754 * \defgroup vTaskResumeFromISR vTaskResumeFromISR
kenjiArai 0:d4960fcea8ff 755 * \ingroup TaskCtrl
kenjiArai 0:d4960fcea8ff 756 */
kenjiArai 0:d4960fcea8ff 757 portBASE_TYPE xTaskResumeFromISR( xTaskHandle pxTaskToResume ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 758
kenjiArai 0:d4960fcea8ff 759 /*-----------------------------------------------------------
kenjiArai 0:d4960fcea8ff 760 * SCHEDULER CONTROL
kenjiArai 0:d4960fcea8ff 761 *----------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 762
kenjiArai 0:d4960fcea8ff 763 /**
kenjiArai 0:d4960fcea8ff 764 * task. h
kenjiArai 0:d4960fcea8ff 765 * <pre>void vTaskStartScheduler( void );</pre>
kenjiArai 0:d4960fcea8ff 766 *
kenjiArai 0:d4960fcea8ff 767 * Starts the real time kernel tick processing. After calling the kernel
kenjiArai 0:d4960fcea8ff 768 * has control over which tasks are executed and when. This function
kenjiArai 0:d4960fcea8ff 769 * does not return until an executing task calls vTaskEndScheduler ().
kenjiArai 0:d4960fcea8ff 770 *
kenjiArai 0:d4960fcea8ff 771 * At least one task should be created via a call to xTaskCreate ()
kenjiArai 0:d4960fcea8ff 772 * before calling vTaskStartScheduler (). The idle task is created
kenjiArai 0:d4960fcea8ff 773 * automatically when the first application task is created.
kenjiArai 0:d4960fcea8ff 774 *
kenjiArai 0:d4960fcea8ff 775 * See the demo application file main.c for an example of creating
kenjiArai 0:d4960fcea8ff 776 * tasks and starting the kernel.
kenjiArai 0:d4960fcea8ff 777 *
kenjiArai 0:d4960fcea8ff 778 * Example usage:
kenjiArai 0:d4960fcea8ff 779 <pre>
kenjiArai 0:d4960fcea8ff 780 void vAFunction( void )
kenjiArai 0:d4960fcea8ff 781 {
kenjiArai 0:d4960fcea8ff 782 // Create at least one task before starting the kernel.
kenjiArai 0:d4960fcea8ff 783 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 784
kenjiArai 0:d4960fcea8ff 785 // Start the real time kernel with preemption.
kenjiArai 0:d4960fcea8ff 786 vTaskStartScheduler ();
kenjiArai 0:d4960fcea8ff 787
kenjiArai 0:d4960fcea8ff 788 // Will not get here unless a task calls vTaskEndScheduler ()
kenjiArai 0:d4960fcea8ff 789 }
kenjiArai 0:d4960fcea8ff 790 </pre>
kenjiArai 0:d4960fcea8ff 791 *
kenjiArai 0:d4960fcea8ff 792 * \defgroup vTaskStartScheduler vTaskStartScheduler
kenjiArai 0:d4960fcea8ff 793 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 794 */
kenjiArai 0:d4960fcea8ff 795 void vTaskStartScheduler( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 796
kenjiArai 0:d4960fcea8ff 797 /**
kenjiArai 0:d4960fcea8ff 798 * task. h
kenjiArai 0:d4960fcea8ff 799 * <pre>void vTaskEndScheduler( void );</pre>
kenjiArai 0:d4960fcea8ff 800 *
kenjiArai 0:d4960fcea8ff 801 * Stops the real time kernel tick. All created tasks will be automatically
kenjiArai 0:d4960fcea8ff 802 * deleted and multitasking (either preemptive or cooperative) will
kenjiArai 0:d4960fcea8ff 803 * stop. Execution then resumes from the point where vTaskStartScheduler ()
kenjiArai 0:d4960fcea8ff 804 * was called, as if vTaskStartScheduler () had just returned.
kenjiArai 0:d4960fcea8ff 805 *
kenjiArai 0:d4960fcea8ff 806 * See the demo application file main. c in the demo/PC directory for an
kenjiArai 0:d4960fcea8ff 807 * example that uses vTaskEndScheduler ().
kenjiArai 0:d4960fcea8ff 808 *
kenjiArai 0:d4960fcea8ff 809 * vTaskEndScheduler () requires an exit function to be defined within the
kenjiArai 0:d4960fcea8ff 810 * portable layer (see vPortEndScheduler () in port. c for the PC port). This
kenjiArai 0:d4960fcea8ff 811 * performs hardware specific operations such as stopping the kernel tick.
kenjiArai 0:d4960fcea8ff 812 *
kenjiArai 0:d4960fcea8ff 813 * vTaskEndScheduler () will cause all of the resources allocated by the
kenjiArai 0:d4960fcea8ff 814 * kernel to be freed - but will not free resources allocated by application
kenjiArai 0:d4960fcea8ff 815 * tasks.
kenjiArai 0:d4960fcea8ff 816 *
kenjiArai 0:d4960fcea8ff 817 * Example usage:
kenjiArai 0:d4960fcea8ff 818 <pre>
kenjiArai 0:d4960fcea8ff 819 void vTaskCode( void * pvParameters )
kenjiArai 0:d4960fcea8ff 820 {
kenjiArai 0:d4960fcea8ff 821 for( ;; )
kenjiArai 0:d4960fcea8ff 822 {
kenjiArai 0:d4960fcea8ff 823 // Task code goes here.
kenjiArai 0:d4960fcea8ff 824
kenjiArai 0:d4960fcea8ff 825 // At some point we want to end the real time kernel processing
kenjiArai 0:d4960fcea8ff 826 // so call ...
kenjiArai 0:d4960fcea8ff 827 vTaskEndScheduler ();
kenjiArai 0:d4960fcea8ff 828 }
kenjiArai 0:d4960fcea8ff 829 }
kenjiArai 0:d4960fcea8ff 830
kenjiArai 0:d4960fcea8ff 831 void vAFunction( void )
kenjiArai 0:d4960fcea8ff 832 {
kenjiArai 0:d4960fcea8ff 833 // Create at least one task before starting the kernel.
kenjiArai 0:d4960fcea8ff 834 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
kenjiArai 0:d4960fcea8ff 835
kenjiArai 0:d4960fcea8ff 836 // Start the real time kernel with preemption.
kenjiArai 0:d4960fcea8ff 837 vTaskStartScheduler ();
kenjiArai 0:d4960fcea8ff 838
kenjiArai 0:d4960fcea8ff 839 // Will only get here when the vTaskCode () task has called
kenjiArai 0:d4960fcea8ff 840 // vTaskEndScheduler (). When we get here we are back to single task
kenjiArai 0:d4960fcea8ff 841 // execution.
kenjiArai 0:d4960fcea8ff 842 }
kenjiArai 0:d4960fcea8ff 843 </pre>
kenjiArai 0:d4960fcea8ff 844 *
kenjiArai 0:d4960fcea8ff 845 * \defgroup vTaskEndScheduler vTaskEndScheduler
kenjiArai 0:d4960fcea8ff 846 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 847 */
kenjiArai 0:d4960fcea8ff 848 void vTaskEndScheduler( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 849
kenjiArai 0:d4960fcea8ff 850 /**
kenjiArai 0:d4960fcea8ff 851 * task. h
kenjiArai 0:d4960fcea8ff 852 * <pre>void vTaskSuspendAll( void );</pre>
kenjiArai 0:d4960fcea8ff 853 *
kenjiArai 0:d4960fcea8ff 854 * Suspends all real time kernel activity while keeping interrupts (including the
kenjiArai 0:d4960fcea8ff 855 * kernel tick) enabled.
kenjiArai 0:d4960fcea8ff 856 *
kenjiArai 0:d4960fcea8ff 857 * After calling vTaskSuspendAll () the calling task will continue to execute
kenjiArai 0:d4960fcea8ff 858 * without risk of being swapped out until a call to xTaskResumeAll () has been
kenjiArai 0:d4960fcea8ff 859 * made.
kenjiArai 0:d4960fcea8ff 860 *
kenjiArai 0:d4960fcea8ff 861 * API functions that have the potential to cause a context switch (for example,
kenjiArai 0:d4960fcea8ff 862 * vTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler
kenjiArai 0:d4960fcea8ff 863 * is suspended.
kenjiArai 0:d4960fcea8ff 864 *
kenjiArai 0:d4960fcea8ff 865 * Example usage:
kenjiArai 0:d4960fcea8ff 866 <pre>
kenjiArai 0:d4960fcea8ff 867 void vTask1( void * pvParameters )
kenjiArai 0:d4960fcea8ff 868 {
kenjiArai 0:d4960fcea8ff 869 for( ;; )
kenjiArai 0:d4960fcea8ff 870 {
kenjiArai 0:d4960fcea8ff 871 // Task code goes here.
kenjiArai 0:d4960fcea8ff 872
kenjiArai 0:d4960fcea8ff 873 // ...
kenjiArai 0:d4960fcea8ff 874
kenjiArai 0:d4960fcea8ff 875 // At some point the task wants to perform a long operation during
kenjiArai 0:d4960fcea8ff 876 // which it does not want to get swapped out. It cannot use
kenjiArai 0:d4960fcea8ff 877 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
kenjiArai 0:d4960fcea8ff 878 // operation may cause interrupts to be missed - including the
kenjiArai 0:d4960fcea8ff 879 // ticks.
kenjiArai 0:d4960fcea8ff 880
kenjiArai 0:d4960fcea8ff 881 // Prevent the real time kernel swapping out the task.
kenjiArai 0:d4960fcea8ff 882 vTaskSuspendAll ();
kenjiArai 0:d4960fcea8ff 883
kenjiArai 0:d4960fcea8ff 884 // Perform the operation here. There is no need to use critical
kenjiArai 0:d4960fcea8ff 885 // sections as we have all the microcontroller processing time.
kenjiArai 0:d4960fcea8ff 886 // During this time interrupts will still operate and the kernel
kenjiArai 0:d4960fcea8ff 887 // tick count will be maintained.
kenjiArai 0:d4960fcea8ff 888
kenjiArai 0:d4960fcea8ff 889 // ...
kenjiArai 0:d4960fcea8ff 890
kenjiArai 0:d4960fcea8ff 891 // The operation is complete. Restart the kernel.
kenjiArai 0:d4960fcea8ff 892 xTaskResumeAll ();
kenjiArai 0:d4960fcea8ff 893 }
kenjiArai 0:d4960fcea8ff 894 }
kenjiArai 0:d4960fcea8ff 895 </pre>
kenjiArai 0:d4960fcea8ff 896 * \defgroup vTaskSuspendAll vTaskSuspendAll
kenjiArai 0:d4960fcea8ff 897 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 898 */
kenjiArai 0:d4960fcea8ff 899 void vTaskSuspendAll( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 900
kenjiArai 0:d4960fcea8ff 901 /**
kenjiArai 0:d4960fcea8ff 902 * task. h
kenjiArai 0:d4960fcea8ff 903 * <pre>char xTaskResumeAll( void );</pre>
kenjiArai 0:d4960fcea8ff 904 *
kenjiArai 0:d4960fcea8ff 905 * Resumes real time kernel activity following a call to vTaskSuspendAll ().
kenjiArai 0:d4960fcea8ff 906 * After a call to vTaskSuspendAll () the kernel will take control of which
kenjiArai 0:d4960fcea8ff 907 * task is executing at any time.
kenjiArai 0:d4960fcea8ff 908 *
kenjiArai 0:d4960fcea8ff 909 * @return If resuming the scheduler caused a context switch then pdTRUE is
kenjiArai 0:d4960fcea8ff 910 * returned, otherwise pdFALSE is returned.
kenjiArai 0:d4960fcea8ff 911 *
kenjiArai 0:d4960fcea8ff 912 * Example usage:
kenjiArai 0:d4960fcea8ff 913 <pre>
kenjiArai 0:d4960fcea8ff 914 void vTask1( void * pvParameters )
kenjiArai 0:d4960fcea8ff 915 {
kenjiArai 0:d4960fcea8ff 916 for( ;; )
kenjiArai 0:d4960fcea8ff 917 {
kenjiArai 0:d4960fcea8ff 918 // Task code goes here.
kenjiArai 0:d4960fcea8ff 919
kenjiArai 0:d4960fcea8ff 920 // ...
kenjiArai 0:d4960fcea8ff 921
kenjiArai 0:d4960fcea8ff 922 // At some point the task wants to perform a long operation during
kenjiArai 0:d4960fcea8ff 923 // which it does not want to get swapped out. It cannot use
kenjiArai 0:d4960fcea8ff 924 // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the
kenjiArai 0:d4960fcea8ff 925 // operation may cause interrupts to be missed - including the
kenjiArai 0:d4960fcea8ff 926 // ticks.
kenjiArai 0:d4960fcea8ff 927
kenjiArai 0:d4960fcea8ff 928 // Prevent the real time kernel swapping out the task.
kenjiArai 0:d4960fcea8ff 929 vTaskSuspendAll ();
kenjiArai 0:d4960fcea8ff 930
kenjiArai 0:d4960fcea8ff 931 // Perform the operation here. There is no need to use critical
kenjiArai 0:d4960fcea8ff 932 // sections as we have all the microcontroller processing time.
kenjiArai 0:d4960fcea8ff 933 // During this time interrupts will still operate and the real
kenjiArai 0:d4960fcea8ff 934 // time kernel tick count will be maintained.
kenjiArai 0:d4960fcea8ff 935
kenjiArai 0:d4960fcea8ff 936 // ...
kenjiArai 0:d4960fcea8ff 937
kenjiArai 0:d4960fcea8ff 938 // The operation is complete. Restart the kernel. We want to force
kenjiArai 0:d4960fcea8ff 939 // a context switch - but there is no point if resuming the scheduler
kenjiArai 0:d4960fcea8ff 940 // caused a context switch already.
kenjiArai 0:d4960fcea8ff 941 if( !xTaskResumeAll () )
kenjiArai 0:d4960fcea8ff 942 {
kenjiArai 0:d4960fcea8ff 943 taskYIELD ();
kenjiArai 0:d4960fcea8ff 944 }
kenjiArai 0:d4960fcea8ff 945 }
kenjiArai 0:d4960fcea8ff 946 }
kenjiArai 0:d4960fcea8ff 947 </pre>
kenjiArai 0:d4960fcea8ff 948 * \defgroup xTaskResumeAll xTaskResumeAll
kenjiArai 0:d4960fcea8ff 949 * \ingroup SchedulerControl
kenjiArai 0:d4960fcea8ff 950 */
kenjiArai 0:d4960fcea8ff 951 signed portBASE_TYPE xTaskResumeAll( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 952
kenjiArai 0:d4960fcea8ff 953 /**
kenjiArai 0:d4960fcea8ff 954 * task. h
kenjiArai 0:d4960fcea8ff 955 * <pre>signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask );</pre>
kenjiArai 0:d4960fcea8ff 956 *
kenjiArai 0:d4960fcea8ff 957 * Utility task that simply returns pdTRUE if the task referenced by xTask is
kenjiArai 0:d4960fcea8ff 958 * currently in the Suspended state, or pdFALSE if the task referenced by xTask
kenjiArai 0:d4960fcea8ff 959 * is in any other state.
kenjiArai 0:d4960fcea8ff 960 *
kenjiArai 0:d4960fcea8ff 961 */
kenjiArai 0:d4960fcea8ff 962 signed portBASE_TYPE xTaskIsTaskSuspended( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 963
kenjiArai 0:d4960fcea8ff 964 /*-----------------------------------------------------------
kenjiArai 0:d4960fcea8ff 965 * TASK UTILITIES
kenjiArai 0:d4960fcea8ff 966 *----------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 967
kenjiArai 0:d4960fcea8ff 968 /**
kenjiArai 0:d4960fcea8ff 969 * task. h
kenjiArai 0:d4960fcea8ff 970 * <PRE>volatile portTickType xTaskGetTickCount( void );</PRE>
kenjiArai 0:d4960fcea8ff 971 *
kenjiArai 0:d4960fcea8ff 972 * @return The count of ticks since vTaskStartScheduler was called.
kenjiArai 0:d4960fcea8ff 973 *
kenjiArai 0:d4960fcea8ff 974 * \page xTaskGetTickCount xTaskGetTickCount
kenjiArai 0:d4960fcea8ff 975 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 976 */
kenjiArai 0:d4960fcea8ff 977 portTickType xTaskGetTickCount( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 978
kenjiArai 0:d4960fcea8ff 979 /**
kenjiArai 0:d4960fcea8ff 980 * task. h
kenjiArai 0:d4960fcea8ff 981 * <PRE>unsigned short uxTaskGetNumberOfTasks( void );</PRE>
kenjiArai 0:d4960fcea8ff 982 *
kenjiArai 0:d4960fcea8ff 983 * @return The number of tasks that the real time kernel is currently managing.
kenjiArai 0:d4960fcea8ff 984 * This includes all ready, blocked and suspended tasks. A task that
kenjiArai 0:d4960fcea8ff 985 * has been deleted but not yet freed by the idle task will also be
kenjiArai 0:d4960fcea8ff 986 * included in the count.
kenjiArai 0:d4960fcea8ff 987 *
kenjiArai 0:d4960fcea8ff 988 * \page uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks
kenjiArai 0:d4960fcea8ff 989 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 990 */
kenjiArai 0:d4960fcea8ff 991 unsigned portBASE_TYPE uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 992
kenjiArai 0:d4960fcea8ff 993 /**
kenjiArai 0:d4960fcea8ff 994 * task. h
kenjiArai 0:d4960fcea8ff 995 * <PRE>void vTaskList( char *pcWriteBuffer );</PRE>
kenjiArai 0:d4960fcea8ff 996 *
kenjiArai 0:d4960fcea8ff 997 * configUSE_TRACE_FACILITY must be defined as 1 for this function to be
kenjiArai 0:d4960fcea8ff 998 * available. See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 999 *
kenjiArai 0:d4960fcea8ff 1000 * NOTE: This function will disable interrupts for its duration. It is
kenjiArai 0:d4960fcea8ff 1001 * not intended for normal application runtime use but as a debug aid.
kenjiArai 0:d4960fcea8ff 1002 *
kenjiArai 0:d4960fcea8ff 1003 * Lists all the current tasks, along with their current state and stack
kenjiArai 0:d4960fcea8ff 1004 * usage high water mark.
kenjiArai 0:d4960fcea8ff 1005 *
kenjiArai 0:d4960fcea8ff 1006 * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or
kenjiArai 0:d4960fcea8ff 1007 * suspended ('S').
kenjiArai 0:d4960fcea8ff 1008 *
kenjiArai 0:d4960fcea8ff 1009 * @param pcWriteBuffer A buffer into which the above mentioned details
kenjiArai 0:d4960fcea8ff 1010 * will be written, in ascii form. This buffer is assumed to be large
kenjiArai 0:d4960fcea8ff 1011 * enough to contain the generated report. Approximately 40 bytes per
kenjiArai 0:d4960fcea8ff 1012 * task should be sufficient.
kenjiArai 0:d4960fcea8ff 1013 *
kenjiArai 0:d4960fcea8ff 1014 * \page vTaskList vTaskList
kenjiArai 0:d4960fcea8ff 1015 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 1016 */
kenjiArai 0:d4960fcea8ff 1017 void vTaskList( signed char *pcWriteBuffer ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1018
kenjiArai 0:d4960fcea8ff 1019 /**
kenjiArai 0:d4960fcea8ff 1020 * task. h
kenjiArai 0:d4960fcea8ff 1021 * <PRE>void vTaskGetRunTimeStats( char *pcWriteBuffer );</PRE>
kenjiArai 0:d4960fcea8ff 1022 *
kenjiArai 0:d4960fcea8ff 1023 * configGENERATE_RUN_TIME_STATS must be defined as 1 for this function
kenjiArai 0:d4960fcea8ff 1024 * to be available. The application must also then provide definitions
kenjiArai 0:d4960fcea8ff 1025 * for portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and
kenjiArai 0:d4960fcea8ff 1026 * portGET_RUN_TIME_COUNTER_VALUE to configure a peripheral timer/counter
kenjiArai 0:d4960fcea8ff 1027 * and return the timers current count value respectively. The counter
kenjiArai 0:d4960fcea8ff 1028 * should be at least 10 times the frequency of the tick count.
kenjiArai 0:d4960fcea8ff 1029 *
kenjiArai 0:d4960fcea8ff 1030 * NOTE: This function will disable interrupts for its duration. It is
kenjiArai 0:d4960fcea8ff 1031 * not intended for normal application runtime use but as a debug aid.
kenjiArai 0:d4960fcea8ff 1032 *
kenjiArai 0:d4960fcea8ff 1033 * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total
kenjiArai 0:d4960fcea8ff 1034 * accumulated execution time being stored for each task. The resolution
kenjiArai 0:d4960fcea8ff 1035 * of the accumulated time value depends on the frequency of the timer
kenjiArai 0:d4960fcea8ff 1036 * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.
kenjiArai 0:d4960fcea8ff 1037 * Calling vTaskGetRunTimeStats() writes the total execution time of each
kenjiArai 0:d4960fcea8ff 1038 * task into a buffer, both as an absolute count value and as a percentage
kenjiArai 0:d4960fcea8ff 1039 * of the total system execution time.
kenjiArai 0:d4960fcea8ff 1040 *
kenjiArai 0:d4960fcea8ff 1041 * @param pcWriteBuffer A buffer into which the execution times will be
kenjiArai 0:d4960fcea8ff 1042 * written, in ascii form. This buffer is assumed to be large enough to
kenjiArai 0:d4960fcea8ff 1043 * contain the generated report. Approximately 40 bytes per task should
kenjiArai 0:d4960fcea8ff 1044 * be sufficient.
kenjiArai 0:d4960fcea8ff 1045 *
kenjiArai 0:d4960fcea8ff 1046 * \page vTaskGetRunTimeStats vTaskGetRunTimeStats
kenjiArai 0:d4960fcea8ff 1047 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 1048 */
kenjiArai 0:d4960fcea8ff 1049 void vTaskGetRunTimeStats( signed char *pcWriteBuffer ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1050
kenjiArai 0:d4960fcea8ff 1051 /**
kenjiArai 0:d4960fcea8ff 1052 * task. h
kenjiArai 0:d4960fcea8ff 1053 * <PRE>void vTaskStartTrace( char * pcBuffer, unsigned portBASE_TYPE uxBufferSize );</PRE>
kenjiArai 0:d4960fcea8ff 1054 *
kenjiArai 0:d4960fcea8ff 1055 * Starts a real time kernel activity trace. The trace logs the identity of
kenjiArai 0:d4960fcea8ff 1056 * which task is running when.
kenjiArai 0:d4960fcea8ff 1057 *
kenjiArai 0:d4960fcea8ff 1058 * The trace file is stored in binary format. A separate DOS utility called
kenjiArai 0:d4960fcea8ff 1059 * convtrce.exe is used to convert this into a tab delimited text file which
kenjiArai 0:d4960fcea8ff 1060 * can be viewed and plotted in a spread sheet.
kenjiArai 0:d4960fcea8ff 1061 *
kenjiArai 0:d4960fcea8ff 1062 * @param pcBuffer The buffer into which the trace will be written.
kenjiArai 0:d4960fcea8ff 1063 *
kenjiArai 0:d4960fcea8ff 1064 * @param ulBufferSize The size of pcBuffer in bytes. The trace will continue
kenjiArai 0:d4960fcea8ff 1065 * until either the buffer in full, or ulTaskEndTrace () is called.
kenjiArai 0:d4960fcea8ff 1066 *
kenjiArai 0:d4960fcea8ff 1067 * \page vTaskStartTrace vTaskStartTrace
kenjiArai 0:d4960fcea8ff 1068 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 1069 */
kenjiArai 0:d4960fcea8ff 1070 void vTaskStartTrace( signed char * pcBuffer, unsigned long ulBufferSize ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1071
kenjiArai 0:d4960fcea8ff 1072 /**
kenjiArai 0:d4960fcea8ff 1073 * task. h
kenjiArai 0:d4960fcea8ff 1074 * <PRE>unsigned long ulTaskEndTrace( void );</PRE>
kenjiArai 0:d4960fcea8ff 1075 *
kenjiArai 0:d4960fcea8ff 1076 * Stops a kernel activity trace. See vTaskStartTrace ().
kenjiArai 0:d4960fcea8ff 1077 *
kenjiArai 0:d4960fcea8ff 1078 * @return The number of bytes that have been written into the trace buffer.
kenjiArai 0:d4960fcea8ff 1079 *
kenjiArai 0:d4960fcea8ff 1080 * \page usTaskEndTrace usTaskEndTrace
kenjiArai 0:d4960fcea8ff 1081 * \ingroup TaskUtils
kenjiArai 0:d4960fcea8ff 1082 */
kenjiArai 0:d4960fcea8ff 1083 unsigned long ulTaskEndTrace( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1084
kenjiArai 0:d4960fcea8ff 1085 /**
kenjiArai 0:d4960fcea8ff 1086 * task.h
kenjiArai 0:d4960fcea8ff 1087 * <PRE>unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask );</PRE>
kenjiArai 0:d4960fcea8ff 1088 *
kenjiArai 0:d4960fcea8ff 1089 * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for
kenjiArai 0:d4960fcea8ff 1090 * this function to be available.
kenjiArai 0:d4960fcea8ff 1091 *
kenjiArai 0:d4960fcea8ff 1092 * Returns the high water mark of the stack associated with xTask. That is,
kenjiArai 0:d4960fcea8ff 1093 * the minimum free stack space there has been (in bytes) since the task
kenjiArai 0:d4960fcea8ff 1094 * started. The smaller the returned number the closer the task has come
kenjiArai 0:d4960fcea8ff 1095 * to overflowing its stack.
kenjiArai 0:d4960fcea8ff 1096 *
kenjiArai 0:d4960fcea8ff 1097 * @param xTask Handle of the task associated with the stack to be checked.
kenjiArai 0:d4960fcea8ff 1098 * Set xTask to NULL to check the stack of the calling task.
kenjiArai 0:d4960fcea8ff 1099 *
kenjiArai 0:d4960fcea8ff 1100 * @return The smallest amount of free stack space there has been (in bytes)
kenjiArai 0:d4960fcea8ff 1101 * since the task referenced by xTask was created.
kenjiArai 0:d4960fcea8ff 1102 */
kenjiArai 0:d4960fcea8ff 1103 unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1104
kenjiArai 0:d4960fcea8ff 1105 /**
kenjiArai 0:d4960fcea8ff 1106 * task.h
kenjiArai 0:d4960fcea8ff 1107 * <pre>void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );</pre>
kenjiArai 0:d4960fcea8ff 1108 *
kenjiArai 0:d4960fcea8ff 1109 * Sets pxHookFunction to be the task hook function used by the task xTask.
kenjiArai 0:d4960fcea8ff 1110 * Passing xTask as NULL has the effect of setting the calling tasks hook
kenjiArai 0:d4960fcea8ff 1111 * function.
kenjiArai 0:d4960fcea8ff 1112 */
kenjiArai 0:d4960fcea8ff 1113 void vTaskSetApplicationTaskTag( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1114
kenjiArai 0:d4960fcea8ff 1115 /**
kenjiArai 0:d4960fcea8ff 1116 * task.h
kenjiArai 0:d4960fcea8ff 1117 * <pre>void xTaskGetApplicationTaskTag( xTaskHandle xTask );</pre>
kenjiArai 0:d4960fcea8ff 1118 *
kenjiArai 0:d4960fcea8ff 1119 * Returns the pxHookFunction value assigned to the task xTask.
kenjiArai 0:d4960fcea8ff 1120 */
kenjiArai 0:d4960fcea8ff 1121 pdTASK_HOOK_CODE xTaskGetApplicationTaskTag( xTaskHandle xTask ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1122
kenjiArai 0:d4960fcea8ff 1123 /**
kenjiArai 0:d4960fcea8ff 1124 * task.h
kenjiArai 0:d4960fcea8ff 1125 * <pre>portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, pdTASK_HOOK_CODE pxHookFunction );</pre>
kenjiArai 0:d4960fcea8ff 1126 *
kenjiArai 0:d4960fcea8ff 1127 * Calls the hook function associated with xTask. Passing xTask as NULL has
kenjiArai 0:d4960fcea8ff 1128 * the effect of calling the Running tasks (the calling task) hook function.
kenjiArai 0:d4960fcea8ff 1129 *
kenjiArai 0:d4960fcea8ff 1130 * pvParameter is passed to the hook function for the task to interpret as it
kenjiArai 0:d4960fcea8ff 1131 * wants.
kenjiArai 0:d4960fcea8ff 1132 */
kenjiArai 0:d4960fcea8ff 1133 portBASE_TYPE xTaskCallApplicationTaskHook( xTaskHandle xTask, void *pvParameter ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1134
kenjiArai 0:d4960fcea8ff 1135
kenjiArai 0:d4960fcea8ff 1136 /*-----------------------------------------------------------
kenjiArai 0:d4960fcea8ff 1137 * SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES
kenjiArai 0:d4960fcea8ff 1138 *----------------------------------------------------------*/
kenjiArai 0:d4960fcea8ff 1139
kenjiArai 0:d4960fcea8ff 1140 /*
kenjiArai 0:d4960fcea8ff 1141 * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY
kenjiArai 0:d4960fcea8ff 1142 * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS
kenjiArai 0:d4960fcea8ff 1143 * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
kenjiArai 0:d4960fcea8ff 1144 *
kenjiArai 0:d4960fcea8ff 1145 * Called from the real time kernel tick (either preemptive or cooperative),
kenjiArai 0:d4960fcea8ff 1146 * this increments the tick count and checks if any tasks that are blocked
kenjiArai 0:d4960fcea8ff 1147 * for a finite period required removing from a blocked list and placing on
kenjiArai 0:d4960fcea8ff 1148 * a ready list.
kenjiArai 0:d4960fcea8ff 1149 */
kenjiArai 0:d4960fcea8ff 1150 void vTaskIncrementTick( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1151
kenjiArai 0:d4960fcea8ff 1152 /*
kenjiArai 0:d4960fcea8ff 1153 * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
kenjiArai 0:d4960fcea8ff 1154 * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
kenjiArai 0:d4960fcea8ff 1155 *
kenjiArai 0:d4960fcea8ff 1156 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.
kenjiArai 0:d4960fcea8ff 1157 *
kenjiArai 0:d4960fcea8ff 1158 * Removes the calling task from the ready list and places it both
kenjiArai 0:d4960fcea8ff 1159 * on the list of tasks waiting for a particular event, and the
kenjiArai 0:d4960fcea8ff 1160 * list of delayed tasks. The task will be removed from both lists
kenjiArai 0:d4960fcea8ff 1161 * and replaced on the ready list should either the event occur (and
kenjiArai 0:d4960fcea8ff 1162 * there be no higher priority tasks waiting on the same event) or
kenjiArai 0:d4960fcea8ff 1163 * the delay period expires.
kenjiArai 0:d4960fcea8ff 1164 *
kenjiArai 0:d4960fcea8ff 1165 * @param pxEventList The list containing tasks that are blocked waiting
kenjiArai 0:d4960fcea8ff 1166 * for the event to occur.
kenjiArai 0:d4960fcea8ff 1167 *
kenjiArai 0:d4960fcea8ff 1168 * @param xTicksToWait The maximum amount of time that the task should wait
kenjiArai 0:d4960fcea8ff 1169 * for the event to occur. This is specified in kernel ticks,the constant
kenjiArai 0:d4960fcea8ff 1170 * portTICK_RATE_MS can be used to convert kernel ticks into a real time
kenjiArai 0:d4960fcea8ff 1171 * period.
kenjiArai 0:d4960fcea8ff 1172 */
kenjiArai 0:d4960fcea8ff 1173 void vTaskPlaceOnEventList( const xList * const pxEventList, portTickType xTicksToWait ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1174
kenjiArai 0:d4960fcea8ff 1175 /*
kenjiArai 0:d4960fcea8ff 1176 * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
kenjiArai 0:d4960fcea8ff 1177 * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
kenjiArai 0:d4960fcea8ff 1178 *
kenjiArai 0:d4960fcea8ff 1179 * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.
kenjiArai 0:d4960fcea8ff 1180 *
kenjiArai 0:d4960fcea8ff 1181 * Removes a task from both the specified event list and the list of blocked
kenjiArai 0:d4960fcea8ff 1182 * tasks, and places it on a ready queue.
kenjiArai 0:d4960fcea8ff 1183 *
kenjiArai 0:d4960fcea8ff 1184 * xTaskRemoveFromEventList () will be called if either an event occurs to
kenjiArai 0:d4960fcea8ff 1185 * unblock a task, or the block timeout period expires.
kenjiArai 0:d4960fcea8ff 1186 *
kenjiArai 0:d4960fcea8ff 1187 * @return pdTRUE if the task being removed has a higher priority than the task
kenjiArai 0:d4960fcea8ff 1188 * making the call, otherwise pdFALSE.
kenjiArai 0:d4960fcea8ff 1189 */
kenjiArai 0:d4960fcea8ff 1190 signed portBASE_TYPE xTaskRemoveFromEventList( const xList * const pxEventList ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1191
kenjiArai 0:d4960fcea8ff 1192 /*
kenjiArai 0:d4960fcea8ff 1193 * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS AN
kenjiArai 0:d4960fcea8ff 1194 * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
kenjiArai 0:d4960fcea8ff 1195 *
kenjiArai 0:d4960fcea8ff 1196 * INCLUDE_vTaskCleanUpResources and INCLUDE_vTaskSuspend must be defined as 1
kenjiArai 0:d4960fcea8ff 1197 * for this function to be available.
kenjiArai 0:d4960fcea8ff 1198 * See the configuration section for more information.
kenjiArai 0:d4960fcea8ff 1199 *
kenjiArai 0:d4960fcea8ff 1200 * Empties the ready and delayed queues of task control blocks, freeing the
kenjiArai 0:d4960fcea8ff 1201 * memory allocated for the task control block and task stacks as it goes.
kenjiArai 0:d4960fcea8ff 1202 */
kenjiArai 0:d4960fcea8ff 1203 void vTaskCleanUpResources( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1204
kenjiArai 0:d4960fcea8ff 1205 /*
kenjiArai 0:d4960fcea8ff 1206 * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE. IT IS ONLY
kenjiArai 0:d4960fcea8ff 1207 * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS
kenjiArai 0:d4960fcea8ff 1208 * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.
kenjiArai 0:d4960fcea8ff 1209 *
kenjiArai 0:d4960fcea8ff 1210 * Sets the pointer to the current TCB to the TCB of the highest priority task
kenjiArai 0:d4960fcea8ff 1211 * that is ready to run.
kenjiArai 0:d4960fcea8ff 1212 */
kenjiArai 0:d4960fcea8ff 1213 void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1214
kenjiArai 0:d4960fcea8ff 1215 /*
kenjiArai 0:d4960fcea8ff 1216 * Return the handle of the calling task.
kenjiArai 0:d4960fcea8ff 1217 */
kenjiArai 0:d4960fcea8ff 1218 xTaskHandle xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1219
kenjiArai 0:d4960fcea8ff 1220 /*
kenjiArai 0:d4960fcea8ff 1221 * Capture the current time status for future reference.
kenjiArai 0:d4960fcea8ff 1222 */
kenjiArai 0:d4960fcea8ff 1223 void vTaskSetTimeOutState( xTimeOutType * const pxTimeOut ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1224
kenjiArai 0:d4960fcea8ff 1225 /*
kenjiArai 0:d4960fcea8ff 1226 * Compare the time status now with that previously captured to see if the
kenjiArai 0:d4960fcea8ff 1227 * timeout has expired.
kenjiArai 0:d4960fcea8ff 1228 */
kenjiArai 0:d4960fcea8ff 1229 portBASE_TYPE xTaskCheckForTimeOut( xTimeOutType * const pxTimeOut, portTickType * const pxTicksToWait ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1230
kenjiArai 0:d4960fcea8ff 1231 /*
kenjiArai 0:d4960fcea8ff 1232 * Shortcut used by the queue implementation to prevent unnecessary call to
kenjiArai 0:d4960fcea8ff 1233 * taskYIELD();
kenjiArai 0:d4960fcea8ff 1234 */
kenjiArai 0:d4960fcea8ff 1235 void vTaskMissedYield( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1236
kenjiArai 0:d4960fcea8ff 1237 /*
kenjiArai 0:d4960fcea8ff 1238 * Returns the scheduler state as taskSCHEDULER_RUNNING,
kenjiArai 0:d4960fcea8ff 1239 * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED.
kenjiArai 0:d4960fcea8ff 1240 */
kenjiArai 0:d4960fcea8ff 1241 portBASE_TYPE xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1242
kenjiArai 0:d4960fcea8ff 1243 /*
kenjiArai 0:d4960fcea8ff 1244 * Raises the priority of the mutex holder to that of the calling task should
kenjiArai 0:d4960fcea8ff 1245 * the mutex holder have a priority less than the calling task.
kenjiArai 0:d4960fcea8ff 1246 */
kenjiArai 0:d4960fcea8ff 1247 void vTaskPriorityInherit( xTaskHandle * const pxMutexHolder ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1248
kenjiArai 0:d4960fcea8ff 1249 /*
kenjiArai 0:d4960fcea8ff 1250 * Set the priority of a task back to its proper priority in the case that it
kenjiArai 0:d4960fcea8ff 1251 * inherited a higher priority while it was holding a semaphore.
kenjiArai 0:d4960fcea8ff 1252 */
kenjiArai 0:d4960fcea8ff 1253 void vTaskPriorityDisinherit( xTaskHandle * const pxMutexHolder ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1254
kenjiArai 0:d4960fcea8ff 1255 /*
kenjiArai 0:d4960fcea8ff 1256 * Generic version of the task creation function which is in turn called by the
kenjiArai 0:d4960fcea8ff 1257 * xTaskCreate() and xTaskCreateRestricted() macros.
kenjiArai 0:d4960fcea8ff 1258 */
kenjiArai 0:d4960fcea8ff 1259 signed portBASE_TYPE xTaskGenericCreate( pdTASK_CODE pvTaskCode, const signed char * const pcName, unsigned short usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask, portSTACK_TYPE *puxStackBuffer, const xMemoryRegion * const xRegions ) PRIVILEGED_FUNCTION;
kenjiArai 0:d4960fcea8ff 1260
kenjiArai 0:d4960fcea8ff 1261 #ifdef __cplusplus
kenjiArai 0:d4960fcea8ff 1262 }
kenjiArai 0:d4960fcea8ff 1263 #endif
kenjiArai 0:d4960fcea8ff 1264 #endif /* TASK_H */
kenjiArai 0:d4960fcea8ff 1265
kenjiArai 0:d4960fcea8ff 1266
kenjiArai 0:d4960fcea8ff 1267