打印
[STM8]

stm8a如何检测堆栈溢出

[复制链接]
4239|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 最后的战役 于 2014-12-4 13:50 编辑

程序用什么样的方法,检测堆栈溢出?如果不能仿真时,又如何检测堆栈溢出?我在做iap时,app程序从0x9000开始,在一个函数里如果调用另一个函数,就不能正常运行。如果屏蔽了,能运行。会是哪里的问题呢?

C:\Users\Administrator\Desktop

QQ截图20141204134848.png (93.12 KB )

QQ截图20141204134848.png
沙发
最后的战役|  楼主 | 2014-12-6 20:56 | 只看该作者

使用特权

评论回复
板凳
acgean| | 2014-12-7 21:38 | 只看该作者
检查堆栈溢出是个比较复杂的编程问题。
有的是实时检查,当要使用堆栈(比如调用子程序)检查一下堆栈指针,看看剩余堆栈空间。但由于各子程序使用堆栈数量很难确定,往往放不小的余量。不能真正检测溢出。
另外通过外面的监控手段。先在堆栈预先写特别字符(比如0x5A),运行一段时间后,看堆栈里还有多少 0x5A没有改写,从而知道堆栈最大到了哪里,该不该增加堆栈的设置;或者基于 CPU 的内存保护措施(比较靠谱)的堆栈溢出检测手段,超出内存范围的访问将导致 CPU 异常。

使用特权

评论回复
地板
最后的战役|  楼主 | 2015-7-28 15:04 | 只看该作者
acgean 发表于 2014-12-7 21:38
检查堆栈溢出是个比较复杂的编程问题。
有的是实时检查,当要使用堆栈(比如调用子程序)检查一下堆栈指针 ...

谢谢你的回复。我用stvd环境,做bootloader的app。当app程序大小大于0xffff时,把这个app下进去,不能正常运行。调整app程序大小,小于了0xffff,下进去,程序正常运行。我用stm8af51a9,flash可达0x27fff呢。我搞不懂这个问题,只能避开了。

使用特权

评论回复
5
最后的战役|  楼主 | 2015-7-28 15:08 | 只看该作者
acgean 发表于 2014-12-7 21:38
检查堆栈溢出是个比较复杂的编程问题。
有的是实时检查,当要使用堆栈(比如调用子程序)检查一下堆栈指针 ...

我现在又遇到别的问题,我在做can接口的bootloader(stm8af51a9)。请问can接口接受数据可用查询方式吗?只能用中断方式吗?我现在就是用中断方式,但是如果boot里用中断,app里的中断怎么处理?
因为我前面下载部分的都做完了,下完程序后发现不正常运行,一想中断向量表还没处理呢。最好boot和app都能开中断,各自走各的中断向量表。这样我改动很小。请问大神们有什么高见?

使用特权

评论回复
6
acgean| | 2015-7-31 08:30 | 只看该作者
bootload 和 app 是不会同时运行的, 也就可以各自管理使用所有的 RAM.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

19

帖子

0

粉丝