USART格式数据类型

时间:2017-04-23 20:14:29

标签: type-conversion atmega usart

我想问一下,我如何通过usart作为整数发送数据,我的意思是存储数字的变量。我能够发送char变量,但终端显示我这个数字的ascii表示,我需要看数字。 我编辑了如下所示的代码,但它给了我错误:"' USART_Transmit'"

的冲突类型
let asset = AVURLAsset(url: urlToYourAsset)
print(asset.fileSize ?? 0)

你有什么想法吗? PS:我希望你能理解我试图解释的内容。

2 个答案:

答案 0 :(得分:0)

我喜欢使用sprintf格式化序列号。

在文件的顶部,输入:

#include <stdio.h>

然后在这样的函数中编写一些代码:

char buffer[16];
sprintf(buffer, "%d\n", number);
char * p = buffer;
while (*p) { USART_Transmit(*p++); }

前两行在缓冲区中构造一个以null结尾的字符串。最后两行是一个简单的循环,用于发送缓冲区中的所有字符。我在格式字符串中添加了换行符,以便更容易看到一个数字结束而另一个数字开始的位置。

答案 1 :(得分:0)

从技术上讲,UART串行连接只是一个分为特定长度符号的比特流。完全可以以原始形式发送数据,但这需要解决许多问题:

  • 如何明确地识别传输的开始和结束?
  • 如何处理连接两端的字节顺序?
  • 如何以健壮的方式序列化和反序列化数据?
  • 如何处理传输错误?

当天结束时,事实证明,你永远无法解决所有的限制和二进制数据必须以某种方式进行转义或编码以防止误解。

就分隔传输而言,ASCII标准的创建者通过一组非打印控制字符解决了这个问题:您感兴趣的应该是特殊控制字符

  • STX / 0x02 /文字开头
  • ETX / 0x03 /文字结尾

还有其他控制字符构成一个非常完整的集合来构成数据结构;你不需要JSON或XML。但是,ASCII本身确实支持任意二进制数据的传输。然而,长期以来这项任务的标准主要内容是base64编码。用它来传输任意二进制数据。

你可能不应该用二进制传输的数字;只是推数字;如果你使用八进制或十六进制数字解析成整数是非常简单的(归结为一堆位屏蔽和移位)。