找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 500|回复: 3
打印 上一主题 下一主题
收起左侧

C语言数组空间浪费的问题

[复制链接]
跳转到指定楼层
楼主
ID:916493 发表于 2024-5-28 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在的modbus协议是这样实现的,串口发送数据01 04 10 10 00 02 74 CE,他的起始地址为0x1010,而我的代码获取起始地址为
ModBus_info.startRegAddr = (u16)ModBus_info.Modbus_Rx_Buff[2] << 8 | ModBus_info.Modbus_Rx_Buff[3];
获取到起始地址后会根据这个地址去自定义的数组的对应地址取数据,下面是实现的代码
for (u8 i = 0; i < ModBus_info.RegNum * 2; i++)
{
        ModBus_info.ModBus_Tx_Buff[3 + i * 2] = (Modbus_IO[ModBus_info.startRegAddr + i] / 256); // 先发送高字节--在发送低字节
        ModBus_info.ModBus_Tx_Buff[4 + i * 2] = (Modbus_IO[ModBus_info.startRegAddr + i] % 256); //
}
但是在起始地址0x1010前面的内容是没有用的,并且可能还没有数据,所以会造成浪费,他数组的数据就从起始地址0x1010到地址0x1025,现在就是不想设很大的数组,
怎么设置一个数组或者一个指针来实现

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:458247 发表于 2024-5-28 10:56 | 只看该作者
ModBus_info.startRegAddr = (u16)ModBus_info.Modbus_Rx_Buff[2] << 8 | ModBus_info.Modbus_Rx_Buff[3];

这行后面ModBus_info.startRegAddr这个值减去0x1010咯
回复

使用道具 举报

板凳
ID:916493 发表于 2024-5-28 16:45 | 只看该作者
yzw846562238 发表于 2024-5-28 10:56
ModBus_info.startRegAddr = (u16)ModBus_info.Modbus_Rx_Buff[2]

解决了 谢谢
回复

使用道具 举报

地板
ID:1109793 发表于 2024-5-29 15:19 | 只看该作者
为啥要用绝对地址呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表