我正在使用Atmel Studio 6的ATMega32 uc。
我有一些包含new
运算符的代码。
当我尝试使用它时,它表示它没有定义,我不知道为什么。
我在谷歌搜索了一些东西,但我还没有发现任何相关内容。我能找到的只是定义new
和delete
运算符的代码片段,但我真的不想这样做。此外,nullptr
也不见了。
还有其他解决方案吗?
答案 0 :(得分:3)
在嵌入式环境中使用动态内存管理是完全可能的 - 您只需要小心如何操作。在这种情况下,使用malloc()
和free()
可能会更容易,但为了提高兼容性,您可能希望将其定义为new
和delete
。关于该主题的一个很好的信息来源是AVR Freaks。
这些运算符不存在的原因仅仅是AVR-GCC不完全支持C ++,只是它的一部分。这部分是由于嵌入式编程的本质 - 一些更高级的C ++特性可以迅速扼杀闪存和RAM。嵌入式平台上的C vs C ++参数是一个古老的,经常是激烈的,但通常归结为这种情况。这是关于这个主题的另一个another forum topic。
答案 1 :(得分:2)
听起来有点嵌入式东西。这不是一种罕见的情况,你只能使用C而不是C ++。
无论如何,new / delete - 和malloc()/ free()以及 - 在嵌入式世界中不是一个好主意。您的计划必须在任何情况下都能运作无法失败。它只是 n.a 。你没有控制台或日志文件来写一条消息,或者如果你有一些,没有人会检查它,没有人会处理错误。您可以闪烁红色LED指示灯,但在大多数情况下,它是不允许的,例如踩刹车踏板应操作制动器,而不是红色LED二极管。
您应该设置固定大小的池而不是动态分配/解除分配项,并且您无法选择不处理任何可能的输入。您的代码将充满“MAX _...”定义。