硬汉嵌入式论坛

 找回密码
 立即注册
查看: 533|回复: 2
收起左侧

[其它] Freertos 申请内存pvPortMalloc莫名的卡死

[复制链接]

44

主题

562

回帖

699

积分

金牌会员

积分
699
发表于 2023-7-28 10:06:55 | 显示全部楼层 |阅读模式
程序中局部变量用pvPortMalloc申请临时内存,但是总是莫名的卡死,但是不是进入HardFault_Handler,而是操作系统任务切换问题。但是直接定义局部变量有是正常,这个不是啥原因。
申请内存大致如下:
scpi_number_t *param;
param = (scpi_number_t *)pvPortMalloc(6);
vPortFree(param);
这样应用程序只能运行一次,再次运行到该函数后,操作系统就进入如下位置:
下载 (9).png

如果直接定义scpi_number_t param[6]; 就是正常的。



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2023-7-28 10:38:39 | 显示全部楼层
1、如果不是几百字节数据,推荐局部变量,直接使用栈空间,函数退出,直接就释放了,速度也最快。
2、这个函数要注意返回值是否成功,还有就是检测下最大动态内存使用情况,FreeRTOS有个对应的API可以返回。
3、如果用的是H7系列,注意字节对齐问题。
https://www.armbbs.cn/forum.php?mod=viewthread&tid=94562
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
 楼主| 发表于 2023-7-28 11:02:35 | 显示全部楼层
现在改用局部变量在跑,怀疑应该是字节对齐问题。研究学习一下这个字节对齐问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 21:43 , Processed in 0.194856 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表