vTaskList() 介绍
vTaskList() 使用
注意:
使用 vTaskList() 前需使能:
make menuconfig -> Component config -> FreeRTOS -> Enable FreeRTOS trace facility
make menuconfig -> Component config -> FreeRTOS -> Enable FreeRTOS trace facility -> Enable FreeRTOS stats formatting functions
通过上面配置,等同于使能 FreeRTOSConfig.h 中如下两个宏:
configUSE_TRACE_FACILITY 和 configUSE_STATS_FORMATTING_FUNCTIONS
vTaskList() 结果和高能预警
读者可以去 task.c 中查看 vTaskList() 相关实现逻辑,或更有助于读者理解。
例如: 基于 ESP8266, release/v3.3, commit:4c38ff31, 在 app_main() 中调用 vTaskList() 结果如下:
第一列: task name
即 xTaskCreate 创建该 task 时第二个参数。
如果名称过长,会根据 configMAX_TASK_NAME_LEN 截断。
第二列: task 当前状态
X: running
B: blocked
R: ready
D: deleted
S: suspended
第三列: task 优先级
即 xTaskCreate 创建该 task 时第四个参数。
数字越大,优先级越高,建议客户设置 task 优先级在 1-9 之间,慎行!
第四列: 最小剩余 task 栈空间,字节为单位
在 xTaskCreate 创建 task 时,给定的第三个参数值代表该 task 调度和运行过程中,最大可用 task 栈空间,以字节为单位(读者可以修改 portSTACK_TYPE 宏来决定是否以字节还是4字节为单位);
Task 如果 API 调用比较深,则使用的栈空间越大,也就意味着最小剩余 task 栈空间越小。
高能预警,做好笔记,熟读三遍:
A: 当某个 task 最小剩余 task 栈空间比较大时,适当减小 xTaskCreate 创建该 task 时给定的第三个参数值,可节约 DRAM,以优化系统内存。
B: 当某个 task 最小剩余 task 栈空间比较小时,适当增大 xTaskCreate 创建该 task 时给定的第三个参数值,可降低 task 栈溢出风险。
C: 如果对 SDK 没有深入了解,不要修改 系统 task 优先级和分配的最大可用栈空间。
D: 不要在系统 task 的 callback 函数里,添加过多代码,不要添加阻塞操作。
因为系统 task 通常都是经过优化配置的,如果代码深度较大,容易造成 task 栈溢出;
如果有阻塞操作,将导致该系统 task 接下来逻辑无法执行,甚至有死锁的可能。
例如:
sniffer 的 callback 函数: wifi_promiscuous_cb_t cb
WiFi callback 函数: system_event_cb_t cb
E: 减少应用代码 task 的个数,以优化内存。
例如:
多个 socket 数据流,可以通过 select() 放在同一个 task 里处理;
而不是一个 socket 数据流,一个 task;
更不要一个 socket 数据流,居然三个 task (接收 task, 发送 task, 处理 task), it is amazing!
F: 占用空间较大的变量,尽可能通过 malloc/calloc 等动态申请释放,以提高栈空间利用率。
第五列: task 创建顺序
————————————————
版权声明:本文为CSDN博主「乐鑫科技 Espressif」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/espressif/article/details/104719907
vTaskList() 介绍的更多相关文章
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
- ExtJS 4.2 介绍
本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...
- ExtJS 4.2 组件介绍
目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...
随机推荐
- canvas合并图片并长按保存
代码实现 <div class="pho-bg"> <img src="../../assets/images/FeedbackActivity/pos ...
- Oracle ORA28040报错解决
使用plsql Developer连接时,发现报ora-28040 No matching authentication protocol select username, account_statu ...
- mybatis查询sql时,在不分页的情况下,自动加了limit导致接口报错
今天在开发过程中,我遇到了很奇怪的问题.自己写的代码明明没有分页进行查询,但是打印出来的sql缺有limit 导致我getone的时候,出现了二个limit,导致接口报错. ### Cause: or ...
- Linux:服务器(CentOS)搭建FTP服务
Vsftpd(very secure FTP deamon)是众多Linux发行版中默认的FTP服务器.本文以CentOS 8(腾讯云)服务器为例,使用vsftpd搭建Linux云服务器的FTP服务器 ...
- JS篇(006)-怎样添加、移除、移动、复制、创建和查找节点?
答案: 1)创建新节点 createDocumentFragment() //创建一个 DOM 片段 createElement() //创建一个具体的元素 createTextNode() //创建 ...
- 实验:STM32F103烧写支持Arduino
1.搭建烧写环境 烧写器:ST-LINK. 2.启动stm32 flash烧写工具 3.连接识别CPU 4.打开generic-boot20_pc13.bin 5.烧写程序 6.查上miniUS ...
- 牛客小白月赛65——D-牛牛取石子
链接:https://ac.nowcoder.com/acm/contest/49888/D来源:牛客网 牛牛和牛妹在玩游戏,他们的游戏规则是这样的: 一共有两堆石子,第一堆有 aaa 个,第二堆有 ...
- 根据指定月份,打印该月份所属的季节。 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 if和switch各写一版
1.public class Month{ public static void main(String args[]){ for (int i = 1;i <= 12 ;i++ ) { if ...
- LOJ数列分块入门九题(中)
#6281. 数列分块入门 5 - 题目 - LibreOJ (loj.ac) 区间开方,区间求和题. 显然,针对区间维护开方操作很难做到,于是考虑其值的性质,显然,int范围内的值最多开方6次就会变 ...
- 2003031118—李伟—Python数据分析第四周作业—第二次作业
项目 matplotlib的使用 课程班级博客链接 班级博客 这个作业要求链接 作业要求 博客名称 2003031118-李伟-Python数据分析第四周作业-第二次作业 要求 每道题要有题目,代码( ...