ESP32学习第四天-Freertos内存管理

2024-05-12 14:36

本文主要是介绍ESP32学习第四天-Freertos内存管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 为什么要进行内存管理,是因为程序内存空间有限,必须要合理分配内存。

TaskHandle_t taskHandle;

创建一个任务句柄,后续对任务进行操作。 

int heapSize = ESP.getHeapSize();

得到一共有多少内存空间

  int heapFree = ESP.getFreeHeap();

得到还有多少空闲的内存空间 

int waterMark = uxTaskGetStackHighWaterMark(taskHandle);Serial.print("Task Free Memory: ");Serial.print(waterMark);Serial.println(" Bytes");Serial.print("Task Used Memory: ");Serial.print(taskMem - waterMark);Serial.println(" Bytes");

创建一个变量用来存饭水位线

将分配的内存减去水位线得到已经使用的内存

TaskHandle_t taskHandle;
int taskMem = 1024;void task(void *ptParam) {//volatile char hello[1000] = {0}; //必须要用volatile修饰语,否则会被编译器优化掉while (1) {//不推荐在task中执行,因为Serial.print也会消耗内存// vTaskDelay(2000);// int waterMark = uxTaskGetStackHighWaterMark(nullptr);// Serial.print("Task Free Memory: ");// Serial.print(waterMark);// Serial.println(" Bytes");// Serial.print("Task Used Memory: ");// Serial.print(taskMem - waterMark);// Serial.println(" Bytes");// Serial.println("");}
}
void setup() {Serial.begin(115200);int heapSize = ESP.getHeapSize();Serial.print("Total Heap Size:  ");Serial.print(heapSize);Serial.println(" Bytes");int heapFree = ESP.getFreeHeap();Serial.print("Free Heap Size:  ");Serial.print(heapFree);Serial.println(" Bytes");Serial.println("");Serial.println("Create Task ...");xTaskCreate(task, "", taskMem, NULL, 1, &taskHandle);Serial.print("Free Heap Size:  ");Serial.print(ESP.getFreeHeap());Serial.println(" Bytes");Serial.println("");vTaskDelay(2000);int waterMark = uxTaskGetStackHighWaterMark(taskHandle);Serial.print("Task Free Memory: ");Serial.print(waterMark);Serial.println(" Bytes");Serial.print("Task Used Memory: ");Serial.print(taskMem - waterMark);Serial.println(" Bytes");}void loop() {}

这篇关于ESP32学习第四天-Freertos内存管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982890

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2