首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决mikroC上的溢出错误?

如何解决mikroC上的溢出错误?
EN

Stack Overflow用户
提问于 2013-06-04 09:16:23
回答 2查看 3.7K关注 0票数 0

我的程序有几个图像,我想做一些类似于带LCD和小键盘的菜单。它一直工作得很好,直到我遇到两个错误:

代码语言:javascript
复制
> Recursion or cross-calling of 'lcd_write'
> Not enough RAM for call stack

我读到了一些关于堆栈溢出的东西。我该如何解决这个问题?

我正在使用PIC16F877a和mikroC作为PIC v6编译器。

EN

回答 2

Stack Overflow用户

发布于 2013-06-04 19:56:55

解决这个问题的方法是-返回到上一个可编译版本,查看您引入的哪些更改会导致另一个对lcd_write的调用,重新构造您的程序,以便消除该调用,因为它会导致递归。例如,将lcd写入数据放入缓冲区,而不是立即写入,当您在缓冲区中发现某些内容时再写入。

递归在嵌入式环境中是不好的,因为它在编译时以未知的数量使用调用堆栈,并且像PIC这样的小型微处理器通常具有8个硬件调用堆栈(例如PIC16F877a),甚至小到2级。

嵌入式Gurus在调用堆栈方面有一系列的问题( a good explanation )。

票数 0
EN

Stack Overflow用户

发布于 2014-06-12 20:35:27

转到最新的可编译版本,成功编译它,然后转到视图选项卡,然后转到"Statistics“

在此菜单中,您可以看到调用函数树,并查看堆栈的极限所在。在相同的控制器上得到了同样的问题,并重新构造了我的I2C液晶屏函数,这样它们就不会在另一个被调用的函数中调用函数。

如果你真的不能优化你的代码,考虑升级到PIC18。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16908334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档