硬汉嵌入式论坛

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

[技术讨论] 单片机是否可以使用动态分配?

[复制链接]

10

主题

32

回帖

62

积分

初级会员

积分
62
发表于 2023-3-22 09:58:12 | 显示全部楼层 |阅读模式
    如题,在单片机上是否可以使用动态分配?
    我了解的是单片机没有GC,也没有MMU,使用动态分配必然会有碎片化的问题,即使用操作系统,例如FreeRTOS的heap_4,也只是可以合并邻近内存,减少失败概率,而不是没有问题。
    自己带内存池使用的是大的数组,对数据进行管理,应该是可以,但是普通项目很少会去集成内存池,何况内存池也有很多种,如何选择也是个问题。
    那么单片机是否应该完全禁止动态分配?还是说根据项目要求,要求长时间不关机的或安全要求高的,不能使用动态分配,简单项目分配失败直接重启?

    因为近期使用GPS解析的时候移植了一个库,使用到了动态分配,1秒钟执行一次,担心容易出故障。设备是长期不关机的。另外,在逛github的开源数据结构时,绝大部分都是使用动态分配,如fifo,ringbuf,链表……。
有些是在Linux上使用可以理解,但是很多就是用在诸如STM32上的工程,也大量用到malloc,想找点静态分配的很难找到,所以产生了这个疑问,为什么这么多人不在乎malloc带来的缺点?
    望各位大佬解惑!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2023-3-22 10:13:04 | 显示全部楼层
所有安全关键项目一律禁止使用动态内存管理,这个问题上无需纠结。现在的软件系统做高等级安全认证都是禁止使用动态内存的。

NASA分享的10条开发安全关键代码注意事项
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113843

而一些物联网,消费电子等等产品,死机就死机了,配合看门狗和硬件异常等自动重启即可。

话说回来,使用malloc等函数,做到成对使用,尽量避免碎片,然后就是单片机没有MMU,但是有MPU内存保护单元,可以管理这些东西。像这个就是这么玩的

第5期ThreadX视频教程:单片机动态APP加载MPU玩法,隔离应用和系统,APP死机了系统也不会挂(2022-05-15)
https://www.armbbs.cn/forum.php?mod=viewthread&tid=112368



回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2023-3-22 13:03:10 | 显示全部楼层
跑系统的,通常会使用动态分配,不然栈开支太大了。
回复

使用道具 举报

4

主题

160

回帖

172

积分

初级会员

积分
172
发表于 2023-3-22 17:10:48 | 显示全部楼层
直接搞几十个内存块,谁用谁的,啥问题都没了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 00:40 , Processed in 0.152030 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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