Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 使用Arduino返回字节数组_Memory_Arduino_Dynamic Memory Allocation_Static Memory Allocation - Fatal编程技术网

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;}
,效果很好。一定是密码有问题。有效负载变量是什么类型的。也许把它改成无符号字符?