搜索
bottom↓
回复: 8

请教:iar avr4.10 在main()函数里申明BYTE 数组,主程序跑飞了?

[复制链接]

出0入0汤圆

发表于 2006-3-16 00:00:36 | 显示全部楼层 |阅读模式
如果将在主函数里申明的数组,改成全局的则没有,不知道为什么。各位高手不知道碰见这种情况没有?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2006-3-16 12:05:09 | 显示全部楼层
看看是不是堆栈溢出了,多半都是这个问题

出0入0汤圆

 楼主| 发表于 2006-3-16 13:09:52 | 显示全部楼层
编译的时候也不报错,我用的是MEGA64L的片子,带有4k的RAM,我才用了几百个字节。我用了Timer1的溢出中断。在主程序的去判断按键,老是在进出中断的时候,按键电平判断出错,不知道有没有人碰到过这种情况。

出0入0汤圆

 楼主| 发表于 2006-3-16 14:36:44 | 显示全部楼层
十分感谢goldpicker,问题已经解决,就是堆栈溢出的问题。可是编译的时候也不报错,怎么去设置那个堆栈大小。CStack和RStack 有什么区别,大小为多少合适。

出0入0汤圆

发表于 2006-3-16 14:55:39 | 显示全部楼层
RStack只保存返回地址,可以小一点,CStack需要保存寄存器和用于局部变量,要看具体应用

出0入0汤圆

发表于 2006-3-16 18:57:42 | 显示全部楼层
程序四种错误需要区分开来: 编译错误, 链接错误, 运行错误, 逻辑错误



    编译错误, 就是语法错误, 比如句尾没有分号, 宏, 关键字重定义等等

    链接错误, 程序本身一般(注意是一般)没有什么问题. 比如引用的外部变量, 函数等等没有定义或者重复定义. 比如申明了函数, 类, 类成员, 但是没有实现. 都会导致链接错误.



    编译错误是由编译器报出, 链接错误有链接程序报出. 这两项工作完成了, 开发平台"报错"的任务完成了.剩下是你你的工作了.



    运行错误, 可执行文件生成了, 在运行的过程中报出来的"错". 可能是正常报错, 比如程序检测到运行所需要的数据没有准备好等等. 报"错"之后可能程序可以继续运行, 可能导致异常.

    逻辑错误, 一般是语意错误, 也就是代码的缺陷, 一般都是写的代码不能准确的表达你想表达的意思导致程序运行的结果和你期望的不一致. 比如 a = i << 2 +8, 你想让i左移2位后再加8, 但实际的结果是i左移了10位.



    前两种错误是静态错误, 没有生成可执行文件, 就表示至少发生了这两种错误里的一种. 这就是大家平时说的"编译器报错".

    后两种错误是动态错误, 只有程序运行起来了, 才会报出来的错. 如果有这两种错误, 需要大家用某种调试方法找出来加以排除.



    因此大家在交流程序开发的问题时, 要能准确说出是上面四种错误的哪种, 别人就可以有针对性的对问题进行讨论.

    而且编译错误和链接错误一般编译平台都会给出错误号, 依据错误号和错误行, 就能更方便找出错误所在了.



    楼主的栈溢出错误属于运行错误. 因为程序已经生成, 并且不存在逻辑功能的问题. 是在运行的时候栈空间不够了, 才导致程序异常.



    希望这段话对大家调试c, c++程序有所帮助.

出0入0汤圆

 楼主| 发表于 2006-3-20 11:47:32 | 显示全部楼层
谢谢jimo,梳理得很好。对错误有了更好的认识。在次感谢那些乐于帮助别人的同志。

出0入0汤圆

发表于 2006-3-20 15:04:06 | 显示全部楼层
因为IAR的局部变量都是放在栈里的.所以如果栈空间不够,就会溢出.我一开始也是发现了这个问题.所以你讲的情况和我一样,不过你比我幸运,我自己摸了好长时间,才找到原因,查了N多的英文资料.我觉得其实这里的堆栈溢出,因该可以报错才是,因为毕竟都是静态分配的变量,完全可以检查出堆栈是否溢出的.

出0入0汤圆

发表于 2014-11-24 16:00:12 | 显示全部楼层
我也遇到这样的问题,将局部数组改成全局数组就好了,后来才知道局部数组是堆栈溢出真正的原因
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 06:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表