Memory 使用Arduino返回字节数组
我有一个数组,其中包含Memory 使用Arduino返回字节数组,memory,arduino,dynamic-memory-allocation,static-memory-allocation,Memory,Arduino,Dynamic Memory Allocation,Static Memory Allocation,我有一个数组,其中包含字节信息(有效负载),但我想在两个函数中使用这个数组。我怎样才能退货?我不知道我是否必须声明它不同或在其他地方 我的代码: void loop() { byte payload[] = find_fix(); delay(5*60000); } byte find_fix(){ byte payload[9]; double lati = sodaq_gps.getLat(); double longi = sodaq_gps.
字节
信息(有效负载),但我想在两个函数中使用这个数组。我怎样才能退货?我不知道我是否必须声明它不同或在其他地方
我的代码:
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个字节的信息,首先我声明它
字节负载[9]然后我开始在上面写东西。这很好,但现在我想返回它以在其他函数中使用,但我不能。您不能从函数返回堆栈分配的内存。一旦函数调用结束,当堆栈指针更新时,数据将被回收。您需要在堆上动态分配内存,如下所示
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
}
void find_fix(byte* payload) {
....
}
void loop() {
byte payload[9];
find_fix(payload);
}
或者,如果您知道数组的最大大小,您可以将内存传递给find\u fix
函数,如下所示
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
}
void find_fix(byte* payload) {
....
}
void loop() {
byte payload[9];
find_fix(payload);
}
不能从函数返回堆栈分配的内存。一旦函数调用结束,当堆栈指针更新时,数据将被回收。您需要在堆上动态分配内存,如下所示
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
}
void find_fix(byte* payload) {
....
}
void loop() {
byte payload[9];
find_fix(payload);
}
或者,如果您知道数组的最大大小,您可以将内存传递给find\u fix
函数,如下所示
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
}
void find_fix(byte* payload) {
....
}
void loop() {
byte payload[9];
find_fix(payload);
}
如何知道使用第二个选项时的最大大小,但出现此错误从'byte*{aka unsigned char*}'到'uint32_t{aka long unsigned int}'[-fppermissive]的转换无效您如何调用该函数?编译器感到不安的是,find_fix(byte*payload)
需要一个byte*{aka unsigned char*}
参数,但您提供了一个uint32\u t
find_fix(payload)代码>和你说的一样我刚刚编译了一个测试程序<代码>#包括void find_fix(unsigned char*payload){printf(“%x\n”,payload[0])}int main(){unsigned char payload[9];payload[0]=0xFF;find_fix(payload);使用$gcc-Wall test.c-o test
返回0;}
,效果很好。一定是密码有问题。有效负载变量是什么类型的。可能会将其更改为unsigned char?我如何知道使用第二个选项时的最大大小,但出现此错误从'byte*{aka unsigned char*}'到'uint32{aka long unsigned int}'[-fppermissive]
如何调用该函数?编译器感到不安的是,find_fix(byte*payload)
需要一个byte*{aka unsigned char*}
参数,但您提供了一个uint32\u t
find_fix(payload)代码>和你说的一样我刚刚编译了一个测试程序<代码>#包括void find_fix(unsigned char*payload){printf(“%x\n”,payload[0])}int main(){unsigned char payload[9];payload[0]=0xFF;find_fix(payload);使用$gcc-Wall test.c-o test
返回0;}
,效果很好。一定是密码有问题。有效负载变量是什么类型的。也许把它改成无符号字符?