1.最近在做matlab转嵌入式c代码的测试,搞了二次规划的算法用matlab的embedded coder工具自动生成代码;
2.代码在vs2019的环境下正常运行,移植到stm32H743IIT6就报错:
报错内容:内存溢出。
原因:matlab生成的代码中包含了一个超级大数组,数组成员上万个。。。。网上搜索了一番,说是堆栈太小,需要在启动文件中更改堆栈。实测后无效。最后无意中解决了。
内容更新(5月6日):static修饰的数组不存储在栈区,而是在全局数据区,所以报错不是因为栈溢出。一般情况下堆栈溢出编译是不会报错的
3.解决方案
如下:勾选IRAM2即可
最后编译成功:
总结:内存溢出的问题也许并不一定是单片机的内存不够,也可能和编译器的配置有关,本人小白,该案例仅供参考,不做解决方案。欢迎各位讨论讨论单片机内存溢出的问题及解决方案。
最后问一问:那个IRAM2勾选后到底改变了什么,这个选项有什么作用,望指导。。
内容更新(5月6日):IRAM2是选择单片机的sram区,stm32h743有1mb的内存,但不是连续的。而iram2就是一块512kb的高速ram区,所以选择之后就可以运行不报错。