我需要通过UART将浮子从Simulink发送到C(嵌入MCU)。
我找到了适用于以相反方向发送浮子的代码,但是我需要完全理解它以编写用于接收浮子的代码。
这是原始代码:
unsigned char *chptr;
chptr = (unsigned char *) &floatvalue;
Tx(*chptr++);Tx(*chptr++);Tx(*chptr++);Tx(*chptr);
这是我的更改代码(可行):
float testFloat = 3.1416;
unsigned char *chptr;
chptr = (unsigned char *) &testFloat;
ROM_UARTCharPut(UART0_BASE,*chptr++);
ROM_UARTCharPut(UART0_BASE,*chptr++);
ROM_UARTCharPut(UART0_BASE,*chptr++);
ROM_UARTCharPut(UART0_BASE,*chptr);
我想我了解发生了什么的要旨,但是有些我不确定的事情:
float被声明为4个字节长。
float testFloat = 3.1416;
声明指针是1个字节长
unsigned char *chptr;
浮子的地址被投入指针。由于指针的位长度和char的差异,我假设只有浮点的位0到7的地址被投入到指针中(Little Endianness)
chptr = (unsigned char *) &testFloat;
接下来的四行是我的理解分解的地方。
ROM_UARTCharPut(UART0_BASE,*chptr++);
ROM_UARTCharPut(UART0_BASE,*chptr++);
ROM_UARTCharPut(UART0_BASE,*chptr++);
ROM_UARTCharPut(UART0_BASE,*chptr);
我知道"*chptr"是指向指向变量的值。我也知道"*chptr "会增加指针到下一个字节的地址。但是,该顺序对我没有意义。
如果我要标记4个字节浮子为:
byte4 byte3 byte2 byte1
在我看来,就像第一个发送行发送 *chptr 会发送byte2 byte1
下线将发送字节3,
下一行字节4
和最后一行的相邻变量或字节的字节。
但是,它确实在接收端(Simulink设置要在Little-endiann接收)确实可以正常工作,因此我的理解必须是错误的。
感谢您的任何澄清。
ps:一旦我理解这种方法,它将用于接收浮子吗?还是我吠叫错误的树?
谢谢
作为您问题状态的评论,您正在使用提前。因此,您的代码在给定的内存位置访问值,执行需要处理的操作,然后将指针移至下一个内存位置,准备下一行代码。
如果您一直在使用预入,那么您就是语句:"在我看来,就像第一个发送行发送 chptr 会发送byte2 not byte1 "是真的。如果要对此进行测试,请以调试模式运行代码,然后更改 *CHPTR 为 * CHPTR。
这篇文章有很好的解释。