米迦勒 发表于 2016-12-12 16:50:08

wyq0324 发表于 2016-12-12 16:45
如果不drop的话,字符串会一直存储在Source映射的内存空间里,不用再额外分配。

这个我知道,但是最开始我不是说,通过uart接收数据会分成几包数,产生好几个MESSAGE_MORE_DATA消息,如果这样的话,就需要把数据统一存储起来然后再进行处理了

米迦勒 发表于 2016-12-12 16:55:30

wyq0324 发表于 2016-12-12 16:45
如果不drop的话,字符串会一直存储在Source映射的内存空间里,不用再额外分配。

而且如果这样的话,有可能会造成 映射的内存空间溢出吧~~

米迦勒 发表于 2016-12-12 16:58:19

wyq0324 发表于 2016-12-12 16:54
不管收到多少MESSAGE_MORE_DATA,只要你不清理,所有收到的数据会存储在Source的内存空间里,直接用这段内存 ...

source的内存映射空间有多大啊

wyq0324 发表于 2016-12-12 16:59:56

米迦勒 发表于 2016-12-12 16:55
而且如果这样的话,有可能会造成 映射的内存空间溢出吧~~

通过malloc分配的空间不会比source映射的空间大。

数据当然要及时处理了,定义数据格式或分隔符,检测到一包数据后就处理和清理掉。

米迦勒 发表于 2016-12-12 17:02:25

wyq0324 发表于 2016-12-12 16:59
通过malloc分配的空间不会比source映射的空间大。

数据当然要及时处理了,定义数据格式或分隔符,检测 ...

嗯 我按照您的这个方法试试 多谢

wgc2013 发表于 2016-12-14 09:41:39

:funk::funk:

米迦勒 发表于 2016-12-14 16:10:32

wyq0324 发表于 2016-12-12 16:59
通过malloc分配的空间不会比source映射的空间大。

数据当然要及时处理了,定义数据格式或分隔符,检测 ...

实施过程中遇到了一个问题,如果数据没有按照指定的数据格式接收完,source缓冲区岂不是一直都不会清除吗

wyq0324 发表于 2016-12-14 16:33:19

米迦勒 发表于 2016-12-14 16:10
实施过程中遇到了一个问题,如果数据没有按照指定的数据格式接收完,source缓冲区岂不是一直都不会清除吗 ...

所以,你要加一个结束符,比如\r,标志本次发送结束,然后你就可以清除处理过的数据了。

米迦勒 发表于 2016-12-14 16:48:26

wyq0324 发表于 2016-12-14 16:33
所以,你要加一个结束符,比如\r,标志本次发送结束,然后你就可以清除处理过的数据了。

数据都没有按照指定的格式接收完全,应该也收不到结束符了吧。

wyq0324 发表于 2016-12-14 17:00:12

米迦勒 发表于 2016-12-14 16:48
数据都没有按照指定的格式接收完全,应该也收不到结束符了吧。

建议你查一下上位机是不是就没有发送完全!

即使没有接收完全,也会在收到下一个结束符时把数据清理,好过一直清理不掉!
页: 1 [2] 3
查看完整版本: 有关CSR8670 uart 接收数据的问题