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

📄 task.h

📁 Modbus协议的源代码 Modbus协议的源代码、 Modbus协议的源代码 Modbus协议的源代码
💻 H
📖 第 1 页 / 共 3 页
字号:
/*

	FreeRTOS.org V4.1.1 - Copyright (C) 2003-2006 Richard Barry.



	This file is part of the FreeRTOS.org distribution.



	FreeRTOS.org 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.org 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.org; 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.org, 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 "V4.1.1"



/**

 * 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;



/*

 * Used internally only.

 */

typedef struct xTIME_OUT

{

    portBASE_TYPE xOverflowCount;

    portTickType  xTimeOnEntering;

} xTimeOutType;



/*

 * 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.

 *

⌨️ 快捷键说明

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