⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 task.h

📁 freemodbus-v1-1-1-0.zip v1.1.1版本的代码 支持多个平台
💻 H
📖 第 1 页 / 共 2 页
字号:
/*	FreeRTOS V3.2.4 - Copyright (C) 2003-2005 Richard Barry.	This file is part of the FreeRTOS distribution.	FreeRTOS is free software; you can redistribute it and/or modify	it under the terms of the GNU General Public License as published by	the Free Software Foundation; either version 2 of the License, or	(at your option) any later version.	FreeRTOS is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.	You should have received a copy of the GNU General Public License	along with FreeRTOS; if not, write to the Free Software	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA	A special exception to the GPL can be applied should you wish to distribute	a combined work that includes FreeRTOS, without being obliged to provide	the source code for any proprietary components.  See the licensing section	of http://www.FreeRTOS.org for full details of how and when the exception	can be applied.	***************************************************************************	See http://www.FreeRTOS.org for documentation, latest information, license	and contact details.  Please ensure to read the configuration and relevant	port sections of the online documentation.	****************************************************************************/#ifndef TASK_H#define TASK_H#include "portable.h"#include "list.h"/*----------------------------------------------------------- * MACROS AND DEFINITIONS *----------------------------------------------------------*/#define tskKERNEL_VERSION_NUMBER "V3.2.4"/** * task. h * * Type by which tasks are referenced.  For example, a call to xTaskCreate * returns (via a pointer parameter) an xTaskHandle variable that can then * be used as a parameter to vTaskDelete to delete the task. * * \page xTaskHandle xTaskHandle * \ingroup Tasks */typedef void * xTaskHandle;/* * Defines the priority used by the idle task.  This must not be modified. * * \ingroup TaskUtils */#define tskIDLE_PRIORITY			( ( unsigned portBASE_TYPE ) 0 )/** * task. h * * Macro for forcing a context switch. * * \page taskYIELD taskYIELD * \ingroup SchedulerControl */#define taskYIELD()					portYIELD()/** * task. h * * Macro to mark the start of a critical code region.  Preemptive context * switches cannot occur when in a critical region. * * NOTE: This may alter the stack (depending on the portable implementation) * so must be used with care! * * \page taskENTER_CRITICAL taskENTER_CRITICAL * \ingroup SchedulerControl */#define taskENTER_CRITICAL()		portENTER_CRITICAL()/** * task. h * * Macro to mark the end of a critical code region.  Preemptive context * switches cannot occur when in a critical region. * * NOTE: This may alter the stack (depending on the portable implementation) * so must be used with care! * * \page taskEXIT_CRITICAL taskEXIT_CRITICAL * \ingroup SchedulerControl */#define taskEXIT_CRITICAL()			portEXIT_CRITICAL()/** * task. h * * Macro to disable all maskable interrupts. * * \page taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS * \ingroup SchedulerControl */#define taskDISABLE_INTERRUPTS()	portDISABLE_INTERRUPTS()/** * task. h * * Macro to enable microcontroller interrupts. * * \page taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS * \ingroup SchedulerControl */#define taskENABLE_INTERRUPTS()		portENABLE_INTERRUPTS()/*----------------------------------------------------------- * TASK CREATION API *----------------------------------------------------------*//** * task. h *<pre> portBASE_TYPE xTaskCreate(                              pdTASK_CODE pvTaskCode,                              const portCHAR * const pcName,                              unsigned portSHORT usStackDepth,                              void *pvParameters,                              unsigned portBASE_TYPE uxPriority,                              xTaskHandle *pvCreatedTask                          );</pre> * * Create a new task and add it to the list of tasks that are ready to run. * * @param pvTaskCode Pointer to the task entry function.  Tasks * must be implemented to never return (i.e. continuous loop). * * @param pcName A descriptive name for the task.  This is mainly used to * facilitate debugging.  Max length defined by tskMAX_TASK_NAME_LEN - default * is 16. * * @param usStackDepth The size of the task stack specified as the number of * variables the stack can hold - not the number of bytes.  For example, if * the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes * will be allocated for stack storage. * * @param pvParameters Pointer that will be used as the parameter for the task * being created. * * @param uxPriority The priority at which the task should run. * * @param pvCreatedTask Used to pass back a handle by which the created task * can be referenced. * * @return pdPASS if the task was successfully created and added to a ready * list, otherwise an error code defined in the file errors. h * * Example usage:   <pre> // Task to be created. void vTaskCode( void * pvParameters ) {     for( ;; )     {         // Task code goes here.     } } // Function that creates a task. void vOtherFunction( void ) { unsigned char ucParameterToPass; xTaskHandle xHandle;		     // Create the task, storing the handle.     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );		     // Use the handle to delete the task.     vTaskDelete( xHandle ); }   </pre> * \defgroup xTaskCreate xTaskCreate * \ingroup Tasks */signed portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pvCreatedTask );/** * task. h * <pre>void vTaskDelete( xTaskHandle pxTask );</pre> * * INCLUDE_vTaskDelete must be defined as 1 for this function to be available. * See the configuration section for more information. * * Remove a task from the RTOS real time kernels management.  The task being * deleted will be removed from all ready, blocked, suspended and event lists. * * NOTE:  The idle task is responsible for freeing the kernel allocated * memory from tasks that have been deleted.  It is therefore important that * the idle task is not starved of microcontroller processing time if your * application makes any calls to vTaskDelete ().  Memory allocated by the * task code is not automatically freed, and should be freed before the task * is deleted. * * See the demo application file death.c for sample code that utilises * vTaskDelete (). * * @param pxTask The handle of the task to be deleted.  Passing NULL will * cause the calling task to be deleted. * * Example usage:   <pre> void vOtherFunction( void ) { xTaskHandle xHandle;		     // Create the task, storing the handle.     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );		     // Use the handle to delete the task.     vTaskDelete( xHandle ); }   </pre> * \defgroup vTaskDelete vTaskDelete * \ingroup Tasks */void vTaskDelete( xTaskHandle pxTask );/*----------------------------------------------------------- * TASK CONTROL API *----------------------------------------------------------*//** * task. h * <pre>void vTaskDelay( portTickType xTicksToDelay );</pre> * * Delay a task for a given number of ticks.  The actual time that the * task remains blocked depends on the tick rate.  The constant * portTICK_RATE_MS can be used to calculate real time from the tick * rate - with the resolution of one tick period. * * INCLUDE_vTaskDelay must be defined as 1 for this function to be available. * See the configuration section for more information. * * @param xTicksToDelay The amount of time, in tick periods, that * the calling task should block. * * Example usage:   <pre> // Wait 10 ticks before performing an action. // NOTE: // This is for demonstration only and would be better achieved // using vTaskDelayUntil (). void vTaskFunction( void * pvParameters ) { portTickType xDelay, xNextTime;     // Calc the time at which we want to perform the action     // next.     xNextTime = xTaskGetTickCount () + ( portTickType ) 10;     for( ;; )     {         xDelay = xNextTime - xTaskGetTickCount ();         xNextTime += ( portTickType ) 10;         // Guard against overflow         if( xDelay <= ( portTickType ) 10 )         {             vTaskDelay( xDelay );         }         // Perform action here.     } }   </pre> * \defgroup vTaskDelay vTaskDelay * \ingroup TaskCtrl */void vTaskDelay( portTickType xTicksToDelay );/** * task. h * <pre>void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );</pre> * * INCLUDE_vTaskDelayUntil must be defined as 1 for this function to be available. * See the configuration section for more information. * * Delay a task until a specified time.  This function can be used by cyclical * tasks to ensure a constant execution frequency. * * This function differs from vTaskDelay () in one important aspect:  vTaskDelay () will * cause a task to block for the specified number of ticks from the time vTaskDelay () is * called.  It is therefore difficult to use vTaskDelay () by itself to generate a fixed * execution frequency as the time between a task starting to execute and that task * calling vTaskDelay () may not be fixed [the task may take a different path though the * code between calls, or may get interrupted or preempted a different number of times * each time it executes]. * * Whereas vTaskDelay () specifies a wake time relative to the time at which the function * is called, vTaskDelayUntil () specifies the absolute (exact) time at which it wishes to * unblock. * * The constant portTICK_RATE_MS can be used to calculate real time from the tick * rate - with the resolution of one tick period. * * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the * task was last unblocked.  The variable must be initialised with the current time * prior to its first use (see the example below).  Following this the variable is * automatically updated within vTaskDelayUntil (). * * @param xTimeIncrement The cycle time period.  The task will be unblocked at * time *pxPreviousWakeTime + xTimeIncrement.  Calling vTaskDelayUntil with the * same xTimeIncrement parameter value will cause the task to execute with * a fixed interface period. * * Example usage:   <pre> // Perform an action every 10 ticks. void vTaskFunction( void * pvParameters ) { portTickType xLastWakeTime; const portTickType xFrequency = 10;     // Initialise the xLastWakeTime variable with the current time.     xLastWakeTime = xTaskGetTickCount ();     for( ;; )     {         // Wait for the next cycle.         vTaskDelayUntil( &xLastWakeTime, xFrequency );         // Perform action here.     } }   </pre> * \defgroup vTaskDelayUntil vTaskDelayUntil * \ingroup TaskCtrl */void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickType xTimeIncrement );/** * task. h * <pre>unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );</pre> * * INCLUDE_xTaskPriorityGet must be defined as 1 for this function to be available. * See the configuration section for more information. * * Obtain the priority of any task. * * @param pxTask Handle of the task to be queried.  Passing a NULL * handle results in the priority of the calling task being returned. * * @return The priority of pxTask. * * Example usage:   <pre> void vAFunction( void ) { xTaskHandle xHandle;		     // Create a task, storing the handle.     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );		     // ...     // Use the handle to obtain the priority of the created task.     // It was created with tskIDLE_PRIORITY, but may have changed     // it itself.     if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )     {         // The task has changed it's priority.     }     // ...     // Is our priority higher than the created task?     if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )     {         // Our priority (obtained using NULL handle) is higher.     } }   </pre> * \defgroup uxTaskPriorityGet uxTaskPriorityGet * \ingroup TaskCtrl */unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );/** * task. h * <pre>void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority );</pre> * * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available. * See the configuration section for more information. * * Set the priority of any task. * * A context switch will occur before the function returns if the priority * being set is higher than the currently executing task. * * @param pxTask Handle to the task for which the priority is being set. * Passing a NULL handle results in the priority of the calling task being set. * * @param uxNewPriority The priority to which the task will be set. * * Example usage:   <pre> void vAFunction( void ) { xTaskHandle xHandle;		     // Create a task, storing the handle.     xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );     // ...     // Use the handle to raise the priority of the created task.     vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );     // ...     // Use a NULL handle to raise our priority to the same value.     vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 ); }   </pre> * \defgroup vTaskPrioritySet vTaskPrioritySet * \ingroup TaskCtrl */void vTaskPrioritySet( xTaskHandle pxTask, unsigned portBASE_TYPE uxNewPriority );/** * task. h * <pre>void vTaskSuspend( xTaskHandle pxTaskToSuspend );</pre> * * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available. * See the configuration section for more information. * * Suspend any task.  When suspended a task will never get any microcontroller * processing time, no matter what its priority. * * Calls to vTaskSuspend are not accumulative - * i.e. calling vTaskSuspend () twice on the same task still only requires one * call to vTaskResume () to ready the suspended task. * * @param pxTaskToSuspend Handle to the task being suspended.  Passing a NULL * handle will cause the calling task to be suspended. * * Example usage:   <pre>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -