Передача массива в массив в C
В настоящее время я столкнулся с проблемой, связанной с ИК-пультом, управляемым с помощью Arduino Uno.
У меня есть сигнал необработанных данных, содержащихся в массиве:
Samsung_power[68] = {4500, 243, .... and so on};
Из-за того, что на пульте Samsung достаточно много функций, я нахожу это намного проще, чем когда я получаю команду от UART, например, значение в диапазоне от 0 до 20, тогда число будет посмотрел в таблицу, и будет выбран подходящий исходный массив данных.
Так:
FunctionArray[20] = {Samsung_power, Channel_1, Channel_2, Channel_3.. etc};
Тем не менее, компилятор не случайно позволил мне сделать это, и поэтому я могу представить, что здесь что-то совершенно не так:). Поэтому я надеялся, что у некоторых из вас есть идея, как решить эту конкретную проблему:
ПСЕВДОКОД:
receive = UART_READ();
sendRawDataToIRLED(FunctionArray[receive]);
4 ответа
Если вы не хотите объявлять вспомогательную структуру, вам нужен хотя бы массив для хранения размеров массивов данных и передачи такой длины функции. Вы можете удобно использовать 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]);
}
Вы НЕ МОЖЕТЕ делать массив функций, НО вы можете делать массив POINTER TO FUNCTION. но функция в массиве должна иметь тот же входной параметр.
Определить struct
который имеет в качестве первого поля массив, который будет содержать ваш Samsung_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];
Таким образом, вы можете заполнить таблицу указателями на массивы и отслеживать размеры массивов, на которые указывают. Чтобы назначить struct array a
к таблице поиска, просто сделайте это:
table[n] = &a;