各位好,感谢关注,直入主题:
产品有2个功能:
1,网络模块,接收指令和系统设置;其中有个parse_date_time函数,作用是把系统设置的时间,写入RTC中;
解析时,使用了两种方式将时间的字串保存;
void parse_date_time(char *str)
{
方式1:
char point[100]={0};
memcpy(point,str,datasize);
/**************
解析日期和时间
**************/
方式2:
char *point=NULL;
point=malloc(100);
memcpy(point,str,datasize);
/**************
解析日期和时间
**************/
free(point);
point = NULL;
}
2,串口模块,使用DMA进行与另一板子的通信;
3,使用1中的方式2(malloc),串口DMA收发正常;
使用1中的方式1(数组),串口DMA收发失败;
4,觉得可能是parse_date_time函数作妖,暂时将该函数屏蔽掉(整份代码中,没有malloc);串口DMA收发失败;
5,在其他不相干的函数,尝试先malloc,接着就free,不做任何操作,串口DMA收发正常;
表面现象:
串口的DMA收发,一定要有malloc;
猜测:
如果没有malloc,是否串口的DMA收发的内存空间,在编译的时候,就没有被分配?编译的时候优化掉了dma的内存空间?(哪怕优化级别为-O0)
很是困惑,希望得到大家的指点,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
請你思考一個問題,如果你寫一個很小的測試程序,由內存最低開始向上增長的「堆」和由內存最高向下增長的「棧」一定不會相遇,且還有很遠的安全距離。
假如你的程序棧只需要使用 20 個字節就夠,但你故意只定義了 10 個字節的 Stack_Size, 那麼請問溢出 10 字節之後會發生什麼?
感觉是这个问题,楼主改小试试
没有大容量局部变量,出错不进入hard fault;
一周热门 更多>