当前位置: 代码迷 >> 综合 >> STM32 CubeMX FreeRTOS中FreeRTOSConfig.h(Inclued parameters)各参数的作用
  详细解决方案

STM32 CubeMX FreeRTOS中FreeRTOSConfig.h(Inclued parameters)各参数的作用

热度:81   发布时间:2023-12-16 14:19:08.0

STM32 CubeMX FreeRTOS中Inclued parameters各参数的作用

vTaskPrioritySet

说明:当该参数设置为(Enable)时,系统Inclued  vTaskPrioritySet( ) API函数;

void vTaskPrioritySet( TaskHandle_t pxTask, UBaseType_t uxNewPriority );

函数说明:改变任务的一个任务的优先级;

参数:

  • pxTask:被修改优先级的任务句柄(即目标任务),任务可以通过传入 NULL 值来修改自己的优先级;
  • uxNewPriority:目标任务将被设置到哪个优先级上。如果设置的值超过了最大可用优先级(configMAX_PRIORITIES – 1),则会被自动封顶为最大值。常量 configMAX_PRIORITIES 是在 FreeRTOSConfig.h 头文件中设置的一个编译时选项。

uxTaskPriorityGet

说明:当该参数设置为(Enable)时,系统Include uxTaskPriorityGet() API函数;

unsigned portBASE_TYPE uxTaskPriorityGet( xTaskHandle pxTask );
函数说明:查询一个任务的优先级;

参数:

  • pxTask:被查询任务句柄(即目标任务),任务可以通过传入 NULL 值来修改自己的优先级;

返回值:

  • unsigned portBASE_TYPE:被查询任务的优先级;

vTaskDelete

说明:当该参数设置为(Enable)时,系统Include vTaskDelete() API函数;

void vTaskDelete( xTaskHandle pxTaskToDelete );
函数说明:任务可以使用 API 函数 vTaskDelete()删除自己或其它任务。任务被删除后就不复存在,也不会再进入运行态。空闲任务的责任是要将分配给已删除任务的内存释放掉。因此有一点很重要,那就是使用 vTaskDelete() API 函数的任务千万不能把空闲任务的执行时间饿死。只有内核为任务分配的内存空间才会在任务被删除后自动回收。任务自己占用的内存或资源需要由应用程序自己显式地释放。

参数:

  • pxTaskToDelete:被删除任务的句柄(目标任务),任务可以通过传入 NULL 值来删除自己;

vTaskCleanUpResources

说明:当该参数设置为(Enable)时,系统Include vTaskCleanUpResources() API函数;

vTaskCleanUpResources( )

函数说明:可以回收删除任务后的资源(RAM等);

vTaskSuspend

说明:当该参数设置为(Enable)时,系统Include vTaskSuspend() API函数;当 config Use TICKNESS IDLE=1或 INCLUDE xTaskResumeFromISR=1,强烈推荐使能该参数;

void vTaskSuspend( TaskHandle_t pxTaskToSuspend );

函数说明:调用vTask Suspend( )使任务进入挂起态。进入挂起态的任务不再进入就绪态。调用vTaskResume( )是让任务切换出挂起态的唯一方式。

参数:

  • pxTaskToSuspend:被挂起任务的句柄,任务可以通过传入NULL值来阻塞自己;

vTaskDelayUntil

说明:当该参数设置为(Enable)时,系统Include vTaskDelayUntil( ) API函数;

void vTaskDelayUntil( portTickType * pxPreviousWakeTime, portTickType xTimeIncrement );

函数说明:vTaskDelayUntil( ) 与vTaskDelay( ) 类似。调用vaskDelay( )的任务将进入阻塞态 ,vaskDelay( )的参数用来指定任务在调用vTaskDelay( )到切出阻塞态整个过程包含多少个心跳周期。任务保持在阻塞态的时间由vTaskDelay( )的入口参数指定,但任务离开阻塞态的时刻实际上是相对于vaskDelay( )被调用那一刻的。vaskDelayUnit( )的参数就是来指定任务离开阻塞态进入就绪态那一刻的精确辛心跳计数值。API函数vaskDelayUntil( )可以用于实现一个固定执行周期的需求。由于调用此函数的任务解除阻塞的时间是绝对时刻,比起相对于调用时刻的相对时间更精确。

参数:

  • pxPreviousWakeTime:此参数命名时假定 vTaskDelayUntil()用于实现某个任务以固定频率周期性执行。这种情况下 pxPreviousWakeTime保存了任务上一次离开阻塞态(被唤醒)的时刻。这个时刻被用作一个参考点来计算该任务下一次离开阻塞态的时刻。pxPreviousWakeTime 指 向 的 变 量 值 会 在 API 函 数vTaskDelayUntil()调用过程中自动更新,应用程序除了该变量第一次初始化外,通常都不要修改它的值。
  • xTimeIncrement:此参数命名时同样是假定 vTaskDelayUntil()用于实现某个任 务 以 固 定 频 率 周 期 性 执 行 —— 这 个 频 率 就 是 由xTimeIncrement 指定的。TimeIncrement 的 单 位 是 心 跳 周 期 , 可 以 使 用 常 量portTICK_RATE_MS 将毫秒转换为心跳周期。

vTaskDelay

说明:当该参数设置为(Enable)时,系统Include vTaskDelay( ) API函数;

void vTaskDelay( portTickType xTicksToDelay );
函数说明:调用vTaskDelay( )的任务将进入阻塞态,经过延迟指定的心调周期数后,再转移到就绪态。当调用vTaskDelay( )指定延时周期数为0时,任务将不会进入阻塞态,而当有相同优先级的任务在就绪态时,当前任务将让出系统时间进入进入就绪态。任务调用vTaskDelay(0);与调用taskYIELD( );是一样的结果。

参数:

  • xTickToDelay:延迟多少个心跳周期。调用该延迟函数的任务将进入阻塞态,经延迟指定的心跳周期数后,再转移到就绪态。举个例子,当某个任务调用 vTaskDelay( 100 )时,心跳计数值为 10,000,则该任务将保持在阻塞态,直到心跳计数计到10,100。常数 portTICK_RATE_MS 可以用来将以毫秒为单位的时间值转换为以心跳周期为单位的时间值。

xTaskGetSchedulerState

说明:当该参数设置为(Enable)时,系统Include xTaskGetSchedulerState() API函数;

BaseType_t xTaskGetSchedulerState( void );
函数说明:当调用xTaskGetSchulerState()时将返回指示调度状态的值。

函数返回值:

  • taskSCHEDULER_NOT_STARTED:只有当xTaskGetSchedulerState( ) 在调用vTaskStartScheduler( )之前调用时才会返回该值。
  • taskSCHEDULER_RUNNING:调度器不在阻塞态时,如果调用xTaskGetSchedulerState( )则返回该值;
  • taskSCHEDULER_SUSPENDED:由于调用vTaskSuspendAll( ),调度器在阻塞态返回该值。

xTaskResumeFromISR

说明:当该参数设置为(Enable)时,系统Include xTaskResumeFromISR( ) API函数;

BaseType_t xTaskResumeFromISR( TaskHandle_t pxTaskToResume );
函数说明:在中断服务程序中调用该函数,通过调用vTaskSuspend( )进入挂起态的任务将切换为就绪态。

参数:

  • pxTaskToResume:被切出挂起态的任务句柄;

返回值:

  • pdTRUE:如果任务被切换为非阻塞态后有一个优先级等于或高于当前正在执行的任务(被中中断的任务),意味着在退出中断之前需要进行上下文切换。返回pdTURE.
  • pdFALSE:如果任务被切换为非阻塞态后有一个优先级低于当前正在执行的任务(被中断的任务),意味着在退出中断之前不需要进行上下文切换。返回pdFLASE.

xQueueGetMutexHolder

说明:

xSemaphoreGetMutexHolder

说明:当该参数设置为(Enable)时,系统Include xSemaphoreGetMutexHolder() API函数;

TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );
函数说明:如果有的话,返回获取函数参数中互斥量的任务句柄。使用该函数config USE_MUTEXES和xSemaphoreGetMutexHolder都需要使能(设置为1);

参数:

  • xMutex:被查询的互斥信号量句柄;

返回值:

  • NULL:①参数xMutex指定的信号量不是一个互斥类型信号量;②信号量存在,但是没有被任务获取;
  • Any other value:返回xMutex指定的信号量被任务获取的句柄;

pcTaskGetTaskName

说明:

uxTaskGetStackHighWaterMark

说明:当该参数设置为(Enable)时,系统Include uxTaskGetStackHighWaterMark( ) API函数;

UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );

函数说明:每个任务维护属于它自己的栈空间,栈空间总量在任务创建时进行设定。uxTaskGetStackHighWaterMark( ) 用了查询指定任务的运行历史中,其栈空间还差多少就溢出。这个值被称为栈空间的“高水线(High Water Mark)”。uxTaskGetStackHighWaterMark( ) 的执行需要消耗比较长的时间,所以仅仅推荐使用在测试和Debug过程中。

参数:

  • xTask:被查询的任务句柄,一个任务通过传入NULL能够查询自己的栈高水线。

返回参数:

  • 任务栈空间的实际使用量会随着任务执行和中断处理过程上下浮动。uxTaskGetStackHighWaterMark()返回从任务启动执行开始的运行历史中,栈空间具有的最小剩余量。这个值即是栈空间使用达到最深时的剩下的未使用的栈空间。这个值越是接近 0,则这个任务就越是离栈溢出不远了。

xTaskGetCurrentTaskHandle

说明:当该参数设置为(Enable)时,系统Include xTaskGetCurrentTaskHandle() API函数;

TaskHandle_t xTaskGetCurrentTaskHandle( void );
函数说明:返回运行态任务的句柄(xTaskGetCurrentTaskHandle();被调用的任务句柄)

返回值:

  • 调用该函数的任务句柄;

eTaskGetState

说明:当该参数设置为(Enable)时,系统Include eTaskGetState() API函数;

eTaskState eTaskGetState( TaskHandle_t pxTask );
函数说明:返回执行eTaskGetState时,pxTask任务枚举型状态;

参数:

  • pxTask:任务句柄;

返回值:

  • 下面的列表列出了eTaskState将返回被pxTask参数调用的任务可能返回状态
  • State  Return  Value
    Running(运行态) eRunning(任务查询自己的状态)
    Ready(就绪态) eReady
    Blocked(阻塞态) eBlocked
    Suspended(挂起态) eSuspended
    Deleted(被删除) eDeleted(任务资源等待被回收)

xEventGroupSetBitFromISR

说明:INCLUDE_xEventGroupSetBitsFromISR、config USE_TIMERS、INCLUDE_xTimerPendFunctionCall必须使能才能调用xEventGroupBitsFromISR() 函数。

BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );
函数说明:设置指定的事件组标志位为1。该函数是xEventGroupSetBits()中断服务函数调用的版本。在事件组中设置标志位,将使等待该事件标志位的所有任务退出阻塞态。函数xEventGroupSetBitsFromISR对事件标志组的操作是不确定性操作,因为不知道当前有多少个任务在等待此事件标志。而FreeRTOS不运行在中断服务程序和临界段中执行不确定性操作。同时也为了不在临界段中执行此不确定
操作,将临界段改成由调度锁来完成。这样不确定性操作在中断服务程序和临界段中执行的问题就都得到解决了。由于函数 xEventGroupSetBitsFromISR 对事件标志的置位操作是在 daemon 任务里面执行的,如果想让置位操作立即生效,即让等此事件标志的任务能够得到及时执行,需要设置 daemon 任务的优先级高于使用此事件标志组的所有其它任务。daemon任务优先级在config TIMER_TASK_PRIORITY被设置。
参数:

  • xEventGroup:被设置标志位的事件组句柄。该事件组必须已经通过调用xEventGroupCreat()函数被创建。
  • uxBitsToSet:第 2 个参数表示 24 个可设置的事件标志位,EventBits_t 是定义的 32 位变量(详解 18.1.2 小节说
    明),低 24 位用于事件标志设置。变量 uxBitsToSet 的低 24 位的某个位设置为 1,那么被设置的
    事件标志组的相应位就设置为 1。 变量 uxBitsToSet 设置为 0 的位对事件标志相应位没有影响。比
    如设置变量 uxBitsToSet = 0x0003 就表示将事件标志的位 0 和位 1 设置为 1,其余位没有变化。
  • pxHigherPriorityTaskWoken:调用xEventGroupBitsFromISR()的结果是信息被发送到RTOS daemon任务。如果daemon任务的优先级比当前运行任务的优先级高,*pxHigherPriorityTaskWoken将xEventGroupBitsFromISR()被设置为pdTRUE,指示上下文切换的请求需要在中断退出之前执行 。因此,*pxHigherPriorityTaskWoken初始化的时候应该为pdFALSE。

返回值:

  • pdPASS:消息成功发送给daemon任务。
  • pdFAIL:因为定制器命令队列满了,消息不能发送给RTOS daemon任务(也称之为定时器服务任务)。队列的长度通过config TIMER_QUEUE_LENGTH设置。

xTimerPendFunctionCall

说明:config USE_TIMERS、xTimerPendFunctionCall必须使能,才能使用xTimerPendFunctionCall()和xTimerPendFunctionCallFromCallISR()函数;

BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, TickType_t xTicksToWait )
函数说明:

BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend, void *pvParameter1, uint32_t ulParameter2, BaseType_t *pxHigherPriorityTaskWoken );
函数说明:

xTaskAbortDelay

说明:当该参数设置为(Enable)时,系统xTaskAbortDelay() API函数;

BaseType_t xTaskAbortDelay( TaskHandle_t xTask );
函数说明:调用xTaskAbortDelay()将让任务切出阻塞态到就绪态,即使这个任务等待的事件没有发生或任务进入阻塞态指定的超时没有到来。

参数:

  • xTask:将要切出阻塞态任务句柄;

返回值:

  • 如果任务成功的切出了阻塞态返回pdPASS,如果切出阻塞态失败,将返回pdFAIL;

xTaskGetHandle

说明:当该参数设置为(Enable)时,系统xTaskGetHandle() API函数;

TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );
函数说明:此函数通过函数的名字获取函数的句柄,在使用xTaskCreat()或xTaskCreatStatic()创建任务的时候都会给任务分配一个任务名,函数xTaskGetHandle()就是使用这个名字来查询其对应的任务句柄的。xTaskGetHandle需要较长的时间执行,所有推荐仅仅使用xTaskGetHandle( )函数一次(被xTaskGetHandle返回的句柄可以存储起来为以后使用)。

参数:

  • *pcNameToQuery:被查询的任务名。任务名为标准NULL结尾的字符串;

返回值:

  • 如果存在与指定的 pcNameToQuery同名的参数任务,该任务的句柄将会被返回;如果没有任务与指定的pcNameToQuery同名参数的任务,将返回NULL;

 

  相关解决方案