2 baidu 31083567 baidu_31083567 于 2016.01.20 14:59 提问

我把串口接受的数据放到数组里面进行处理,

现在遇到一个问题,这个串口可能会不停工作,工作一天以上,这样的话这个数组应该怎么动态申请内存呢

2个回答

caozhy
caozhy   Ds   Rxr 2016.01.20 15:12

new或者malloc,但是也可以不动态申请,固定一个缓冲区。就你的需求,没必要动态申请

baidu_31083567
baidu_31083567 我的意思是我用数组存放很多很多的数据,所以现在需要一个无上限的数组
2 年多之前 回复
91program
91program   Ds   Rxr 2016.01.20 15:24

申请多少内容,不是根据工作多少时间,无是根据接收到多少数据量!
如果数据量不大,就可以一次完成内存申请;如果数据量不确定,就必须采用动态分配 ralloc & reralloc 的方法。

91program
91program 回复蓝牙开发:我也是写了一个串口助手之类的程序,malloc/calloc/new都可以,先申请一个较大的空间如 1M。开始接收!当接收到的数据大于 1M时,再申请2M。然后将已经接收到的 1M 复制过来。再释放此1M的空间!然后继续、循环此过程。
2 年多之前 回复
baidu_31083567
baidu_31083567 我使用mfc编写一个串口助手,由于它连续工作的时间长,所以这个数组需要无限大才能放得下所有接收的数据啊,MFC好像没有ralloc吧
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
stm32f103串口接收数据后发送数组的数据
stm32f103串口接收数据后发送数组的数据,代码主要在中断函数里,接收到数据后会发送数组中的数据,可以根据要求修改,简单易学,通过了编译
串口处理数据(接收、解析、回复、框架)
          //-----------------------------------------------#include   #include   //----------------------------------------------- sfr   AUXR=0x8e;     sfr   CLK_DIV=0xC7;   sfr   WDT_C
51单片机接收数组
   最近在做一个项目,其中有一模块是需要通过串口使单片机与电脑进行通信,在单片机中我是用C语言进行编程,在应用程序中是用.net编程。其中有一个要求是电脑一次发送十个数据,单片机里定义一个数组,接收这10个数据。可是在进行检验的过程中却发现接收的数据会移位,比如我从电脑中发送的数据是a,b,c,d,e,f,i,j,k,l.那么理论上我在单片机中定义的数组array[10]应该也是array[10]={a,b,c,d,e,f,i,j,k,l.可实际上却不是这样子的,正真接收的数据是array[10]={l,
STM32之USART串口接收数据处理
//原帖http://bbs.elecfans.com/forum.php?mod=viewthread&tid=445463 //在学习过程中发现几处编译错误,并改正; //主要贴出定义、和中断函数部分; uint8_t usart_rx_buf[5][40];    //接收缓冲,最大40个字节 uint8_t usart_rx_temporary[40]; //数据保存暂存器,最
51单片机串口接收一个数组
/****************************************************************************************** 串口中断函数 ReData[]: 里是一个字节类型的数组,这里一次只接收8个字节数据. *************************************************************
队列方法接收串口的数据
通常在接收串口数据时,往往由于发送端发送数据量太快导致接收端无法完全接收发送过来的数据。原因是还没有来得 急处理数据,后面的数据已将前面数据覆盖。所以在处理此问题时,必须用队列的方式处理串口的数据。。即把接收数 据和处理数据分开处理。用缓冲的方法,如下。。 typedef struct {         unsigned int  UsartRxbuf[1000]; //接收串口b
串口数据接收处理
串口接收函数只需要管理数据的接收就行了,不必管理相应数据接收的是什么,还有顺序对不对,真正寻找数据的地方是在数据处理的地方。void USART2_IRQHandler(void) { if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { if(esp8266_cnt >= sizeof(esp8266_buf
mfc串口通过串口接收到的数据进行分离处理
cvMFC串口接收数据或者字符串进行提取和分离,适合初学者学习。
关于串口接收的处理策略
串口;接收;粘包;断帧
C#对串口数据接收的处理
总体借鉴博客园的,虽然知道模式,但是借鉴了别人的写法:点击打开链接 个人的意见与思路: 1.先获取足够的数据信息。 2.判断帧头,获取需要的数据信息 3.帧尾结束,执行下一次判断 4.移除处理过的数据 使 用缓存机制完成。首先通过定义一个成员变量List buffer = new List (4096);用来存放所有的数据,在接收函数里,通过buffer.AddRange()方