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

中国城乡住房和城乡建设部网站首页网店推广方法

中国城乡住房和城乡建设部网站首页,网店推广方法,网站模板 免费,网站做接口到app价格FreeRTOS中文数据手册:https://www.freertos.org/zh-cn-cmn-s/RTOS.html 任务函数 任务函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreateStatic()使用静态的方法创建一个任务xTaskCreatePinnedToCore指定任务运行的核心(最后一个参数)vTaskDelete()删…

FreeRTOS中文数据手册:https://www.freertos.org/zh-cn-cmn-s/RTOS.html

任务函数

任务函数描述
xTaskCreate()使用动态的方法创建一个任务
xTaskCreateStatic()使用静态的方法创建一个任务
xTaskCreatePinnedToCore指定任务运行的核心(最后一个参数)
vTaskDelete()删除一个任务
vTaskDelete(NULL)不创建任务句柄,表示删除当前任务

xTaskCreate()

BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,                 // 函数指针, 任务函数const char *const pcName,                  // 任务的名字const configSTACK_DEPTH_TYPE usStackDepth, // 栈大小void *const pvParameters,                  // 调用任务函数时传入的参数UBaseType_t uxPriority,                    // 优先级TaskHandle_t *const pxCreatedTask);        // 任务句柄, 以后使用它来操作这个任务

任务的句柄,相当于任务的地址,可用通过获取任务的句柄,对任务进行设置。

#include <Arduino.h>TaskHandle_t myHandle = NULL; // 创建一个任务句柄,空指针,避免产生野指针
void mytask(void *pt)         // 不指定传入指针的类型
{while (1){Serial.println("hello world");vTaskDelay(1000);}
}void setup()
{xTaskCreate(mytask, "", 1024, NULL, 1, &myHandle);vTaskDelay(1000);if (myHandle != NULL){vTaskDelete(myHandle); // 任务被删除后就不会在执行了,可以用于删除setup这个任务}
}void loop()
{
}

Task四种输入参数

传递整数
#include <Arduino.h>int testnum = 1;void mytask(void *pt)
{int *pint = (int *)pt;  // 数据解耦Serial.println(*pint);  // 输出结果为1vTaskDelete(NULL);
}void setup()
{Serial.begin(9600);xTaskCreate(mytask, "", 1024, (void *)&testnum, 1, NULL);
}void loop()
{
}
传递数组
#include <Arduino.h>int array[] = {1, 2, 3};void mytask(void *pt)
{int *parray = (int *)pt;  // 强制转换为数组指针for (int i = 0; i < sizeof(array) / sizeof(int); i++) {Serial.println(*(parray + i));  // 输出结果:1 2 3}vTaskDelete(NULL);
}void setup()
{Serial.begin(9600);// 数组名为数组元素的首地址,所以不需要&xTaskCreate(mytask, "", 1024 * 2, (void *)array, 1, NULL);
}void loop()
{
}
传递结构体
#include <Arduino.h>typedef struct STRUCT
{int a;char b;
} myStruct;myStruct test = {2, 'a'};void mytask(void *pt)
{myStruct *mytest = (myStruct *)pt; // 强制转换为结构体指针Serial.println(mytest->a); // 输出2Serial.println(mytest->b); // 输出avTaskDelete(NULL);
}void setup()
{Serial.begin(9600);xTaskCreate(mytask, "", 1024, (void *)&test, 1, NULL);
}void loop()
{
}
传递字符串
#include <Arduino.h>static const char *str = "hello world"; // static修饰代表只能在本文件中使用void mytask(void *pt)
{char *pstr = (char *)pt; // 强制转换为字符指针Serial.println(pstr);vTaskDelete(NULL);
}void setup()
{Serial.begin(115200);xTaskCreate(mytask, "", 1024, (void *)&str, 1, NULL);
}void loop()
{
}

任务优先级

一共有25个优先级别,最低为0,最高为24。(可用修改优先级别的数目超过25,但是不建议,级别越高,越占内存)

  • 同一优先级别:创建以后,顺序运行,切换相同的时间线,给与相同的运行时间
  • 不同优先级别:任务创建以后,先运行优先级别的任务,再运行低级别的任务
/*获取任务优先级、修改任务优先级*/UBaseType_t priority = 0;   // 任务优先级变量TaskHandle_t pxtask = NULL; // 创建任务的句柄xTaskCreatePinnedToCore(task1, "", 1024 * 2, NULL, 1, &pxtask, 1);priority = uxTaskPriorityGet(pxtask); // 查看任务的优先级vTaskPrioritySet(pxtask, 3);          // 设置任务的优先级
// 这种方法,设置优先级不起作用xTaskCreate(task1, "", 1024 * 2, NULL, 1, NULL);xTaskCreate(task2, "", 1024 * 2, NULL, 2, NULL);
  xTaskCreatePinnedToCore(task1, "", 1024 * 2, NULL, 1, NULL, 1);xTaskCreatePinnedToCore(task2, "", 1024 * 2, NULL, 2, NULL, 1);

使用ESP32测试注意事项:

  • 由于ESP32具有双核运行的功能,因此设置优先级和任务挂起无效,需要指定任务工作的核心,在同一个核心上,设置优先级才起作用。

任务的挂起和恢复

任务的状态:running、ready、blocked、suspended(挂起,暂停)

  • running:任务处于运行状态,如果运行 RTOS 的处理器只有一个内核,那么在任何给定时间内都只能有一个任务处于运行状态。
  • ready:不处于阻塞或挂起状态,但目前没有执行的任务,因为同等或更高优先级的不同任务已经处于运行状态。
  • blocked:如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态),直到延迟结束一个时间事件。
  • 挂起状态:与“阻塞”状态下的任务一样,“挂起”状态下的任务不能被选择进入运行状态,但处于挂起状态的任务 没有超时。
/*任务挂起*/TaskHandle_t pxtask = NULL; // 创建任务的句柄xTaskCreatePinnedToCore(task1, "", 1024 * 2, NULL, 1, &pxtask, 1);vTaskSuspend(pxtask);  // 挂起任务,任务不再执行vTaskResume(pxtask);  // 恢复被挂起的任务,继续执行vTaskSuspendAll();    // 挂起所有函数,挂起后不可以执行vTaskResumeAll();     // 恢复所有挂起函数

Task系统信息显示

vTaskList()

Task堆栈设置和调试

uxTaskGetStackHighWaterMark(句柄)查看当前函数剩余的内存大小,如果分配的内存不够,程序虽然不会报错,但是开发板会不断地重启。
分配的数量每+1,内存+4byte
以word为单位,1word = 4bytes

TaskHandle_t taskHandle; // 计算task的空间大小
xTaskCreatePinnedToCore(task1, "", 1024 * 2, NULL, 1, &taskHandle;, 1);int waterMark = uxTaskGetStackHighWaterMark(taskHandle);
Serial.print(F("Task Free Memory: ")); // 任务剩余空间
Serial.print(waterMark);  // 返回值即是当前任务所剩栈空间的最小值

Task看门狗

  1. watch dog有两种:一种是中断的watch dog,一种是task的watch dog
  2. 中断看门狗里面不能执行太多的代码,避免其他任务没有时间执行
  3. esp_task_wdt_add(句柄)开启看门狗
  4. esp_task_wdt_reset(句柄)喂狗
http://www.dinnco.com/news/60597.html

相关文章:

  • 网站做动态图片大全百度视频免费下载
  • 评价一个网站设计项目的好坏网络营销成功案例介绍
  • 建微网站有什么好处关键词完整版
  • 企业网站建设排名官网营销方案怎么写?
  • 阿里服务器可以做多少个网站网站如何做seo推广
  • 深圳俄语网站建设广州最新新闻事件
  • 做电影网站被告版权seo网络优化是做什么的
  • nginx即代理又做网站泉州全网营销优化
  • 外贸公司网站模板国内新闻最新消息10条
  • 哪个公司网站做的好爱站长尾关键词挖掘工具
  • 成都保障房中心官方网站武汉网站排名推广
  • 大连网站推广排名国产免费crm系统有哪些在线
  • 用于手机的导航网站要怎么做手机上制作网页
  • dedecms 做影网站快速整站优化
  • c#网站开发案例源码关键词排名怎样
  • 软文推广文章案例专业网站优化推广
  • 卡盟网站专用主机全网营销推广方案
  • 沧州做网站优化bt搜索引擎下载
  • 北京市朝阳区社会建设工作办公网站百度惠生活怎么优化排名
  • 从手机上可以做网站吗关键词出价计算公式
  • 有没有专做烘焙的网站产品营销网站建设
  • 做融资的网站有哪些活动推广文案
  • dreamweaver8做网站推广方案范例
  • 北京网站搭建服务廊坊seo关键词排名
  • 福州企业网站建站模板广告策划案优秀案例
  • 设计网站推荐百度贴吧网络推广的平台有哪些
  • 威海制作网站我想在百度上发布广告怎么发
  • 垂直电商网站有哪些页面seo优化
  • wordpress添加客服seo网课培训
  • 葫芦岛建设信息网站免费二级域名申请网站