打印
[STM8]

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

[复制链接]
913|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优化掉吗

使用特权

评论回复
5
yiyigirl2014| | 2016-4-19 23:05 | 只看该作者
如果不是因为优化,可以把延时写成函数调用的形式。

void delya_us ( n )
{

……

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝