return Arduino 的字节数组
return byte array with Arduino
我有一个包含 bytes
信息(有效载荷)的数组,但我想在两个函数中使用这个数组。我怎样才能return呢?我不知道我是否必须声明它不同或在其他地方。
我的代码:
void loop() {
byte payload[] = find_fix();
delay(5*60000);
}
byte find_fix(){
byte payload[9];
double lati = sodaq_gps.getLat();
double longi = sodaq_gps.getLon();
int nsatis = sodaq_gps.getNumberOfSatellites();
long lax = lati * 10000000;
long lox = longi * 10000000;
payload[0] = (byte) ((lax & 0xFF000000) >> 24 );
payload[1] = (byte) ((lax & 0x00FF0000) >> 16 );
payload[2] = (byte) ((lax & 0x0000FF00) >> 8 );
payload[3] = (byte) ((lax & 0X000000FF));
payload[4] = (byte) ((lox & 0xFF000000) >> 24 );
payload[5] = (byte) ((lox & 0x00FF0000) >> 16 );
payload[6] = (byte) ((lox & 0x0000FF00) >> 8 );
payload[7] = (byte) ((lox & 0X000000FF));
payload[8] = (byte) (nsatis);
SerialUSB.print(" MIGUEL. LATITUD: ");
SerialUSB.print(payload[0], HEX);
SerialUSB.print(payload[1], HEX);
SerialUSB.print(payload[2], HEX);
SerialUSB.println(payload[3], HEX);
SerialUSB.print(" MIGUEL. LONGITUD: ");
SerialUSB.print(payload[4], HEX);
SerialUSB.print(payload[5], HEX);
SerialUSB.print(payload[6], HEX);
SerialUSB.println(payload[7], HEX);
SerialUSB.print(" MIGUEL. Num Sats: ");
SerialUSB.println(payload[8], HEX);
return payload[];
}
我想使用9个字节的信息,首先我声明它byte payload[9];
然后我开始写它。这很好用,但现在我想 return 它用于其他功能,但我不能。
您不能return 堆栈从函数分配的内存。一旦函数调用结束,当堆栈指针更新时,数据将被回收。您需要像这样在堆上动态分配内存...
byte* find_fix(){
byte* payload = new byte[9]; // Allocate memory on the heap
return payload;
}
void loop() {
byte* payload = find_fix();
delete[] payload; // Free memory once it is no longer needed
}
或者如果你知道数组的最大大小,你可以像这样将内存传递给 find_fix
函数 ...
void find_fix(byte* payload) {
....
}
void loop() {
byte payload[9];
find_fix(payload);
}
我有一个包含 bytes
信息(有效载荷)的数组,但我想在两个函数中使用这个数组。我怎样才能return呢?我不知道我是否必须声明它不同或在其他地方。
我的代码:
void loop() {
byte payload[] = find_fix();
delay(5*60000);
}
byte find_fix(){
byte payload[9];
double lati = sodaq_gps.getLat();
double longi = sodaq_gps.getLon();
int nsatis = sodaq_gps.getNumberOfSatellites();
long lax = lati * 10000000;
long lox = longi * 10000000;
payload[0] = (byte) ((lax & 0xFF000000) >> 24 );
payload[1] = (byte) ((lax & 0x00FF0000) >> 16 );
payload[2] = (byte) ((lax & 0x0000FF00) >> 8 );
payload[3] = (byte) ((lax & 0X000000FF));
payload[4] = (byte) ((lox & 0xFF000000) >> 24 );
payload[5] = (byte) ((lox & 0x00FF0000) >> 16 );
payload[6] = (byte) ((lox & 0x0000FF00) >> 8 );
payload[7] = (byte) ((lox & 0X000000FF));
payload[8] = (byte) (nsatis);
SerialUSB.print(" MIGUEL. LATITUD: ");
SerialUSB.print(payload[0], HEX);
SerialUSB.print(payload[1], HEX);
SerialUSB.print(payload[2], HEX);
SerialUSB.println(payload[3], HEX);
SerialUSB.print(" MIGUEL. LONGITUD: ");
SerialUSB.print(payload[4], HEX);
SerialUSB.print(payload[5], HEX);
SerialUSB.print(payload[6], HEX);
SerialUSB.println(payload[7], HEX);
SerialUSB.print(" MIGUEL. Num Sats: ");
SerialUSB.println(payload[8], HEX);
return payload[];
}
我想使用9个字节的信息,首先我声明它byte payload[9];
然后我开始写它。这很好用,但现在我想 return 它用于其他功能,但我不能。
您不能return 堆栈从函数分配的内存。一旦函数调用结束,当堆栈指针更新时,数据将被回收。您需要像这样在堆上动态分配内存...
byte* find_fix(){
byte* payload = new byte[9]; // Allocate memory on the heap
return payload;
}
void loop() {
byte* payload = find_fix();
delete[] payload; // Free memory once it is no longer needed
}
或者如果你知道数组的最大大小,你可以像这样将内存传递给 find_fix
函数 ...
void find_fix(byte* payload) {
....
}
void loop() {
byte payload[9];
find_fix(payload);
}