公司有款产品使用的是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);
}
打印过,参数也都在合理的范围内,更奇怪的是,在这个函数调用前如果加上一句串口打印函数,也不会出现死机。很想知道,优化等级设置的影响,不知道有没有人遇到类似优化等级导致死机的问题。 |