你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
星辰一方 发表于 2015-9-11 08:22 大神我还有一个疑问,如果不用printf我怎么控制串口传送的格式呢?比如我要将大量数据通过串口DMA方式传 ...
是这样的,数据传送有多种目的。一种目的就是纯粹的信息传输,重要的是数据的应用和处理而非展示(好吧,展示也是一种使用,但你知道我的意思)。这种目的一般会尽可能的只保留必要信息,为了软件的处理方便还需要添加帧头,帧尾,命令字等。另一种目的主要用于数据的展示,交互的对象一般是人,而非软件。这时候需要通过相关技术,尽可能的只输出有效信息。比如键值和状态变化,才发送信息。或者隔一段时间再输出信息。这时候信息的展示页就成了一个问题。
上面啰嗦这么多,是为了为下面做一个铺垫。你说用DMA传送大量数据,这没有错误。这是第一种用法。然后你又说我要在上位机上需要十进制数据,这一点就有点值得斟酌了。
你应该知道十进制和十六进制其实到底都是二进制的数据,本身没有什么区别。如果我没有理解错误的话,就是你想在上位机的界面上展示便于人直接读取的信息。当然,你甚至有可能需要float形式的。那么上位机如果是你自己编写的。这就好办,你的重点就放在上位机上怎么来展示数据的问题。只要你的传送信息有一定的格式,比如: 帧头(0x7e)+帧ID+数据+帧尾,数据部分是两个int型整数,一个long型正整数,一个float数据。那么你在上位机就定义一个同样类型的结构体,使用指针来指定位置之后再用float或者cout输出。
但是如果你的上位机是一个写好的串口通讯工具(我才这正是你的情况),那么数据的传输一种就是用printf。另一种就是自己来写几个特定的处理程序。
比如你想输出"AD0:[float], AD1:[10进制],LED:亮",这样的信息。就需要分别为float,十进制和中文字符编写处理程序。这时候整个信息就要全部翻译成字符串,比如你想输出145这个十进制数,你就需要分别输出1,4,5各自的ascII或者Unicode的编码。在串口监视器也需要设置相应的编码格式。这种情况下,你不需要DMA也不要传送大量信息。因为这样的话,你自己也看不过来。
这种情况下最好的办法是站在巨人的肩膀上,用pringf吧。
以上是自己拙劣的总结,若有不当。请大神指导。