You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7在ARM平台使用Span<T>触发System.DataMisalignedException问题

问题分析

出现System.DataMisalignedException的核心原因是ARM32平台的内存对齐要求:RevPi Core S基于ARMv7架构,该架构要求4字节数据类型(如float)必须从4字节对齐的内存地址读取;而x86/x64平台允许不对齐内存访问(仅性能下降,不会抛出异常)。

你使用的FluentModbus 5.0.2的泛型方法ReadHoldingRegisters<float>,内部可能直接将未对齐的byte[]内存区域强制转换为Span<float>,触发ARM的对齐检查异常。

解决方案

放弃使用泛型转换方法,改用手动字节转float的方式,绕开对齐问题。利用你已经读取的calibration字节数组(已通过ModbusEndianness.LittleEndian处理好字节顺序),直接通过BitConverter完成转换:

// 替换原泛型方法的代码
var floatCalibration = new float[2];
// 第一个校准值K:对应前4字节(小端)
floatCalibration[0] = BitConverter.ToSingle(calibration, 0);
// 第二个校准值B:对应后4字节
floatCalibration[1] = BitConverter.ToSingle(calibration, 4);

Console.WriteLine("calibration K: " + floatCalibration[0]);
Console.WriteLine("calibration B: " + floatCalibration[1]);
验证逻辑

从你的输出可以确认字节数组是正确的:

  • 十六进制字符串0000003F9A993940拆分后为0000003F和9A993940
  • 小端模式下,0000003F反转成3F000000,对应float值0.5
  • 9A993940反转成4039999A,对应float值2.9
    手动转换会完全复现x64平台的正确结果。

内容的提问来源于stack exchange,提问作者Ingar Hjelle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:15:34