[STM8] STM8S 做延时函数,一直进不了循环

[复制链接]
1107|4
 楼主| keincclk 发表于 2016-4-19 11:32 | 显示全部楼层 |阅读模式
STM8S003想做一个US级的延时函数,但是用for或者while一直进不了循环 */   
         SystemClock_Init(HSI_Clock);
         GPIO_DeInit(GPIOD);
         GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);
          u8 i=0;
          while(1)
{
          GPIO_WriteLow(GPIOD, GPIO_PIN_2);         
          for(i=0;i<10;i++);
          GPIO_WriteHigh(GPIOD, GPIO_PIN_2);
          i=5;
           while(i)
           {i--;}
}
使用IAR单步调试也是直接跳过FOR和while函数。这是为什么?
dwq175 发表于 2016-4-19 14:03 | 显示全部楼层
这编译器优化的结果。
可以在for,while内添加nop指令。
airwill 发表于 2016-4-19 21:48 | 显示全部楼层
是的, 应该是编译器优化的结果. 可以调整一下优化级别
Snow7 发表于 2016-4-19 22:09 | 显示全部楼层
这编译器优化的结果

为什么是优化的原因,能把for(),while优化掉吗
yiyigirl2014 发表于 2016-4-19 23:05 | 显示全部楼层
如果不是因为优化,可以把延时写成函数调用的形式。

void delya_us ( n )
{

……

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

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