【发布时间】:2014-06-03 14:22:12
【问题描述】:
我对 AVR (atmega 8) 中的 SPI 有一些疑问。 我想传输字节 0xfe , 但函数看起来像这样:
void sendDataSpi(char data )
这是否意味着我必须将我的 intiger(十六进制值)转换为 char 然后发送 或者我可以像下面这样直接发送十六进制:
sendDataSpi(0xfe);
它应该有效吗? 提前感谢您的帮助。
【问题讨论】:
我对 AVR (atmega 8) 中的 SPI 有一些疑问。 我想传输字节 0xfe , 但函数看起来像这样:
void sendDataSpi(char data )
这是否意味着我必须将我的 intiger(十六进制值)转换为 char 然后发送 或者我可以像下面这样直接发送十六进制:
sendDataSpi(0xfe);
它应该有效吗? 提前感谢您的帮助。
【问题讨论】:
您正在混淆值的表示和身份。
因此,如果您发送0xFE,则不会发送十六进制。
从0xFE 和-2 或254 的转换发生在编译器中。就我们在此处看到的而言,它们是相同的(取决于您的平台上的 char 是签名还是未签名)。
所以是的,当然,它会按照你的方式工作。
【讨论】:
void sendDataSpi(char data ) 还是一个糟糕的 API。因为应该传输数据(原始字节),所以数据类型也应该反映这一点。接口应该是void sendDataSpi(uint8_t data)。 char 用于字符数据。