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

相关文章

golang内存对齐的项目实践

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

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

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

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int