Lyn*_*ite 14 queue stack avr list
因此,在嵌入式系统部门,我明年将参加大学,我们将了解到动态数据结构在嵌入式系统程序中是一件坏事.但讲义没有说明原因.
现在我正在开发一个中等规模的嵌入式系统LURC控制器,主要是利用AVR169MEGA的"Butterfly"演示板的外围设备.产生4个PWM信号来控制伺服和ESC.并提供9 seg液晶屏.
现在我想不出任何更好的存储指令的方法,因为它们是收到的小瓶USART序列,而不是队列.尤其是我需要等待收到未知数量的数据的东西:例如,要在LCD屏幕上显示的字符串.
那你为什么不在嵌入式系统的微控制器上使用动态数据结构呢?只是你在一个严重的内存限制环境中,并且必须确保你的mallocs成功吗?
Dip*_*ick 21
有许多理由不在嵌入式系统中使用malloc(或等效的).
最重要的是 - 如果你不动态分配内存,那么就不会出现内存泄漏.
好吧,许多小型微控制器没有像MMU那样的东西,也没有像你这样好的堆栈的操作系统.
对于那些那样做的人,只要你对你所要求的内存量保持理智,我就不会发现它存在很大的问题.
但是,许多嵌入式系统也是实时系统.如果您的应用程序有很长的运行时间,那么您将无法进行动态分配.大多数堆实现都使用没有非常有限运行时的算法.在某些(可能是罕见的)情况下,他们将花费更长的时间来运行比正常情况.有一些实时堆实现,但它们没有广泛使用.一般规则是在初始化之后避免硬实时系统中的任何动态分配或释放.
这取决于我认为“嵌入”的含义在过去 4 年中扩大了。
传统上,嵌入式设备上装有微控制器,通常没有操作系统。没有受保护的内存,并且是单线程的。您必须非常小心地使用 malloced 内存,因为例如当您只有 32KB 可用内存时,它很容易用完。所以一般来说,我们会用固定大小的缓冲区编写我们的代码,并且从不使用 malloc 或者 at 如果每个人都使用它 - 非常谨慎。
在过去的几年里,我们看到了本质上是单芯片 PC 或微型板的产品,它们很容易与我们的旧 Pentium PC 一样强大。RAM 价格现在如此便宜,而且如此之小,以至于内存限制与以前完全不同。它们还经常运行嵌入式 linux 或 wince,因此现在我们能够更自由地使用动态内存。
这样就可以使用更广泛的语言,包括 Java、C++、许多脚本语言和其他提供缓冲区溢出保护和异常处理的语言以及其他高级语言。所以说真的,那些老问题已经不像以前那样了。
我怀疑所有这些新的可用硬件都会带来一系列新问题。