求助,死机问题,keil下优化等级的差异

[复制链接]
 楼主| 嘉兴小宋 发表于 2013-7-13 17:13 | 显示全部楼层 |阅读模式
公司有款产品使用的是AVR32,目前我的任务是使用STM32F013VCT6进行替换并升级部分功能。现在遇到了一个问题,比较头疼,保留原有的应用部分,替换了底层驱动,测试时使用其中一个功能会导致设备死机,优化等级为0时问题则消失,已经确认过在中断中调用的变量加上了volatile进行修饰。通过串口打印,多数情况下会死在这个位置:
#define get_bit(var, n)                (var & (0x80>>n))
#define set_bit(var, n)                (var |= (0x80>>n))
#define clr_bit(var, n)                (var &= ~(0x80>>n))
static void change_bit(unsigned char i_a,unsigned char j_b,unsigned char a, unsigned char *b)
{
        if(get_bit(a, i_a))
        set_bit(*b, j_b);
        else
        clr_bit(*b, j_b);
}
打印过,参数也都在合理的范围内,更奇怪的是,在这个函数调用前如果加上一句串口打印函数,也不会出现死机。很想知道,优化等级设置的影响,不知道有没有人遇到类似优化等级导致死机的问题。
tianli1980 发表于 2013-7-14 16:43 | 显示全部楼层
没有了解过,不太清楚,帮顶一下,希望有朋友能帮助你。
mybao 发表于 2013-7-14 16:47 | 显示全部楼层
优化后生成汇编看看
hawksabre 发表于 2013-7-14 20:18 | 显示全部楼层
帮楼主顶一个   话说   汇编  看不懂啊
 楼主| 嘉兴小宋 发表于 2013-7-15 14:36 | 显示全部楼层
问题找到了,是堆栈不足,局部变量申请过多,不过还是不能理解,这个跟优化等级存在什么关系,哪位知道其中的联系吗?
way3 发表于 2013-7-16 13:32 | 显示全部楼层
堆栈怎么不足了?局部变量申请过多都会出问题?你局部变量申请多少了?还是不怎么清楚。
zeluo 发表于 2013-7-16 18:40 | 显示全部楼层
这个汇编   真的看不懂啊   比较悲催     
zeluo 发表于 2013-7-16 18:41 | 显示全部楼层
水平有限   帮楼主顶一个    看看有没有高手能够解决这问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部