Arduino操作员 [英] Operator new for Arduino
问题描述
我已收到通知(特别是在回答Arduino上的 C ++标准库 和Stack Overflow问题 C ++ string和Arduino String。如何组合它们? )),Arduino编译器不实现 new
运算符。但是,我为Arduino编写了一个程序(在Arduino IDE中),它使用它,它工作得很好。
I've been told (specifically in an answer to C++ Standard Library on Arduino, and in Stack Overflow question C++ string and Arduino String. How to combine them?)) that the Arduino compiler does not implement the new
operator. However, I've written a program for the Arduino (in the Arduino IDE) which uses it, and it works perfectly.
void setup() {
Serial.begin(9600);
}
void loop() {
char* array;
char c;
unsigned arraySize;
Serial.write("Enter a 1 digit number.\n");
do {
c = Serial.read();
} while(c < '0' or c > '9');
arraySize = c-'0';
Serial.write("You wrote ");
Serial.write(c);
Serial.write(".\n");
Serial.write("Now enter ");
Serial.write(c);
Serial.write(" lower-case letters.\n");
array = new char[arraySize];
for (unsigned i = 0; i < arraySize;) {
array[i] = Serial.read();
if (array[i] >= 'a' and array[i] <= 'z')
i++;
}
Serial.write("You entered: ");
for (unsigned i = 0; i < arraySize; i++) {
Serial.write(array[i]);
Serial.write(" ");
}
Serial.write("\n");
}
下面是一个演示其功能的示例输出:
Here is a sample output to demonstrate its functionality:
Enter a 1 digit number.
You wrote 5.
Now enter 5 lower-case letters.
You entered: h e l l o
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: w a s s u p m a n
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: h o w y a d o i n
Enter a 1 digit number.
You wrote 4.
Now enter 4 lower-case letters.
You entered: c o o l
Enter a 1 digit number.
You wrote 7.
Now enter 7 lower-case letters.
You entered: i t w o r k s
Enter a 1 digit number.
那么为什么我会不断听到这个?这些人是错误的,还是只是误解了他们的意思?
So why do I keep hearing this? Are these people wrong, or do I simply misunderstand their meaning?
推荐答案
new
和 delete
定义为Arduino分发的一部分:
/ usr / share / arduino / hardware / arduino / cores / arduino /new.h
:
new
and delete
is defined as part of the Arduino distribution:
/usr/share/arduino/hardware/arduino/cores/arduino/new.h
:
/* Header to define new/delete operators as they aren't provided by avr-gcc by default
Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453
*/
#ifndef NEW_H
#define NEW_H
#include <stdlib.h>
void * operator new(size_t size);
void operator delete(void * ptr);
__extension__ typedef int __guard __attribute__((mode (__DI__)));
extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *);
extern "C" void __cxa_pure_virtual(void);
#endif
new.h
包含在 Printable.h
中,因此您可以在Arduino基本包含。这些运算符在AVR Libc中没有定义。我对这些设计选择的解释:Libc人认为这是一个坏主意,而Arduino人都是关于易用性:如果你想要 new
和删除
,请给他们。
The new.h
is included in Printable.h
so you are getting it in your Arduino basic includes. These operators are not defined in AVR Libc though. My interpretation of these design choices: the Libc people thought it was a bad idea, whereas Arduino people are all about ease of use: if you want new
and delete
, please have them.
这篇关于Arduino操作员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!