最近在用STM32F030,用了MDK 5.1的版本
写了一个串口+DMA+中断的小程序,一开始程序确实有点问题,死活不对。。。
后来发现MDK 在选择Level0时,出来的结果和我想的一样。选择Level2(default)以及Level3时,就不对了。
比如在调试中发现,使用level3的优化,明明还没有到DMA Enable的函数,DMA的寄存器就看到已经被enable了。。。。
怀疑是MDK对程序进行检测,发现多次操作这个寄存器(库函数的特点。。。),索性第一次赋值直接把它写成最终的结果?。。。
有人碰到类似的情况吗?这样如何避免呢?
PS:Level3比Level0确实会小一些(不过也就小了不到1KByte的空间),不知道后面程序写大了,可能优化效果更好,但是这样不敢用啊。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原来ISR程序中 有个if()判断,为了减小代码量, 就开了最高等级优化3,结果测试发现程序的逻辑老出现问题 仿真定位到ISR的if()每次都被跳进去了
把优化开到0 逻辑恢复正常了 再也不敢乱开优化了
一周热门 更多>