FreeRTOS学习(二)

2 FreeRTOS任务相关API函数

  • 2.1 任务创建和删除API函数
    FreeRTOS创建和删除任务的主要函数如下:
函数描述
xTaskCreate( )使用动态方法创建一个任务
XTaskCreateStatic( )使用静态方法创建一个任务
xTaskCreateRegisterd( )创建一个使用MPU进行限制的任务,相关内存使用动态内存分配
xTaskDelete( )删除一个任务

2.1.1 函数XTaskCreate( )

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,	//任务函数
    const char * const pcName,	//任务名字
    const uint16_t usStackDepth,	//任务堆栈大小
    void * const pvParameters,		//传递给任务函数的参数
    UBaseType_t uxPriority,		//任务优先级
    TaskHandle_t * const pxCreatedTask )	//任务句柄
    
    返回值:
    pdPASS:任务创建成功;
    errCOULD_NOT_ALLOCTE_REQUIRED_MEMORY:创建失败
    
    参数说明:
    pxTaskCode:任务函数;
    PCName:任务名字,一般用于追踪和调试,名字长度不超过configMAX_TASK_LEN;
    usStackDepth:任务堆栈的大小,实际申请的大小是usStackDepth的4倍。其中空闲任务的任务堆栈大小是configMINIMAL_STACK_SIZE;
    pvParameters:传递给任务函数的参数;
    uxPriority:任务优先级,0~configMAX_PRIORITIES-1;
    pxCreatedTask:任务句柄。任务创建成功后会返回此任务的任务句柄,该句柄其实就是任务的堆栈,此参数用于保存这个任务句柄,其他的API函数会用到该句柄。
  • 2.1.2 函数xTaskCreateStatic( )
    该函数与xTaskCreate( )的功能相同,不同之处此函数创建任务时需要的RAM由用户来提供,如果需要使用该函数的话,则需要将宏configSUPPORT_STATIC_ALLOCTION定义为1,函数原型如下:

      TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,		//任务函数
      							    const char * const pcName,		//任务名
      							    const uint32_t ulStackDepth,		//任务堆栈大小
      							    void * const pvParameters,		//传递给任务函数的参数
      							    UBaseType_t uxPriority,			//任务优先级
      							    StackType_t * const puxStackBuffer,	//任务堆栈,一般为数组
      							    StaticTask_t * const pxTaskBuffer )	//任务控制块
      返回值:
      NULL:任务创建失败,puxStackBuffer或pxTaskBuffer为NULL的时候会导致这个错误发生;
      其他值:任务创建成功,返回任务的句柄;
    
  • 2.1.3 函数xTaskCreateRegsiterd( )
    此函数也是用于创建任务,但是该函数要求所使用的MCU要有MPU(内存保护单元),用此创建的任务会受到MPU的保护,其他功能和函数XTaskCreate( )一样。

      BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,	//指向一个结构体
      								    TaskParameters_t,描述了任务的任务函数、堆栈大小、优先级等。
      								    TaskHandle_t * pxCreatedTask )	//任务句柄
    
  • 2.1.4 函数xTaskDelete( )
    删除一个用动态和静态创建的的任务,被删除的任务不再存在,任务调度器无法再调度该任务。当一个任务被删除后,其所对应的句柄就不能再使用了。删除一个使用动态创建的(XTaskCreate( ))任务,其所申请的堆栈和控制块内存将会被释放掉。有静态方法创建的任务,所使用的堆栈就需要用户自己去释放掉所对应的内存,否则会导致内存泄漏。此函数的原型如下:

      vTaskDelete( TaskHandle_t xTaskToDelete);
      参数:xTaskToDelete,需要删除的任务的任务句柄;
    
  • 2.2 任务挂起和回复API函数
    当我们需要对某任务进行暂停或恢复的话,我们就需要使用到挂起或恢复,FreeRTOS所提供的任务挂起和回复API函数如下:

函数描述
vTaskSuspend( )挂起一个任务,使其不再执行
vTaskResume( )回复一个任务,使其进入就绪态
xTaskResumeFromISR( )中断服务函数中恢复一个任务的运行
  • 2.2.1 函数vTaskSuspend( )
    此函数用于将某一任务设置为挂起态,进入挂起态的任务将永远都不会进入运行态。退出挂起态的唯一方法是调用任务恢复函数vTaskResume( )或xTaskResumeFromISR( )。函数原型如下:

      void vTaskSuspend( TaskHandle_t xTaskToSuspend);
      参数:xTaskToSuspend,需要挂起任务所对应的任务句柄。
    
  • 2.2.2 函数vTaskResume( )
    将一个任务从挂起态恢复为就绪态,函数原型如下:

    Void vTaskResume(TaskHandle_t xTaskToResume);

  • 2.2.3 函数xTaskResumeFromISR( )
    该函数的功能与上一个所描述的功能是一样的,只不过在中断服务函数中只能调用该函数将一个任务从挂起态恢复到就绪态。

      BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume);
      返回值:
      pdTRUE:  恢复运行的任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数以后必须进行一次上下文切换。
      pdFALSE:  恢复运行的任务的任务优先级低于当前正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数的以后不需要进行上下文切换。
    
  • 2.3 其他任务函数
    在这里插入图片描述

  • 2.4 FreeRTOS常见内核控制函数
    在这里插入图片描述

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32的FreeRTOS使用上与传统的FreeRTOS有一些区别。在ESP32中,基本不需要单独配置FreeRTOSConfig.h文件,因为ESP-IDF中的menuconfig功能可以对所有涉及到的内容进行配置,使用起来更加直观和便利。主要的数据类型说明中,有一个重要的数据类型是TickType_t。 在ESP32的魔改版FreeRTOS中,很少使用正经的事件集,而是使用ESP-IDF提供的更方便的事件循环。这使得在ESP32中使用事件循环更加方便。 另外,ESP32的分区表是采用进制格式而不是CSV文件。ESP-IDF提供了gen_esp32part.py工具来配置和构建分区表。默认情况下,使用的是默认分区表。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【ESP32+freeRTOS学习笔记-(一)freeRTOS介绍】](https://blog.csdn.net/weixin_45499326/article/details/128226443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ESPIDF开发ESP32学习笔记【ESP32上的FreeRTOS】](https://blog.csdn.net/qq_40500005/article/details/114794039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值