FreeRTOS API参考——任务实用程序

FreeRtos源码分析之消息队列工作原理(九) 一、消息队列API函数 xQueueCreate( uxQueueLength, uxItemSize ); xQueueSend( xQueue, pvItemToQueue, xTicksToWait ); BaseType_t xQueueReceive( QueueHandle_t xQueue,void * const pvBuffer,TickType_t xTicksToWait ); xQueueCreate 创建一个消息队列,队列中有uxQueueLength个元素,每个元素大小为ux 阅读详情

Modules

 

xTaskGetCurrentTaskHandle

task.h

TaskHandle_t xTaskGetCurrentTaskHandle( void );

必须将INCLUDE_xTaskGetCurrentTaskHandle设置为1才能使用此功能。

返回值:

当前正在运行(正在调用)的任务的句柄。

 

xTaskGetIdleTaskHandle

task.h

TaskHandle_t xTaskGetIdleTaskHandle( void );

必须将INCLUDE_xTaskGetIdleTaskHandle设置为1才能使用此功能。

返回值:

与空闲任务关联的任务句柄。 启动RTOS计划程序时,将自动创建空闲任务。

 

eTaskGetState

task.h

eTaskState eTaskGetState( TaskHandle_t xTask );

以枚举类型返回执行eTaskGetState()时任务存在的状态。

必须在FreeRTOSConfig.h中将INCLUDE_eTaskGetState设置为1,eTaskGetState()才可用。

另请参见vTaskGetInfo()。

参数:

 xTask

主题任务(正在查询的任务)的句柄。

返回值:

下表列出了eTaskGetState()将针对xTask参数引用的任务可能存在的每个可能状态返回的值。

 

State

Returned Value

Ready

eReady

Running

eRunning(调用任务正在查询自己的优先级)

Blocked

eBlocked

Suspended

eSuspended

Deleted

eDeleted(TCB的任务正在等待清理)

 

pcTaskGetName

task.h

char * pcTaskGetName( TaskHandle_t xTaskToQuery );

从任务的句柄中查找任务的名称。

 

参数:

 xTaskToQuery

正在查询任务的句柄。 可以将xTaskToQuery设置为NULL来查询调用任务的名称。

返回值:

指向主题任务名称的指针,该名称是标准的以NULL结尾的C字符串。

 

xTaskGetHandle

task.h

TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );

从任务名称中查找任务的句柄。

注意:此功能需要相对较长的时间才能完成,并且每个任务只能调用一次。 一旦获得任务的句柄,就可以将其存储在本地以供重复使用。

必须将FreeRTOSConfig.h中的INCLUDE_xTaskGetHandle设置为1,才能使xTaskGetHandle()可用。

参数:

 pcNameToQuery

将为其返回句柄的任务的文本名称(作为标准的C NULL终止字符串)。

有关设置任务文本名称的信息,请参见xTaskCreate()和xTaskCreateStatic()API函数的pcName参数。

返回值:

如果可以找到具有在pcNameToQuery中传递的名称的任务,则返回任务的句柄,否则返回NULL。

 

xTaskGetTickCount

task.h

volatile TickType_t xTaskGetTickCount( void );

无法从ISR调用此函数。 改用xTaskGetTickCountFromISR()。

返回值:

自调用vTaskStartScheduler以来的滴答计数。

 

xTaskGetTickCountFromISR

task.h

volatile TickType_t xTaskGetTickCountFromISR( void );

可以从ISR调用的xTaskGetTickCount()版本。

返回值:

自调用vTaskStartScheduler以来的滴答计数。

 

xTaskGetSchedulerState

task.h

BaseType_t xTaskGetSchedulerState( void );

返回值:

以下常量之一(在task.h中定义):taskSCHEDULER_NOT_STARTED,taskSCHEDULER_RUNNING,taskSCHEDULER_SUSPENDED。

要使此功能可用,必须在FreeRTOSConfig.h中将INCLUDE_xTaskGetSchedulerState或configUSE_TIMERS设置为1。

 

uxTaskGetNumberOfTasks

task.h

UBaseType_t uxTaskGetNumberOfTasks( void );

返回值:

RTOS内核当前正在管理的任务数。 这包括所有准备就绪,已阻止和已暂停的任务。 空闲任务已删除但尚未释放的任务也将包括在计数中。

 

vTaskList

task.h

void vTaskList( char *pcWriteBuffer );

要使此功能可用,必须在FreeRTOSConfig.h中将configUSE_TRACE_FACILITY和configUSE_STATS_FORMATTING_FUNCTIONS定义为1。有关更多信息,请参见配置部分。

注意:此功能将在其持续时间内禁用中断。它不适合正常的应用程序运行时使用,而是作为调试辅助。

vTaskList()调用uxTaskGetSystemState(),然后将uxTaskGetSystemState()生成的原始数据格式化为人类可读(ASCII)表,该表显示每个任务的状态,包括任务堆栈的高水位标记(高水位标记越小,任务越接近其堆栈溢出)。单击此处查看生成的输出示例。

在ASCII表中,以下字母用于表示任务的状态:

  • “ B” –已屏蔽

  • “ R” –准备就绪

  • “ D”-已删除(正在等待清理)

  • “ S” –暂停或被阻止,没有超时

vTaskList()是仅出于方便目的而提供的实用程序函数。它不被视为内核的一部分。有关实用程序函数的信息,请参见vTaskGetRunTimeStats(),该实用程序函数会生成类似的运行时任务利用率信息表。

参数:

 pcWriteBuffer

将上述详细信息写入ASCII格式的缓冲区。 假定此缓冲区足够大以包含生成的报告。 每个任务大约40个字节就足够了。

 

 

vTaskStartTrace

task.h

void vTaskStartTrace( char * pcBuffer, unsigned long ulBufferSize );

【此功能与FreeRTOS V7.1.0中已删除的旧版跟踪实用程序有关,用户可能会发现更易于使用且功能更强大的更新的跟踪挂钩宏。】

启动RTOS内核活动跟踪。 跟踪记录何时运行哪个任务的标识。

跟踪文件以二进制格式存储。 单独的DOS实用程序convtrce.exe可用于将其转换为制表符分隔的文本文件,该文件可在电子表格中查看和绘制。

 

参数:

 pcBuffer

跟踪将写入其中的缓冲区。

ulBufferSize

pcBuffer的大小(以字节为单位)。 跟踪将一直持续到缓冲区已满或调用ulTaskEndTrace()为止。

 

ulTaskEndTrace

task.h

unsigned long ulTaskEndTrace( void );

【此功能与FreeRTOS V7.1.0中已删除的旧版跟踪实用程序有关,用户可能会发现更易于使用且功能更强大的更新的跟踪挂钩宏。】

停止RTOS内核活动跟踪。 请参见vTaskStartTrace()。

 

返回值:

已写入跟踪缓冲区的字节数。

 

 

vTaskGetRunTimeStats

task.h

void vTaskGetRunTimeStats( char *pcWriteBuffer );

有关此功能的完整说明,请参见“运行时统计”页面。

为了使此功能可用,必须将configGENERATE_RUN_TIME_STATS和configUSE_STATS_FORMATTING_FUNCTIONS都定义为1。然后,应用程序还必须提供portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和portGET_RUN_TIME_COUNTER_VALUE的定义,以配置外设定时器/计数器并分别返回定时器的当前计数值。计数器应至少是滴答计数频率的10倍。

注意:此功能将在其持续时间内禁用中断。它不适合正常的应用程序运行时使用,而是作为调试辅助。

vTaskGetRunTimeStats()调用uxTaskGetSystemState(),然后将uxTaskGetSystemState()生成的原始数据格式化为人类可读(ASCII)表,该表显示每个任务在运行状态下所花费的时间(每个任务所消耗的CPU时间) 。数据以绝对值和百分比值形式提供。绝对值的分辨率取决于应用程序提供的运行时统计时钟的频率。

vTaskGetRunTimeStats()是仅出于方便目的而提供的实用程序函数。它不被视为内核的一部分。有关生成每个任务状态信息的实用程序功能,请参见vTaskList()。

参数:

 pcWriteBuffer

执行时间将以ASCII形式写入的缓冲区。 假定此缓冲区足够大以包含生成的报告。 每个任务大约40个字节就足够了。

 

vTaskGetIdleRunTimeCounter

task.h

TickType_t xTaskGetIdleRunTimeCounter( void );

返回空闲任务的运行时计数器。 此功能可用于确定空闲任务接收了多少CPU时间。 有关运行时状态功能的完整说明,请参见“运行时状态”页面。

为了使该功能可用,必须将configGENERATE_RUN_TIME_STATS和INCLUDE_xTaskGetIdleTaskHandle都定义为1。 然后,应用程序还必须提供portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和portGET_RUN_TIME_COUNTER_VALUE的定义,以配置外设定时器/计数器并分别返回定时器的当前计数值。 建议使计时器至少是滴答计数频率的10倍。

 

vTaskSetApplicationTaskTag

task. h

void vTaskSetApplicationTaskTag(
                        TaskHandle_t xTask,
                        TaskHookFunction_t pxTagValue );

必须将configUSE_APPLICATION_TASK_TAG定义为1,此功能才能使用。 有关更多信息,请参见RTOS配置文档。

可以为每个任务分配一个“标签”值。 该值仅用于应用程序– RTOS内核本身不以任何方式使用它。 RTOS跟踪宏文档页面提供了一个很好的示例,说明应用程序如何使用此功能。

参数:

 xTask

为其分配了标签值的任务的句柄。 将xTask传递为NULL会将标记分配给调用任务。

pxTagValue

分配给任务标签的值。 这是TaskHookFunction_t类型,允许将功能指针分配为标签,尽管实际上可以分配任何值。 请参见下面的示例。

用法示例:

/* In this example an integer is set as the task tag value.  
See the RTOS trace hook macros documentation page for an
example how such an assignment can be used. */
void vATask( void *pvParameters )
{
  /* Assign a tag value of 1 to myself. */
  vTaskSetApplicationTaskTag( NULL, ( void * ) 1 );

  for( ;; )
  {
    /* Rest of task code goes here. */
  }
}
/***********************************************/

/* In this example a callback function is being assigned as the task tag.
First define the callback function - this must have type TaskHookFunction_t
as per this example. */
static BaseType_t prvExampleTaskHook( void * pvParameter )
{
  /* Perform some action - this could be anything from logging a value,
  updating the task state, outputting a value, etc. */

  return 0;
}


/* Now define the task that sets prvExampleTaskHook as its hook/tag value.
This is in fact registering the task callback, as described on the
xTaskCallApplicationTaskHook() documentation page. */
void vAnotherTask( void *pvParameters )
{
  /* Register our callback function. */
  vTaskSetApplicationTaskTag( NULL, prvExampleTaskHook );

  for( ;; )
  {
    /* Rest of task code goes here. */
  }
}

/* As an example use of the hook (callback) we can get the RTOS kernel to call the
hook function of each task that is being switched out during a reschedule. */
#define traceTASK_SWITCHED_OUT() xTaskCallApplicationTaskHook( pxCurrentTCB, 0 )

 

xTaskCallApplicationTaskHook

task. h

BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );

必须将configUSE_APPLICATION_TASK_TAG定义为1,此功能才能使用。 有关更多信息,请参见RTOS配置文档。

可以为每个任务分配一个“标签”值。 通常,此值仅供应用程序使用,RTOS内核不会访问它。 但是,可以使用标记将钩子(或回调)函数分配给任务-通过调用xTaskCallApplicationTaskHook()执行钩子函数。 每个任务可以定义自己的回调,也可以根本不定义回调。

尽管可以使用第一个函数参数来调用任何任务的钩子函数,但是任务钩子函数最常见的用法是使用跟踪钩子宏,如以下示例所示。

任务挂钩函数必须具有TaskHookFunction_t类型,即带有void *参数,并返回BaseType_t类型的值。 void *参数可用于将任何信息传递给hook函数。

参数:

 xTask

正在调用其挂钩函数的任务的句柄。 将NULL作为xTask传递时,将调用与当前正在执行的任务相关联的hook函数。

pvParameter

传递给挂钩函数的值。 这可以是指向结构的指针,也可以只是数字值。

 

用法示例:

/* In this example a callback function is being assigned as the task tag.
First define the callback function - this must have type TaskHookFunction_t
as per this example. */
static BaseType_t prvExampleTaskHook( void * pvParameter )
{
   /* Perform some action - this could be anything from logging a value,
   updating the task state, outputting a value, etc. */

   return 0;
}

/* Now define the task that sets prvExampleTaskHook as its hook/tag value.
This is in fact registering the task callback, as described on the
xTaskCallApplicationTaskHook() documentation page. */
void vAnotherTask( void *pvParameters )
{
   /* Register our callback function. */
   vTaskSetApplicationTaskTag( NULL, prvExampleTaskHook );

   for( ;; )
   {
      /* Rest of task code goes here. */
   }
}


/* As an example use of the hook (callback) we can get the RTOS kernel to
call the hook function of each task that is being switched out during a
reschedule. */
#define traceTASK_SWITCHED_OUT() xTaskCallApplicationTaskHook( pxCurrentTCB, 0 )

  

 

 

vTaskSetThreadLocalStoragePointer

task. h

void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet,
                                        BaseType_t xIndex,
                                        void *pvValue )

在任务的线程本地存储阵列中设置一个值。

此功能仅适用于高级用户。

参数:

 xTaskToSet

线程本地数据正在写入的任务的句柄。 通过使用NULL作为参数值,任务可以写入其自己的线程本地数据。

xIndex

线程本地存储阵列中要写入数据的索引。

可用数组索引的数量由FreeRTOSConfig.h中的configNUM_THREAD_LOCAL_STORAGE_POINTERS编译时配置常量设置。

pvValue

要写入由xIndex参数指定的索引的值。

用法示例:

请参阅线程本地存储阵列文档页面上提供的示例。

 

 

pvTaskGetThreadLocalStoragePointer

task. h

void *pvTaskGetThreadLocalStoragePointer(
                                 TaskHandle_t xTaskToQuery,
                                 BaseType_t xIndex );

从任务的线程本地存储阵列中检索值。

此功能仅适用于高级用户。

参数:

 xTaskToQuery

从中读取线程本地数据的任务的句柄。 通过使用NULL作为参数值,任务可以读取自己的线程本地数据。

xIndex

到线程本地存储阵列中的索引,将从中读取数据。

可用数组索引的数量由FreeRTOSConfig.h中的configNUM_THREAD_LOCAL_STORAGE_POINTERS编译时配置常量设置。

返回值:

存储在任务xTaskToQuery的线程本地存储数组的索引位置xIndex中的值。

用法示例:

请参阅线程本地存储阵列文档页面上提供的示例。

 

vTaskSetTimeOutState()

task.h

void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut );

此功能仅适用于高级用户。

任务可以进入阻止状态以等待事件。通常,任务不会无限期地处于“阻塞”状态,而是将指定超时期限。如果超时时间在任务等待事件发生之前到期,则该任务将从“阻塞”状态中删除。

如果任务在等待事件发生时多次进入和退出“阻止”状态,则必须调整每次任务进入“阻止”状态所用的超时时间,以确保在“阻止”状态下花费的所有时间总计不超过最初指定的超时期限。 xTaskCheckForTimeOut()执行调整时要考虑偶发计数溢出之类的偶发事件,否则这会使手动调整容易出错。

vTaskSetTimeOutState()与xTaskCheckForTimeOut()一起使用。调用vTaskSetTimeOutState()设置初始条件,之后可以调用xTaskCheckForTimeOut()来检查超时条件,并在未发生超时的情况下调整剩余的块时间。

参数:

 pxTimeOut

指向结构的指针,该结构将被初始化以保存确定是否发生超时所必需的信息。

用法示例:

xTaskCheckForTimeOut()文档页面上提供了一个示例。

 

 

 

xTaskCheckForTimeOut()

task.h

BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,
                                 TickType_t * const pxTicksToWait );

此功能仅适用于高级用户。

任务可以进入阻止状态以等待事件。通常,任务不会无限期地处于“阻塞”状态,而是将指定超时期限。如果超时时间在任务等待事件发生之前到期,则该任务将从“阻塞”状态中删除。

如果任务在等待事件发生时多次进入和退出“阻止”状态,则必须调整每次任务进入“阻止”状态所用的超时时间,以确保在“阻止”状态下花费的所有时间总计不超过最初指定的超时期限。 xTaskCheckForTimeOut()执行调整时要考虑偶发计数溢出之类的偶发事件,否则这会使手动调整容易出错。

xTaskCheckForTimeOut()与vTaskSetTimeOutState()一起使用。调用vTaskSetTimeOutState()设置初始条件,之后可以调用xTaskCheckForTimeOut()来检查超时条件,并在未发生超时的情况下调整剩余的块时间。

参数:

pxTimeOut 

指向结构的指针,该结构保存确定是否发生超时所需的信息。 使用vTaskSetTimeOutState()初始化pxTimeOut。

pxTicksToWait

用于传递调整后的阻止时间,这是考虑到已经处于“阻止”状态的时间之后剩余的阻止时间。

返回值:

如果返回pdTRUE,则没有块时间剩余,并且发生了超时。

如果返回pdFALSE,则剩余一些块时间,因此不会发生超时。

 

用法示例:

/* Driver library function used to receive uxWantedBytes from an Rx buffer that
is filled by a UART interrupt.  If there are not enough bytes in the Rx buffer
then the task enters the Blocked state until it is notified that more data has
been placed into the buffer.  If there is still not enough data then the task
re-enters the Blocked state, and xTaskCheckForTimeOut() is used to re-calculate
the Block time to ensure the total amount of time spent in the Blocked state does
not exceed MAX_TIME_TO_WAIT. This continues until either the buffer contains at
least uxWantedBytes bytes, or the total amount of time spent in the Blocked state
reaches MAX_TIME_TO_WAIT – at which point the task reads however many bytes are
available up to a maximum of uxWantedBytes. */
size_t xUART_Receive( uint8_t *pucBuffer, size_t uxWantedBytes )
{
size_t uxReceived = 0;
TickType_t xTicksToWait = MAX_TIME_TO_WAIT;
TimeOut_t xTimeOut;


   /* Initialize xTimeOut.  This records the time at which this function was
   entered. */
   vTaskSetTimeOutState( &xTimeOut );


   /* Loop until the buffer contains the wanted number of bytes, or a timeout
   occurs. */
   while( UART_bytes_in_rx_buffer( pxUARTInstance ) < uxWantedBytes )
   {
      /* The buffer didn't contain enough data so this task is going to
      enter the Blocked state.  Adjusting xTicksToWait to account for any time
      that has been spent in the Blocked state within this function so far to
      ensure the total amount of time spent in the Blocked state does not exceed
      MAX_TIME_TO_WAIT. */
      if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) != pdFALSE )
      {
         /* Timed out before the wanted number of bytes were available, exit the
         loop. */
         break;
      }


      /* Wait for a maximum of xTicksToWait ticks to be notified that the receive
      interrupt has placed more data into the buffer. */
      ulTaskNotifyTake( pdTRUE, xTicksToWait );
   }


   /* Attempt to read uxWantedBytes from the receive buffer into pucBuffer.  The
   actual number of bytes read (which might be less than uxWantedBytes) is
   returned. */
   uxReceived = UART_read_from_receive_buffer( pxUARTInstance,
                                               pucBuffer,
                                               uxWantedBytes );



   return uxReceived;
}

 

17-FreeRTOS任务应用函数(3) 从任务的名称中查找任务的句柄。注意: 此函数需要较长的时间才能完成,并且只能 为每个任务调用一次。一旦获得了一个任务的句柄, 它就可以被储存在本地以便重新使用。必须在 FreeRTOSConfig.h 中将 INCLUDE_xTaskGetHandle 设置为 1,xTaskGetHandle() 才可用。 阅读详情

相关推荐

FreeRTOS学习-队列管理

在FreeRTOS中,提供了多种任务间通讯的机制,包括消息队列、信号量和互斥锁、事件组、任务通知。消息队列、信号量和互斥锁、事件组都是间接的任务间通信机制,而任务通知则是直接的通信方式,因此,任务通信的性能比其他几种间接的通信方式要高。严格来说,互斥锁并不是一种任务间通信机制,将他们放在一块是因为互斥锁是基于信号量实现的,便于理解。在FreeRTOS中,信号量又是基于消息队列实现的,因此,先介绍消息队列,然后再介绍信号量和互斥锁。最后介绍事件组和任务通知。

Duran.L的专栏 2018

FreeRTOS笔记(九)任务相关的过渡

文章目录01 - 任务相关的过渡1.1 - get和set函数1.2 - delay延迟函数02 - 总结 上一文链接:FreeRTOS笔记(八)任务切换 01 - 任务相关的过渡 1.1 - get和set函数   了解到任务、列表和调度器后,关于任务的核心内容应该比较清晰,FreeRTOS还有很多任务的辅助函数,比如一些必要的get和set函数,用于获取和设置任务的状态和信息,比如常见的如下...

单眼皮根号三的博客 1240

FreeRTOS实用指南 之 创建任务

前言 本文主要介绍FreeRTOS创建任务函数 xTaskCreate() 的函数原型及如何使用 xTaskCreate() 创建任务。 一、xTaskCreate() API 函数 这是我们接触到的第一个FreeRTOS函数,可能也是所有API函数中最复杂的一个,但必须了解并掌握这个最基本的组件,才能打开学习FreeRTOS的大门。 下面是 xTaskCreate() 函数原型,通过注释就能大概了解 xTaskCreate() 各个参数的意义,本文到此结束,建议详细阅读注释,对xTaskCrea.

weixin_42517895的博客 8122

vTaskSetTime

vTaskSetTimeOutState() 是FreeRTOS中的一个函数,用于设置任务的超时状态,以便在后续调用中检测任务是否在指定时间内完成。这通常与 xTaskCheckForTimeOut() 函数一起使用,适用于需要精确控制时间的任务。vTaskSetTimeOutState() 不会阻塞任务,只是记录当前时间状态。确保在合适的上下文中使用,通常在任务循环内。适合用于需要定时检查的任务逻辑。

u013546647的博客 371

细说STM32单片机FreeRTOS任务管理API函数及多任务编程的实现方法

FreeRTOS中除了用于任务管理的一些RTOS函数外,还有一些API函数(也叫任务管理工具函数),用于操作任务或取任务信息。一些内容需要参考本文作者写的其他文章,参考文章:细说STM32单片机FreeRTOS任务管理相关函数及多任务编程的实现方法-优快云博客。

wenchm的博客 1418

FreeRTOS任务通知

在 FreeRTOS 中,每一个任务都有两个用于任务通知功能的数组,分别为任务通知数组和任务通知状态数组。其中任务通知数组中的每一个元素都是一个 32 位无符号类型的通知值;而任务通知状态数组中的元素则表示与之对应的任务通知的状态。任务通知数组中的 32 位无符号通知值,用于任务到任务或中断到任务发送通知的“媒介”。当通知值为 0 时,表示没有任务通知;当通知值不为 0 时,表示有任务通知,并且通知值就是通知的内容。任务通知状态数组中的元素,用于标记任务通知数组中通知的状态,

m0_61973119的博客 1069

【FreeRTOS】FreeRTOS任务相关API函数

FreeRTOS 是 RTOS 的一个类别,设计得足够小,可以在微控制器上运行, 但其用途并不局限于微控制器应用程序。微控制器是一种小型且资源有限的处理器, 在单个芯片上集成了处理器本身、 用于保存待执行程序的只读存储器(ROM 或闪存) 以及执行程序所需的随机存取存储器(RAM)。通常情况下,程序是 直接从只读存储器中执行的。微控制器通常用于深度嵌入式应用中(在这些应用中, 实际上看不到处理器本身,也看不到它们运行的软件), 它们通常有非常具体和专门的工作要做。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 1476

FreeRTOS 任务状态查询

开始任务是删除态,因为创建后就删除了。

Paradise_Violet的博客 2662

十二、FreeRTOS之FreeRTOS任务相关API函数

()获取任务优先级()设置任务优先级()获取系统中任务的数量()获取所有任务状态信息()获取指定单个的任务信息()获取当前任务的任务句柄()根据任务名获取该任务的任务句柄()获取任务的任务栈历史剩余最小值()获取任务状态vTaskList()以“表格”形式获取所有任务的信息()获取任务的运行时间学习资料可参考手册FreeRTOS开发指南第11章——FreeRTOS其他任务API函数”1.1 获取任务优先级函数。

王同学 1502

告别卡顿!在RK3588上优化Gstreamer推拉流与RKNN推理的完整Pipeline实战

本文详细介绍了在RK3588平台上优化Gstreamer推拉流与RKNN推理的全链路Pipeline实战。通过解码环节参数调优、RKNN线程管理、内存预分配策略以及编码输出优化,实现60FPS流畅处理与亚秒级延迟。特别针对实时视频分析场景,提供了从rtspsrc到appsink的毫秒级优化方案,助力开发者构建零卡顿的智能视觉系统。

weixin_30698527的博客 483

保姆级教程:用OpenCV和MediaPipe在Python里实现实时手势识别(附完整代码)

本文提供了一份详细的Python教程,教你如何使用OpenCV和MediaPipe实现实时手势识别系统。从环境配置、手部关键点检测到手势分类算法,逐步讲解如何构建高精度手势识别应用,适用于智能家居控制、PPT操作等场景。教程包含完整代码示例和性能优化技巧,特别适合计算机视觉初学者和开发者实践。

weixin_28677005的博客 327

FreeRTOS任务相关的API函数

本篇文章记录我学习FreeRTOS的任务相关的API函数。主要涉及FreeRTOS的任务创建和删除函数、任务挂起和恢复函数。

m0_73931287的博客 1276

将pytroch模型转为paddlelite模型并集成到android程序中

在android中使用paddlelite加载yolov5模型识别opencv读取的摄像头信息

qq_56460466的博客 1554

FreeRTOS学习13——任务相关API函数

在 FreeRTOS 官方在线文档的网页页面中,通过查看 API 参考,可以看到官方列出的FreeRTOS 任务相关的 API 函数,如下图所示:函数描述获取任务优先级设置任务优先级获取所有任务的状态信息获取单个任务的状态信息获取任务 Tag获取当前任务的任务句柄获取指定任务的任务句柄获取空闲任务的任务句柄获取任务的任务栈历史剩余最小值获取任务状态获取任务名获取系统时钟节拍计数器的值中断中获取系统使用节拍计数器的值获取任务调度器状态获取系统中任务的数量。

m0_74219261的博客 1398

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 621

保姆级教程:手把手教你用Python逆向分析极验4.0滑块验证码的w参数生成逻辑

本文提供了一份详细的Python逆向工程教程,手把手教你分析极验4.0滑块验证码的w参数生成逻辑。通过HTTP请求分析、JavaScript逆向和加密算法复现,帮助开发者深入理解验证码防护机制,并实现高效的自动化解决方案。教程涵盖AST反混淆、轨迹生成算法和AES加密等核心技术,适合中高级开发者提升逆向工程能力。

weixin_30172941的博客 304

FreeRTOS任务相关API函数

此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1形参描述xTask要查找的任务句柄,NULL代表任务自身返回值描述整数任务优先级数值此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet 为 1形参描述xTask任务句柄,NULL代表任务自身需要设置的任务优先级此函数用于获取系统中任务的任务数量返回值描述整型系统中任务的数量。

ma123456542的博客 1283

Anolis OS 23实战:5分钟搞定AI环境配置(含NVIDIA驱动一键安装)

本文详细介绍了如何在Anolis OS 23上快速配置AI开发环境,包括NVIDIA驱动的一键安装和TensorFlow、PyTorch等AI框架的部署。通过智能硬件适配引擎和优化后的二进制包,用户可在5分钟内完成传统需要数小时的配置工作,显著提升AI项目开发效率。

weixin_30335575的博客 535

五、FreeRTOS之FreeRTOS的任务创建和删除

任务的创建和删除本质就是调用FreeRTOS的API函数。

王同学 1769

SAP MM采购合同创建全解析:ME31K操作与后台逻辑

在SAP ERP的物料管理模块中,采购合同作为框架协议的核心,定义了企业与供应商之间的长期供货关系。它与采购订单不同,合同不直接产生收货或发票,而是为后续采购订单提供数据源。创建合同(事务码ME31K)时,需要区分数量合同与金额合同,并维护抬头、行项目、有效期、价格条件和税码等关键信息。SAP通过源确定机制在创建采购订单时自动匹配合同,同时审批策略、编码范围和输出类型也会影响合同的实际可用性。掌握合同创建逻辑,能有效解决采购订单无法带出合同、审批未触发、价格缺失等高频问题。从ME31K实操出发,系统梳理采购

weixin_30000735的博客 196

UG\NX二次开发 获取三平面交点

//如果返回值不为0 则此三个面没交点 int three_faces_point(tag_t tagFace1, tag_t tagFace2, tag_t tagFace3, double *dou_x, double *dou_y, double *dou_z)

王牌飞行员_里海的博客 674

FreeRTOS API参考——任务控制

Modules vTaskDelay vTaskDelayUntil uxTaskPriorityGet vTaskPrioritySet vTaskSuspend vTaskResume xTaskResumeFromISR xTaskAbortDelay vTaskDelay task. h void vTa...

IoT的搬运工!!! 510

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

FREERTOS任务详解

本文基础内容参考的是正点原子的FREERTOS课程。这是基于HAL库的这是基于标准库的基础知识,直接参考正点原子《FreeRTOS开发指南V1.1》基于标准库的,此处不再赘述。本文主要对不理解的地方进行查缺补漏,并且先用起来,涉及到原理的部分,可以观看上述教学视频或者开发指南。回想一下我们以前在使用51AVRSTM32单片机裸机未使用系统的时候一般都是在main函数里面用while(1)做一个大循环来完成所有的处理,即应用程序是一个无限的循环,循环中调用相应的函数完成所需的处理。

qq_28576837的博客 1688

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

freeRTOS任务切换

1、SVC(系统服务调用,亦简称系统调用)异常,在调度器启动时启动第一个任务时使用,后面就一直没有使用了。2、FreeRTOS任务切换中,都是在PendSV中断服务函数中进行,这个中断服务函数会在所有中断结束后执行,任务切换的主要切换方式任务级任务切换函数--> portYIELD()函数中断级任务切换函数为 portYIELD_FROM_ISR(x),这里的x通常为xHigherPriorityTaskWoken。

W809291634的博客 3303

FreeRTOS API参考——任务创建

Modules xTaskCreate xTaskCreateStatic TaskHandle_t task. h 引用任务的类型。 例如,对xTaskCreate的调用(通过指针参数)返回TaskHandle_t变量,然后可以将该变量用作vTaskDelete的参数以删除任务。 xTaskCreate task. h BaseType_t xTas...

IoT的搬运工!!! 522

FreeRTOS的任务详解

详细讲解freeRTOS的任务

qq_44318582的博客 4212
上一篇: FreeRTOS API参考——内核控制
下一篇: 一步一步来:MQTT服务器搭建、MQTT客户端使用
YLFM-明觉
博客等级 码龄22年 50粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值