19_系统内存管理
1.01_数据结构2.02_实战项目Zlog日志框架3.03_google测试框架4.04_串口打印print函数5.05_定时器6.06_GPIO输出控制7.07_IO外部中断8.08_了解STM32串口通讯9.09_学会单片机STM32的IIC通信10.10_学会单片机STM32看门狗11.11_学会单片机仿真调试Debug12.12_OTA功能设计13.13_实战 USB鼠标14.14_RTOS介绍15.15_搭建freertos工程16.16_freeRTOS 任务控制函数17.17_freeRTOS 任务状态切换18.18_系统时钟管理
19.19_系统内存管理
20.20_信号量21.21_消息队列22.22_Linux常用指令23.23_Linux工程搭建24.24_linux c多线程25.25_linux c 多进程26.26_linux 文件编程27.27_linux 网络编程系统内存管理
内存管理与程序好坏?
对于安全要求高的应用,尽可能不使用动态内存分配。
malloc()和free()
当RTOS内核需要RAM时,调用pvPortMalloc()函数来代替malloc()函数。当RAM要被释放时,调用vPortFree()函数来代替free()函数。
freeRTOS层使用c语言申请内存的方式申请一个很大的数组(此处configTOTAL-HEAP-SIZE的数值是15360),极端情况下,我们把可以申请到的所有空间全部申请下来。然后用户层调用的pvPortMalloc和vPortFree函数则是在此数组中操作,操作的函数原型自然是freeRTOS函数层中定义的。
FreeRTOS提供的五种内存分配方案
1
heap_1.c适合一些不会删除任务,队列以及信号量的任务,特别是一些比较简单的系统和一些对安全性要求比较高的系统。事实上,很多系统中只要创建了任务之后就会一直执行,不会删除任务。所以这个文件适用环境还是比较多的。2
heap_2.c能分配,能回收,但是回收时不考虑内存碎片的场所。适合一些申请和释放操作不是特别频繁,而且不会申请大数组的场所。
3
heap_3.c这种方法实际使用的还是c语言的malloc和free函数。与平台没有太大关系,线程保护。
4
heap_4.c内存分配和释放操作比较频繁的系统。例如要重复创建删除任务,队列,信号量等。
5
heap_5.c系统需要管理不连续的内存空间,例如接入外部ram的场所。
默认heap_4
printf("Heap size %d\n", xPortGetFreeHeapSize()); //获取剩余空间大小
uint8_t *buffer = pvPortMalloc(10); //申请空间
vPortFree(buffer); //释放空间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具