stm32(GD32,apm32),开优化后需要特别注意的地方

提到优化就不得不提及 volatile

使用场景
1:中断服务程序中修改的供其它程序检测的变量,需要加volatile; :
2:多任务环境下各任务间共享的标志,应该加volatile;
3:并行设备的硬件寄存器(如:状态寄存器)

还有一种就是今天遇到的查了半天,容易忘记

起因:
使用gd32F103cb来开发,然后采取i2c 协议操作eeprom,
调试eeprom写入的时候如图
stm32(GD32,apm32),开优化后需要特别注意的地方_第1张图片
延时2ms,在优化等级为O0的时候没问题,但是在等级为O3的时候经过调试发现,一直无法写入成功,因为我是采取TFDB方式来写入的,还以为移植TFDB出现了问题,最后直接通过调用最底层I2C 写入都失败,

让我们来看下这个延时函数的实现方法如下;
这个是我修改后的,加入了volatile
stm32(GD32,apm32),开优化后需要特别注意的地方_第2张图片
就是单纯的空运转,如果不加入关键字就会被优化掉,从而导致上述I2C的协议中延时出问题,最后导致因为协议问题无法写入eeprom。

你可能感兴趣的:(stm32,嵌入式硬件,单片机)