需要帮助理解指针(在C中)以接收UART的浮动



我需要通过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。

这篇文章有很好的解释。

相关内容

  • 没有找到相关文章

最新更新