我应该如何管理任务关键型嵌入式应用程序中的内存?
我通过谷歌找到了一些文章,但无法找到真正有用的实用指南。
The DO-178b
禁止动态内存分配,但是如何管理内存呢?提前预分配所有内容并向每个需要分配的函数发送一个指针?分配到栈上?使用全局静态分配器(但它与动态分配非常相似)?
例如,答案可以采用常规答案、资源引用或优秀开源嵌入式系统引用的形式。
澄清:这里的问题不在于嵌入式系统是否可以使用内存管理。但对于嵌入式系统来说,什么才是好的设计,才能最大限度地提高可靠性。
我不明白为什么静态预分配缓冲池并动态获取和删除它与动态分配内存不同。
我曾在 DO-178B 环境(飞机系统)中工作。据我了解,不允许动态分配的主要原因主要是认证。认证是通过测试(单一、覆盖、集成……)完成的。通过这些测试,您必须证明程序的行为是 100% 可预测的,几乎可以达到进程的内存占用量从一次执行到下一次执行都是相同的程度。由于动态分配是在堆上完成的(并且可能会失败),因此您无法轻易证明这一点(我想如果您掌握从硬件到编写的任何代码段的所有工具,这应该是可能的,但是......)。静态分配不会有这个问题。这也是当时在这样的环境中不使用 C++ 的原因。 (大约15年前,可能已经改变了......)
实际上,您必须编写大量结构池和分配函数来保证您具有确定性。你可以想象很多解决方案。关键是您必须(通过大量测试)证明高水平的确定性行为。证明您手工开发的确定性工作比证明 linux + gcc 在分配内存方面是确定性的更容易。
只是我的2分钱。这是很久以前的事了,事情可能已经发生了变化,但对于像 DO-178B 这样的认证,关键是要证明您的应用程序在任何情况下都可以在任何时候正常工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)