为什么 Radiohead 库接收字符数组的方法使用数组长度的引用传递?
Why does the Radiohead library's method for receiving an array of characters use pass-by-reference for array length?
我在 Arduino 草图中使用 Radiohead 库以 433.92 MHz 发送和接收传输。我正在使用的草图有效,我能够发送和接收嵌入字符串 "on air" 中的传感器数据(温度、湿度)。然而,我对一个实现细节感到困惑。
RH_ASK
class的recv()
方法接收消息有两个参数。第一个是指向字符数组的指针。这是可以理解的,因为消息是作为字符数组发送和接收的。第二个是数组的长度。这是一个整数值,也作为指针传递。发送整数值本身不是更方便吗,即按值传递而不是按引用传递?
这是仿照文章 here 的相关代码片段。
包含库,创建接收器对象的实例并对其进行初始化。
// 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.
}
如果能帮助我理解通过引用而不是值传递完美整数背后的概念,我将不胜感激。
我在 Arduino 草图中使用 Radiohead 库以 433.92 MHz 发送和接收传输。我正在使用的草图有效,我能够发送和接收嵌入字符串 "on air" 中的传感器数据(温度、湿度)。然而,我对一个实现细节感到困惑。
RH_ASK
class的recv()
方法接收消息有两个参数。第一个是指向字符数组的指针。这是可以理解的,因为消息是作为字符数组发送和接收的。第二个是数组的长度。这是一个整数值,也作为指针传递。发送整数值本身不是更方便吗,即按值传递而不是按引用传递?
这是仿照文章 here 的相关代码片段。
包含库,创建接收器对象的实例并对其进行初始化。
// 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.
}
如果能帮助我理解通过引用而不是值传递完美整数背后的概念,我将不胜感激。