Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI C/C++编译器
我有以下结构、它们在 M3和 C28处理器之间共享、并由 PC 通过以太网和共享存储器提供值。 我将从 PC 向 M3和 C28发送相同的数据值。 然后、我将数据缓冲区转换到 PIDCTRL 结构中、并使用以下代码打印该结构的值:
typedef struct _PIDCTRL { Float32 设定点; Float32 公差; Float32. Kp; Float32. Ki; Float32 KD; Float32. maxOutput; Float32 最小输出; UINT16 PIDEnable; UINT16 状态; uint16 minStableTimeSec; uint16 maxSettingTimeSec; uint16 周期; uint16 保留; uint16 字段; }PIDCTRL;
// C28 / M3 uint_least8_t 的代码相同* replyData = PIDCTRL *pid =(PIDCTRL *) replyData; DbgInfo ("设置:%f %f %f %f %f %f %f %f %f %u %u %x %x %x"、 pid->SetPoint、pid->Tolerance、pid->Kp、pid->Ki、pid->Kd、pid->minOutput、 PID->maxOutput、pid->minStableTimeSec、pid->maxSettingTimeSec、 replyData[0]、replyData[1]、replyData[2]、replyData[3]);
我正在发送数据值(1.0、2.0、3.0、... 9.0)、这就是我看到的内容。 M3正确地转换并正确打印数据、但 C28不能正确转换浮点、只能转换 uint16字段。
M3设置:1.0000 2.0000 3.0000 4.0000 5.0000 8.0000 9.0000 6 7 0 80 3f
C28设置:0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 6 7 0 3f80 0 4000
我还打印了原始缓冲区的前4个字、注意到字节在 C28中交换、我认为 C28和 M3都是小端字节序、并且具有相同的 IEEE 754浮点值。 我是否遗漏了明显的东西?
这里还提供了一些其他信息。 函数 DbgInfo 在内部使用'System_vsnprintf'来打印格式化的值,并且我已将'System.extendedFormats ="%$L%$S%$F%f%f"添加到.cfg 文件中,以便打印可以使用扩展格式。 如果我在 PID_CONF 结构中手动设置浮点字段(例如 pid->KP = 5.324)、我还验证了打印在 C28上是否正常工作。 我已经尝试修改了结构打包、但这似乎也没有帮助。
Derek