将 String 传递给在 C 中接受 uint8_t 的函数

Passing String to a function that takes uint8_t in C

提问人:Rafay Shams 提问时间:10/6/2022 更新时间:10/6/2022 访问量:438

问:

我想通过 UART 发送一个字符串,但通过 UART 发送数据的函数接受作为参数。uint8_t

功能原型:UART2_Write(uint8_t txData);

我希望发送一个 8 个字符的长字符串,例如,我尝试了以下方法:"12345678"

#define UID ("12345678")
UART2_Write(UID);

char UID[8] = "12345678";
UART2_Write(UID);

const char *UID = "12345678";
UART2_Write(UID);

不幸的是,上述方法都没有产生成功的结果。

如果在这种情况下有办法发送字符串,请告诉我。

谢谢

C C串 PIC Microchip UIT8T

评论

1赞 Steve Summit 10/6/2022
听起来您需要遍历字符串中的所有字符,多次调用,每个字符调用一次。UART2_Write

答:

2赞 Willis Hershey 10/6/2022 #1

严格来说,在单个 UART 串行通信中发送整个 8 字节字符串是不可能的,因为 UART 一次以 5-9 位的块发送数据。根据 的输入参数类型,此传输似乎是在 8 位模式下完成的。您必须单独发送字符串中的每个字节。UART2_Write()

这可以通过循环访问字符串中的字符来完成。

例如:

for(size_t i = 0; UID[i] != '\0'; ++i)
  UART2_Write(UID[i]);

然后,如果串行接收器只期望 8 个字节,你就完成了,否则您可能需要发送一个终止字符,例如 0,它对应于 ASCII 中的 NULL,或者您可能想要发送 EOT(传输结束),它对应于 ASCII 中的 0x4。要了解应该发送什么来发出传输结束的信号,您可能需要阅读有关通过 UART 与之通信的设备的文档。

评论

1赞 Rafay Shams 10/6/2022
明白了。在接收端,字符串会显示为一个连续的字符串吗?还是一次一个角色?
0赞 Willis Hershey 10/6/2022
接收方一次将获得 1 个字节的字符串,但如果它期望一个字符串,这就是它期望接收它的方式,这应该不是问题
0赞 Willis Hershey 10/6/2022
即使是现代互联网连接也通过一次发送 1 个字节的数据来工作。这就是数字连接的工作方式
0赞 dimich 10/6/2022
strlen()这里是多余的。 或者 - 如果 null 终止符也必须发送。size_t i = 0; do UART2_Write(UID[i]) while(UID[i++]);const char *s = UID; do UART2_Write(*s) while(*s++);
0赞 Willis Hershey 10/6/2022
这是真的,但任何在帕尔马干酪中有价值的编译器都会优化成一个整数。绝对值得注意的是,@dimich建议的 while 循环都不适用于第二个示例,其中 只有 8 个字节长,因此不是以 null 结尾的strlen(<macro that expands to a string>)strlen()char[]