一、函数介绍:
1.1 RFM2gWrite
STDRFM2GCALL RFM2gWrite( RFM2GHANDLE rh, RFM2G_UINT32 Offset, void *Buffer, RFM2G_UINT32 Length );
说明:
RFM2gWrite()函数将一个或多个I/O数据缓冲区从应用程序传输到RFM2g节点,从指定的对齐内存偏移开始。
参数及返回值说明:
rh :打开RFM2g设备的句柄。
Offset :在指定偏移量位置开始写入数据。64MB卡的有效偏移值为0x0到0x3FFFFFF, 128MB卡的有效偏移值为0x0到0x7FFFFFF, 256MB卡的有效偏移值为0x0到0x0FFFFFFF。
Buffer: 要写入的数据。
Length: 写入的字节数长度,有效值为0 ~ ([RFM Size] ‐ rfmOffset)。
1.2 RFM2gRead
STDRFM2GCALL RFM2gRead( RFM2GHANDLE rh,RFM2G_UINT32 Offset,void *Buffer,RFM2G_UINT32 Length );
说明:
RFM2gRead()函数用于将一个或多个字节从RFM2g内存传输到系统内存。
参数及返回值说明:
rh :打开RFM2g设备的句柄。
Offset :在指定偏移量位置开始读取数据。64MB卡的有效偏移值为0x0到0x3FFFFFF, 128MB卡的有效偏移值为0x0到0x7FFFFFF, 256MB卡的有效偏移值为0x0到0x0FFFFFFF。
Buffer :要写入的数据。
Length :传输的字节数长度,有效值为0 ~ ([RFM Size] ‐ rfmOffset)。
二、示例
2.1 写入/读取字符数组数据:
写入字符串数据 “testrfm”,执行结果如图1:
bool WriteStringData(RFM2GHANDLE hd)
{
RFM2G_STATUS result;
RFM2G_UINT8 write_data[BUFFER_SIZE]= { 't','e','s','t','r','f','m'}; // 要写入的数据:testrfm
result = RFM2gWrite(hd, OFFSET_0, (void*)write_data, sizeof(write_data)); // 写入
if (result != RFM2G_SUCCESS)
{
std::cout << "数据写入失败!错误代码: " << result << std::endl;
return false;
}
std::cout << "数据写入成功!" << std::endl;
return true;
}
图1:
读取数据,结果如图2:
bool ReadStringData(RFM2GHANDLE hd)
{
RFM2G_STATUS result;
char read_data[BUFFER_SIZE]{0}; // 存储读取数据
result = RFM2gRead(hd, 0x1, (void*)read_data, sizeof(read_data)); // 读取数据
if (result != RFM2G_SUCCESS)
{
std::cout << "数据读取失败!错误代码: " << result << std::endl;
return false;
}
std::cout << read_data << std::endl;
return true;
}
图2:
2.2 写入/读取结构体数据
循环5次写入结构体数据,结果如图3:
bool WriteStructData(RFM2GHANDLE hd)
{
RFM2G_STATUS result;
for (int i = 0; i < 5; i++)
{
RFM2G_UINT8 write_data[BUFFER_SIZE]{};
ChildInfo child{};
child.age = i;
std::string name = "LiMei_" + std::to_string(i); // 给结构体赋值
memcpy(child.name, name.c_str(), sizeof(name));
child.weight = (double)(i + 10) / 2;
memcpy(write_data, &child, sizeof(child));
result = RFM2gWrite(hd, OFFSET_0 + i * sizeof(child), (void*)write_data, sizeof(write_data)); // 写入数据
if (result != RFM2G_SUCCESS)
{
std::cout << "数据写入失败!错误代码: " << result << std::endl;
return false;
}
std::cout << "数据写入成功!" << std::endl;
}
return true;
}
图3:
写入的时候每条数据的偏移量都会增加 i * sizeof(child) 的值是为了不覆盖上一条数据,所以要空出每条数据的长度。
读取结构体数据,结果如图4:
bool ReadStructData(RFM2GHANDLE hd)
{
RFM2G_STATUS result;
for (int i = 0; i < 5; i++)
{
ChildInfo child;
char read_data[BUFFER_SIZE]{ 0 }; // 存储读取结果
result = RFM2gRead(hd, OFFSET_0 + i * sizeof(child), (void*)read_data, sizeof(read_data)); // 读取数据
if (result != RFM2G_SUCCESS)
{
std::cout << "数据读取失败!错误代码: " << result << std::endl;
return false;
}
else
{
memcpy(&child, read_data, sizeof(ChildInfo));
std::cout << "age: " << child.age << " name: " << child.name << " weight: " << child.weight << std::endl;
}
}
return true;
}
图4:
有问题欢迎指正~
完整代码链接:
RFM反射内存卡读写数据测试-c++-C++文档类资源-CSDN文库