Почему метод библиотеки Radiohead для получения массива символов использует передачу по ссылке для длины массива? - PullRequest
0 голосов
/ 09 мая 2020

Я использую библиотеку Radiohead в скетче Arduino для отправки и получения передач на 433,92 МГц. Скетч, который я использую, работает, и я могу отправлять и получать данные датчиков (температура, влажность), встроенные в строки символов «в эфире». Однако меня озадачивает деталь реализации.

Метод recv() класса RH_ASK для получения сообщений принимает два аргумента. Первый - это указатель на массив символов. Это понятно, поскольку сообщения отправляются и принимаются в виде массивов символов. Второй - длина массива. Это целочисленное число, которое также передается как указатель. Разве не удобнее отправить само целочисленное число, то есть передать по значению, а не по ссылке?

Вот соответствующий фрагмент кода, смоделированный по статье здесь .

Включите библиотеку, создайте экземпляр объекта-получателя и инициализируйте его.

// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>

// Create Amplitude Shift Keying Object
RH_ASK rf_driver;

// Initialize ASK Object
rf_driver.init();

Получите поток символов в буфер, преобразуйте его в строку и проанализируйте показания датчика.

// Set buffer to size of expected message
uint8_t buf[11];
uint8_t buflen = sizeof(buf);

// Check if received packet is correct size
if (rf_driver.recv(buf, &buflen)) // Why &buflen and not simply buflen?
{

   // Message received with valid checksum
   // Get values from string

   // Convert received data into string
   str_out = String((char*)buf);

   // Thereafter, parse the string to extract sensor readings,
   // and print them out.               
}

Я был бы признателен за любую помощь в понимании концепции передачи совершенно хорошего целого числа по ссылке вместо значения.

1 Ответ

1 голос
/ 09 мая 2020

Потому что функции необходимо изменить целое число на длину полученных данных.

https://github.com/PaulStoffregen/RadioHead/blob/e8581c127fac9bffb0ee800ae18847f673e9b4a5/RH_ASK.cpp#L462

...