当前位置: 首页 > wzjs >正文

国家骨干高职院校建设网站东莞营销型高端网站建设

国家骨干高职院校建设网站,东莞营销型高端网站建设,网站建设法规政策,如何用kali做网站渗透1. 为什么要创建任务? 要知道为什么要创建任务,首先我们要了解下裸机程序设计模式和多任务模式的区别。 //裸机程序设计模式 while(1) {funcA();funcB(); }//多任务模式 void taskA() {while(1){} } void taskB() {while(1){} } void taskC() {while(1…
1. 为什么要创建任务?

要知道为什么要创建任务,首先我们要了解下裸机程序设计模式和多任务模式的区别。

//裸机程序设计模式
while(1)
{funcA();funcB();
}
//多任务模式
void taskA()
{while(1){}
}
void taskB()
{while(1){}
}
void taskC()
{while(1){}
}

执行情况:

  • 裸机程序:funcA()执行完成后,funcB()才能执行。
  • 多任务程序:任务A\B\C实现分时交错执行,在切换时间很短的情况下几乎感觉不到切换过程,三个任务就跟同时执行一样。
    在这里插入图片描述

当然,以上差异只是冰山一角。但也能说明多任务程序设计模式的优点了。

使用多任务程序设计模式开发的实时操作系统有很多。其中开源又免费且使用最多的就是freeRTOS 了。接下来我将基于ESP32平台,使用freeRTOS开启我的学习之旅。

2. 创建任务

任务分为两种,动态的,静态的。所谓动态静态,其实是和内存分配有关的。动态任务即动态分配内存;静态任务即静态分配内存,内存由编程者自行分配

2.1 创建动态任务
  • API函数:
BaseType_t xTaskCreatePinnedToCore(TaskFunction_t pxTaskCode, const char *const pcName, const uint32_t ulStackDepth, void *const pvParameters, UBaseType_t uxPriority, TaskHandle_t *const pxCreatedTask, const BaseType_t xCoreID)
  • 参数说明:

​ pxTaskCode:任务函数

​ pcName:任务名称,只做调试使用

​ ulStackDepth:任务栈深度。每个任务都有自己的栈,将变量等存储在此栈中,这里指定深度,动态分配。

​ pvParameters:任务参数,可用于任务间传参

​ uxPriority:任务优先级,原则上不限制数值大小。数值越大,优先级越高。

​ pxCreatedTask:引用创建的任务,在后续使用时加以说明,当前设置为NULL

​ xCoreID: CPU和的ID,在esp32上有两个核,参数设置0,则任务分配给核0,参数设置1,则任务分配给核1,设置为tskNO_AFFINITY,则可以在两个核上都能执行。

  • 使用过程

和helloworld程序一样,在虚拟机上创建一个工程,然后使用vscode远程打开

在这里插入图片描述

完整代码如下:

#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <esp_log.h>void  vTaskA(void* pvParameters)
{/* 和大多数任务一样,该任务处于一个死循环中。 */for( ; ; ){ESP_LOGI("taskA","hello vTaskA");vTaskDelay(pdMS_TO_TICKS(500));}}void  vTaskB(void* pvParameters)
{/* 和大多数任务一样,该任务处于一个死循环中。 */for( ; ; ){ESP_LOGI("taskB","hello vTaskB");vTaskDelay(pdMS_TO_TICKS(500));}}void app_main(void)
{/* 创建第一个任务。需要说明的是一个实用的应用程序中应当检测函数xTaskCreate()的返回值,以确保任务创建成功。 */xTaskCreatePinnedToCore(vTaskA,		/* 指向任务函数的指针 */"TaskA",	/* 任务文本名,只在调试中使用 */2048,		/* 栈深度 – 大多数小型微控制器会使用的值会比此值小得多 */NULL,		/* 没有任务参数 */3,			/* 此任务运行在优先级3上. */NULL,		/* 不会用到任务句柄 */1			/* 在core 1上运行 */);xTaskCreatePinnedToCore(vTaskB,"TaskB",2048,NULL,3,NULL,1);}

在这里插入图片描述

任务A、B几乎同时执行。

2.2 创建静态任务
  • 使用的API函数

    TaskHandle_t xTaskCreateStaticPinnedToCore( 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,const BaseType_t xCoreID )
    
  • 参数说明

  • 参数说明:

​ pxTaskCode:任务函数

​ pcName:任务名称,只做调试使用

​ ulStackDepth:任务栈深度。每个任务都有自己的栈,将变量等存储在此栈中,这里指定深度,动态分配。

​ pvParameters:任务参数,可用于任务间传参

​ uxPriority:任务优先级,原则上不限制数值大小。数值越大,优先级越高。

​ puxStackBuffer:静态分配的堆栈空间。它是一个指向堆栈缓冲区的指针,必须保证足够的空间来存储任务的栈数据

​ pxTaskBuffer:静态分配的任务控制块。主要作用是保存与任务相关的所有信息

​ xCoreID: CPU和的ID,在esp32上有两个核,参数设置0,则任务分配给核0,参数设置1,则任务分配给核1,设置为tskNO_AFFINITY,则可以在两个核上都能执行。

  • 使用实例
#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <esp_log.h>//在IDF中栈的最小值为2048
#define STATIC_SIZE 2048StackType_t stackBuf[STATIC_SIZE];//自定义栈缓存区
StaticTask_t taskBuf;//任务信息保存在这里void vTaskA(void* pvParam)
{while(1){ESP_LOGI("taskA","hello taskA");ESP_LOGI("taskA","the task work in core %d",taskBuf.xDummyCoreID);//打印此任务在哪个核上运行vTaskDelay(pdMS_TO_TICKS(1000));//阻塞1秒,方便查看。pdMS_TO_TICKS是将毫秒转换为滴答时钟}}void app_main(void)
{xTaskCreateStaticPinnedToCore(vTaskA,"vTaskA",2048,NULL,3,stackBuf,&taskBuf,1);
}

在这里插入图片描述

3. 总结

任务的创建是freertos里最简单也是最基础的操作,是必要掌握的内容。以上案例也是最基础的应用,还有很多参数目前还没有使用。在后期中使用时加入。


文章转载自:

http://rUTRlHCp.wckrL.cn
http://ntR5XTuj.wckrL.cn
http://JK9AZWJw.wckrL.cn
http://aYnDTuIX.wckrL.cn
http://7CgY26nR.wckrL.cn
http://uiToWp1Y.wckrL.cn
http://Lx1yQVkd.wckrL.cn
http://B6Xf87FS.wckrL.cn
http://w4XQE49Y.wckrL.cn
http://RxnMpM2N.wckrL.cn
http://O6CFLDiH.wckrL.cn
http://s49sT42j.wckrL.cn
http://1GvO9UQO.wckrL.cn
http://cdbFTQdT.wckrL.cn
http://k2R7U2JY.wckrL.cn
http://97CyZTVl.wckrL.cn
http://rKGwbMRk.wckrL.cn
http://hvCfBAqQ.wckrL.cn
http://ASGeGI0w.wckrL.cn
http://xR8fLPIq.wckrL.cn
http://5ChejKvZ.wckrL.cn
http://2VEaolOu.wckrL.cn
http://jzbzPUXm.wckrL.cn
http://be2hVbBT.wckrL.cn
http://WiAp3jfi.wckrL.cn
http://O2zZNW5H.wckrL.cn
http://Exi1hgP2.wckrL.cn
http://cr6QqEkA.wckrL.cn
http://74AMvcEr.wckrL.cn
http://xhASRMU9.wckrL.cn
http://www.dtcms.com/wzjs/629578.html

相关文章:

  • 成都 企业 网站制作建公司网站一般多少钱
  • 网站域名空间5个G的多少钱wordpress转移过电脑
  • 坂田网站设计广告发光字制作培训班
  • 企业网站开发方案注册公司流程 上海
  • 海外产品网站建设泉州工程建设招投标信息网
  • 网站建设控制建站模板网站设计
  • 网站开发合同 保密条款企业寻找客户有哪些途径
  • 长沙营销网站建设什么是域名为什么需要它
  • 黑白灰网站建设企业银行app
  • 天津大学生专业做网站家具企业网站模板
  • 网站第三方统计代码微信网站用什么语言开发
  • 怎么建设一个自己的电商网站厦门杏林建设企业网站
  • 网站开发毕设需求分析营口网站建设
  • 游戏类网站欣赏为什么原网站建设公司不愿意透露域名管理权限给客户
  • 苏州做网站最好公司哪家好手机网站制作教程软件
  • 宣传不网站网站使用网络图片做素材 侵权
  • 重庆建站培训地方网站
  • 国外优秀vi设计网站做网站怎么合并单元格
  • 做网站要懂哪些wordpress部署文件
  • 建设网站什么语言网络营销产品策略案例
  • 中职校园网站建设建议1920的网站做字体大小
  • 凡科做网站技巧天津培训网站建设
  • 巴中建网站的公司wordpress首页文章分类
  • 东莞大朗网站设计在哪个网站可以做酒店预定单
  • 网网站开发如何进行网页设计和网站制作
  • 最好的设计师网站好玩的网游
  • 用php做购物网站视频wordpress rss 图片
  • 网站编辑步骤有哪些全椒县城乡规划建设局网站
  • 个人网站 备案 名称有口碑的坪山网站建设
  • 网站开发的内容我想做个门户网站怎么做