当前位置:   article > 正文

一个基于单片机内存管理-开源模块

一个基于单片机内存管理-开源模块

概述

        此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。

源码仓库:GitHub - chenqy2018/mem_malloc

mem_malloc介绍

一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎片。而且可能因为空间不足而分配失败,从而导致系统崩溃,因此应该慎用,或者自己实现内存管理。mem_malloc就是一个不会产生内存碎片的、适合单片机使用的内存管理模块。其与使用malloc的区别如:

算法原理:定义一个数组作为动态分配的堆空间,低地址空间保存管理数据,高地址空间实际分配给用户的缓存(类似堆栈使用,分配是往中间靠拢),free时移动高地址用户空间(以时间换空间),使得未使用的空间都是连续的。

一、开发环境

1、硬件平台
     STM32F401CEU6
     内部Flash : 512Kbytes,SARM : 96 Kbytes

二、STM32CubeMx配置

 2.1、系统时钟配置

2.2、下载调试配置

2.3、usart1配置

2.4、生成代码

2.5、打开工程并编译

三、编码 

1、usart.c添加打印

  1. /* USER CODE BEGIN 1 */
  2. #include "stdio.h"
  3. #ifdef __GNUC__
  4. /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
  5. set to 'Yes') calls __io_putchar() */
  6. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  7. #else
  8. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  9. #endif /* __GNUC__ */
  10. /**
  11. * @brief Retargets the C library printf function to the USART.
  12. * @param None
  13. * @retval None
  14. */
  15. PUTCHAR_PROTOTYPE
  16. {
  17. /* Place your implementation of fputc here */
  18. /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  19. HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  20. return ch;
  21. }
  22. int fgetc(FILE * f)
  23. {
  24. uint8_t ch = 0;
  25. HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 0xffff);
  26. return ch;
  27. }
  28. /* USER CODE END 1 */

记得把这个勾上,不然 uart 打不出来。 

在根目录创建malloc文件夹,将下载好的mem_malloc代码,分别把mem_malloc.c、mem_malloc.h复制到工程目录下,并添加到工程里:

然后进行编译,编译后会报以下错误:莫慌一个个解决它即可。


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/448675
推荐阅读
相关标签
  

闽ICP备14008679号