反射内存卡读写测试(RFM2gRead和RFM2gWrite)-- C++

1 篇文章 0 订阅

一、函数介绍:

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文库

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值