Массив объявлен следующим образом
#define RX_BUFFER_SIZE1 40
char rx_buffer1[RX_BUFFER_SIZE1],tx_buffer1[RX_BUFFER_SIZE1];
, используемым в выражении
&tx_buffer1
, делает тип выражения char ( * )[RX_BUFFER_SIZE1]
.
В то же время соответствующий параметр функции
unsigned char *data[40]
имеет тип unsigned char **
, поскольку компилятор неявно настраивает параметр, имеющий тип массива, на указатель на объект типа элемента массива.
И более того параметр функции использует спецификатор unsigned char, а массив, объявленный со спецификатором char.
Таким образом, вызов функции недопустим. Не существует неявного преобразования между типами указателей.
Нет никакого смысла передавать массив в функцию по ссылке, потому что в любом случае массивы являются неизменяемыми значениями l.
Если вы хотите передать массив по ссылке, чтобы узнать его размер в функции параметр функции должен быть объявлен как
char ( *data )[40]