当前位置: 首页 > news >正文

USBD_malloc 禁止替换成 malloc 函数

stm32 的 CDC 虚拟串口库中的 USBD_malloc 使用的是 USBD_static_malloc 函数。定义如下

/*** @brief  Static single allocation.* @param  size: Size of allocated memory* @retval None*/
void *USBD_static_malloc(uint32_t size)
{UNUSED(size);static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef) / 4) + 1]; /* On 32-bit boundary */return mem;
}/*** @brief  Dummy memory free* @param  p: Pointer to allocated  memory address* @retval None*/
void USBD_static_free(void *p)
{UNUSED(p);
}

在调试时观察调用堆栈,可以发现它是在中断中被调用的
在这里插入图片描述
在这里插入图片描述


只要是在中断中,就禁止使用 malloc 函数。也禁止使用 freertos 的动态内存分配函数。这有 2 种解决办法:

  1. 重构 USB CDC 库,改成中断中释放信号量,让线程去处理。
  2. 自己设置中断中可用的内存池。

不然如果不需要实现多个虚拟串口,就老实用 cubemx 生成的这种静态分配。

http://www.dtcms.com/a/393304.html

相关文章:

  • 功能测试与测试用例设计方法详解
  • AXI DMA
  • 1:1复刻真实场景,机器人训练不再“纸上谈兵”
  • CMake快速上手:编译、构建与变量管理(包含示例)
  • vscode配置C/C++教程(含常见问题)
  • F021 五种推荐算法之美食外卖推荐可视化系统vue+flask
  • C++学习记录(10)模板进阶
  • cesium案例:三维钢铁厂园区开发平台(附源码下载)
  • 电商开放平台API接口对比爬虫的优势有哪些?
  • SpringDoc-OpenApi 现代化 API 文档生成工具介绍+使用
  • 打造现象级H5答题游戏:《终极主题答题冒险》开源项目详解
  • 实验1.2呼吸灯实验指导书
  • 实验1.3通过for循环精确定时呼吸灯
  • 【c++】多态(一)
  • 01、Python从入门到癫狂:基础
  • uniapp 弹窗
  • 17.2 《16小时→2.3小时!多模态AI颠覆PPT制作:跨国企业实战验证》
  • MyBatis 从入门到实战:环境搭建与核心原理详解
  • 深入剖析陌讯AIGC检测算法:Transformer架构在AIGC识别中的技术创新
  • 【Ai智能客服上篇】
  • 《C++程序设计》笔记p3
  • 华为数字化转型战略框架:从“1套方法+4类场景+3个平台”的全景设计
  • Redis:主从复制与哨兵模式解析
  • 【中压选型篇】中压电源进线与变压器选型全指南:从拓扑设计到并联运行
  • 【精品资料鉴赏】数据治理咨询项目实施方案
  • 基于陌讯AIGC检测算法的局限性探讨:最大512Token输入下的长文本处理方案
  • 应用随机过程(三)
  • A/B测试:随机化与观察单位不一致,如何处理更科学
  • 树拍易购商业模式解析:创新与合规并行的数实融合样本
  • 使用递归求阶乘的和