modbus 寄存器reg映射表

modbus通过reg获取各种数值。
reg地址和实际变量不一定是能对应上,
可能:reg地址是连续的,变量是分散
需要:将分散的数据映射到一个数组

USHORT *MODBUS_REG_MAP[] = 
{
/*0x0AE0*/	(USHORT *)	&S_RealTimeData.m_Tn,		(USHORT *)	&S_RealTimeData.m_MainBat,
/*0x0AE2*/	(USHORT *)	&S_RealTimeData.m_UltraBat,	(USHORT *)	&S_RealTimeData.m_ValveBat,
/*0x0AE4*/	(USHORT *)	&S_RealTimeData.m_Qm+1,		(USHORT *)	&S_RealTimeData.m_Qm,
/*0x0AE6*/	(USHORT *)	&S_RealTimeData.m_Qb+1,		(USHORT *)	&S_RealTimeData.m_Qb,
/*0x0AE8*/	(USHORT *)	&S_RealTimeData.m_Pn+1,		(USHORT *)	&S_RealTimeData.m_Pn,
/*0x0AEA*/	(USHORT *)	&S_RealTimeData.m_Zb+1,		(USHORT *)	&S_RealTimeData.m_Zb,
/*0x0AEC*/	(USHORT *)	&S_RealTimeData.m_Zm+1,		(USHORT *)	&S_RealTimeData.m_Zm,
/*0x0AEE*/	(USHORT *)	&S_RealTimeData.m_Cn+1,		(USHORT *)	&S_RealTimeData.m_Cn,
/*0x0AF0*/	(USHORT *)	&S_RealTimeData.m_Vm+3,		(USHORT *)	&S_RealTimeData.m_Vm+2,		(USHORT *)	&S_RealTimeData.m_Vm+1,	(USHORT *)	&S_RealTimeData.m_Vm,
/*0x0AF4*/	(USHORT *)	&S_RealTimeData.m_Vb+3,		(USHORT *)	&S_RealTimeData.m_Vb+2,		(USHORT *)	&S_RealTimeData.m_Vb+1,	(USHORT *)	&S_RealTimeData.m_Vb+0,	
/*0x0AF8*/	(USHORT *)	&S_RealTimeData.m_Abnormal+1,	(USHORT *)	&S_RealTimeData.m_Abnormal,									
};

也可以通过映射调整modbus传输字序大小端。


uint16_t *reg[] = {&a, &b, &c, &d};

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

//将abcd值映射到*reg[]数组中 
int main() {
    uint16_t i, a = 10, b = 20, c = 30, d = 40;  
    uint16_t *reg[] = {&a, &b, &c, &d}; // 指针数组,存储变量的地址

    // 通过指针数组访问变量的值
    for ( i = 0; i < 4; i++) {
        printf("Value of reg[%d] = %d\n", i, *reg[i] );
    }

    // 更新变量的值
    *reg[0] = 100;
    *reg[1] = 200;
    *reg[2] = 300;
    *reg[3] = 400;

    // 再次通过指针数组访问变量的值
    for ( i = 0; i < 4; i++) {
        printf("Updated value of reg[%u] = %d\n", i, *reg[i]);
    }

    return 0;
}

C语言中,将变量的地址存储到指针数组中是一种常见的技术,用途:

  • 批量操作:如果需要对多个变量执行相同的操作,可以将这些变量的地址存储到一个数组中,然后通过循环来遍历数组,对每个地址指向的变量执行操作。

  • 函数参数:在某些情况下,你可能需要将多个变量的地址作为参数传递给函数。使用指针数组可以方便地实现这一点。

  • 内存映射:在嵌入式编程中,经常需要操作硬件寄存器,这些寄存器通常通过内存映射的方式访问。将寄存器的地址存储在数组中,可以方便地通过数组索引来访问不同的寄存器。

  • 排序和搜索:如果你需要根据变量的值进行排序或搜索,可以利用指针数组和相应的算法来实现。

  • 多维数组模拟:在某些情况下,指针数组可以用来模拟多维数组的行为,尤其是在处理不规则数据结构时。

  • 动态内存管理:在需要动态分配和释放内存的场景中,指针数组可以用来跟踪分配的内存块的地址。

  • 回调函数:在某些设计模式中,例如观察者模式,指针数组可以用来存储回调函数的地址,以便在特定事件发生时调用它们。

  • 配置和参数化:在需要根据不同配置或参数执行不同操作的程序中,指针数组可以用来存储配置参数的地址,以便在程序运行时动态地读取和设置参数。

总的来说,指针数组提供了一种灵活的方式来访问和操作内存中的变量,这在需要高效地处理大量数据或与硬件交互的程序中尤其有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值