你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32 FreeRTOS任务相关API

[复制链接]
STMCU小助手 发布时间:2022-6-18 17:00
01. 概述
FreeRTOS最基本的功能就是任务管理,而任务挂你最基本的操作就是创建和删除任务,FreeRTOS的任务创建和删除API函数如下表所示:

2020110909573996.png

02. xTaskCreate()函数
  1. BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
  2.                             const char * const pcName,   
  3.                             const configSTACK_DEPTH_TYPE usStackDepth,
  4.                             void * const pvParameters,
  5.                             UBaseType_t uxPriority,
  6.                             TaskHandle_t * const pxCreatedTask )
  7. 功能:
  8.         创建一个任务,任务需要RAM来保存与任务有关的状态信息(任务控制块),任务也需要一定的RAM来作为任务堆栈。如果使用函数xTaskCreate()来创建任务的话那么这些所需的RAM就会自动的从FreeRTOS的堆中分配。

  9. 参数:
  10.         pxTaskCode        任务函数
  11.     pcName        任务名字,一般用于追踪和调试,任务名字长度不能超过configMax_TASK_NAME_LEN。
  12.     usStackDepth 任务堆栈大小,注意实际申请到的堆栈是usStackDepth的4倍。其中空闲任务的任务堆栈大小为configMINIMAL_STACK_SIZE。
  13.     pvParameters 传递给任务函数的参数
  14.     uxPriority 任务优先级,范围0-configMAX_PRIORITIES-1
  15.     pxCreatedTask 任务句柄,任务创建成功以后会返回此任务的任务句柄,这个句柄其实就是任务的任务堆栈。此参数就用来保存这个任务句柄。其它API函数可能会使用到这个句柄。   

  16. 返回值:
  17.     pdPASS 成功创建任务
  18.     errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 任务创建失败 因为堆内存不足     
复制代码

应用示例

  1. /* 创建任务. */
  2. void vTaskCode( void * pvParameters )
  3. {
  4.     for( ;; )
  5.     {
  6.        /* 任务代码放在这里 */
  7.     }
  8. }

  9. /* 创建任务函数 */
  10. void vOtherFunction( void )
  11. {
  12.     static unsigned char ucParameterToPass;
  13.     xTaskHandlexHandle;

  14.      /* 创建任务,存储句柄。注:传递的参数ucParameterToPass必须和任务具有相同的生存周期,
  15.         因此这里定义为静态变量。如果它只是一个自动变量,可能不会有太长的生存周期,因为
  16.                 中断和高优先级任务可能会用到它。 */
  17.      xTaskCreate( vTaskCode, "NAME", STACK_SIZE,&ucParameterToPass, tskIDLE_PRIORITY, &xHandle );

  18.      /* 使用句柄删除任务. */
  19.     if( xHandle !=NULL )
  20.     {
  21.         vTaskDelete( xHandle );
  22.     }
  23. }
复制代码

03. xTaskCreateStatic()函数
  1. TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,
  2.                                     const char * const pcName,
  3.                                     const uint32_t ulStackDepth,
  4.                                     void * const pvParameters,
  5.                                     UBaseType_t uxPriority,
  6.                                     StackType_t * const puxStackBuffer,
  7.                                     StaticTask_t * const pxTaskBuffer )

  8.     此函数和xTaskCreate()的功能相同,也是用来创建任务的,但是使用此函数创建的任务所需的RAM需要用户来提供。如果要使用该函数的话就需要将宏configSUPPORT_STATIC_ALLOCATION定义为1。

  9. 参数:
  10.         pxTaskCode        任务函数
  11.     pcName        任务名字,一般用于追踪和调试,任务名字长度不能超过configMax_TASK_NAME_LEN。
  12.     usStackDepth 任务堆栈大小,注意实际申请到的堆栈是usStackDepth的4倍。其中空闲任务的任务堆栈大小为configMINIMAL_STACK_SIZE。
  13.     pvParameters 传递给任务函数的参数
  14.     uxPriority 任务优先级,范围0-configMAX_PRIORITIES-1
  15.     puxStackBuffer 任务堆栈 一般为数组,数组类型腰围StackType_t类型。
  16.     pxTaskBuffer 任务控制块


  17. 返回值:
  18.    NULL 任务创建失败,puxStackBuffer或者pxTaskBuffer为NULL的时候会导致这个错误的发生。
  19.    其它值 任务创建成功,返回任务的任务句柄
复制代码

04. xTaskCreateRestricted()函数

  1. BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,
  2.                                       TaskHandle_t * pxCreatedTask )
  3. 功能:
  4.     创建任务,只不过此函数要求所使用的MCU有MPU内存保护单元,用此函数创建的任务会收到MPU的保护,其它的功能和函数xTAskCreate()一样。
  5. 参数:
  6.     pxTaskDefinition 指向一个结构体TaskParameters_t,这个及饿哦固体描述了任务的任务函数,堆栈大小,优先级等。
  7.     pxCreatedTask 任务句柄
  8. 返回值:
  9.     pdPASS 任务创建成功
  10.     其它值 任务为创建成功,很有可能是因为FreeRTOS的堆太小了。
复制代码

05. vTaskDelete()函数
从RTOS内核管理器中删除一个任务。任务删除后将会从就绪、阻塞、暂停和事件列表中移除。在文件FreeRTOSConfig.h中,必须定义宏INCLUDE_vTaskDelete 为1,本函数才有效。

注:被删除的任务,其在任务创建时由内核分配的存储空间,会由空闲任务释放。如果有应用程序调用xTaskDelete(),必须保证空闲任务获取一定的微控制器处理时间。任务代码自己分配的内存是不会自动释放的,因此删除任务前,应该将这些内存释放。

  1. void vTaskDelete( TaskHandle_t xTaskToDelete )
  2. 功能:
  3.     删除一个用函数xTaskCreate()或者xTaskCreateStatic()创建的任务。
  4. 参数:
  5.     xTaskToDelete 要删除的任务的任务句柄
  6. 返回值:
  7.     无
复制代码



收藏 评论0 发布时间:2022-6-18 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版