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
在C中向数组传递数组_C_Arduino_Infrared - Fatal编程技术网

在C中向数组传递数组

在C中向数组传递数组,c,arduino,infrared,C,Arduino,Infrared,我目前遇到一个问题,与使用Arduino Uno的红外遥控器有关 我将原始数据信号包含在一个数组中: Samsung_power[68] = {4500, 243, .... and so on}; 事实上,三星遥控器有很多功能,我会发现这比从UART接收命令要容易得多,比如0-20之间的值,然后在表格中查找数字,并选择合适的原始数据数组 因此: 但是,编译器绝对不允许我这样做,因此我可以想象这里完全出了问题:)。所以我希望你们中的一些人有一个想法,如何解决这个特殊的问题: 伪代码: rece

我目前遇到一个问题,与使用Arduino Uno的红外遥控器有关

我将原始数据信号包含在一个数组中:

Samsung_power[68] = {4500, 243, .... and so on};
事实上,三星遥控器有很多功能,我会发现这比从UART接收命令要容易得多,比如0-20之间的值,然后在表格中查找数字,并选择合适的原始数据数组

因此:

但是,编译器绝对不允许我这样做,因此我可以想象这里完全出了问题:)。所以我希望你们中的一些人有一个想法,如何解决这个特殊的问题:

伪代码:

receive = UART_READ();
sendRawDataToIRLED(FunctionArray[receive]);

定义一个
struct
,它的第一个字段是一个数组,该数组将在struct中的数组中保存您的
Samsung\u power

您不能执行函数数组,但可以执行指向函数的指针数组。 但是数组中的函数必须具有相同的输入参数


请参见

在C中声明数组的语法非常简单:

int twodee[OUTER_SIZE][INNER_SIZE];
查找同样简单:

twodee[3]; // This is the 4th INNER_SIZE-element array in the table.
           // It's of type int[INNER_SIZE].
如果查找表中的所有数组大小相同,请使用该数组。如果它们不是,则需要一种方法来使用表指向不同大小的数组。最好的方法是使用结构:

struct array
{
    int len;
    int data[];
};

struct array *table[NUMBER_OF_ARRAYS];
这样,您就可以用指向数组的指针填充表,并跟踪所指向数组的大小。要将
结构数组a
分配给查找表,只需执行以下操作:

table[n] = &a;

如果不想声明辅助结构,则至少需要一个数组来存储数据数组的大小,并将该长度传递给函数。您可以方便地使用sizeof来确保正确计算它们。我在arduino中尝试了以下代码,并构建了:

#include "Arduino.h"

//bii:#entry_point()
void setup(){
}
void sendRawDataToIRLED(int array[], int len){
//your code here
}
void loop()
{
    int Samsung_power[] = {4500, 243, 23};
    int Channel_1[] = {450, 23, 233, 44, 55};
    int* FunctionArray[2] = {Samsung_power, Channel_1};
    int sizeArray[] = {sizeof(Samsung_power)/sizeof(int), sizeof(Channel_1)/sizeof(int)};
    int index = 0;//whatever your index
    sendRawDataToIRLED(FunctionArray[index], sizeArray[index]);
}

你能展示你的声明吗?三星电源、Channel_1、Channel_2、Channel_3等都是相同大小的阵列吗?它们都是相同大小的:)听起来是个不错的解决方案:)我会尽快尝试:)非常感谢!这确实有效。Hoever,在我开始获得一些奇怪的输出之前,数组中的命令不能超过9个。可能是SRAM内存不足的原因,奇怪的是,当阵列超过9个命令时,整个程序中只有一个Serail.print可以使用2048字节的ram:/但是您的单个命令有多长?如果只是一些元素,那应该不是问题。在任何情况下,如果您的命令实际上是常量,最好的方法可能是将它们从循环函数中取出,放到全局范围中,这样它们就不会在每次循环迭代时被重新定义。它们都具有相同的大小,因此我假设2D表更适合这种情况,正如您所描述的。一定要试试这个:)谢谢你的帮助!
#include "Arduino.h"

//bii:#entry_point()
void setup(){
}
void sendRawDataToIRLED(int array[], int len){
//your code here
}
void loop()
{
    int Samsung_power[] = {4500, 243, 23};
    int Channel_1[] = {450, 23, 233, 44, 55};
    int* FunctionArray[2] = {Samsung_power, Channel_1};
    int sizeArray[] = {sizeof(Samsung_power)/sizeof(int), sizeof(Channel_1)/sizeof(int)};
    int index = 0;//whatever your index
    sendRawDataToIRLED(FunctionArray[index], sizeArray[index]);
}