米迦勒
发表于 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
数据都没有按照指定的格式接收完全,应该也收不到结束符了吧。
建议你查一下上位机是不是就没有发送完全!
即使没有接收完全,也会在收到下一个结束符时把数据清理,好过一直清理不掉!