使用STM32,IAR环境下 其中一个片段代码如下:
if((analog(5) - analog(6))>10 && (analog(7) - analog(6))>10)// -----1 { printf("m2");
}else if((analog(5) - analog(7))> 10) { printf("m3"); }else { printf("m1"); } 这段代码中analog(5)为模拟量采集函数,5为第5通道
用IAR 编译器 试验1、在Options > C/C++Compiler 中的Optimizations内设置 Optimizations中 选speed ;选High(或low 或Medium) 编译链接下载后发觉上述的语句中不管外部条件怎么样都显示的时m2,就是说即使外部条件设置成第---1个语句不满足条件 但结果程序都是认为第一个语句是真 试验2、在Options > C/C++Compiler 中的Optimizations内设置 Optimizations中 选speed ;选None 结果显示时与外部设置时一致的,也就是说上述的代码时符合实际的 但出现了另外的一个问题:在模拟通道上加入3.4V电压时 采样的模拟量输出变成了3398,按理此次变成4096才正确(试验1的条件下输出模拟量是4096)
上述的原因是什么,为了反映真实的情况应该如何处理?? |