打印
[STM8]

急问,IAR FOR STM8 中程序中增加一条指令后,延时变长

[复制链接]
3148|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jd9945|  楼主 | 2010-12-27 09:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遇到一奇怪的现象, 在程序的某个地方经常增加一条指令即使是nop();会出现程序的其他地方出现延时变长的现象,如下,即使我在前后增加了关中断,延时变长差不多18%左右,现无法找到问题的根源, 出现这种情况,只要在增加程序的方再增加一个nop()或延时指令,也可以恢复正常. 有时也可能通过设置优化级别也可以取消,但在写程序过程中不时又会出现,希望大家帮忙出出主意,,,,
for(i=0; i<8; i++)
   {
    GPIO_WriteLow(PORT_TX791, TX791); //clrb(port_tft_tx , tft_tx);
    if(temp&0x80)       delay(1);
    else                  delay(7);
    GPIO_WriteHigh(PORT_TX791, TX791);
    if(temp&0x80)      delay(1);
    else               delay(7);
    temp=temp<<1;
   }
沙发
STM32W108| | 2010-12-27 11:57 | 只看该作者
要找到原因,看汇编代码。

有两点课参考:
1.IAR 优化会相同代码合并成函数,代码空间减少了,但执行时间变长
2.STM8的指令执行时间并不是固定的,与执行所处在的上下文有关。

使用特权

评论回复
板凳
jd9945|  楼主 | 2010-12-27 12:14 | 只看该作者
谢谢,看过汇编代码,延时函数的汇编代码一模一样,没有发生变化。

使用特权

评论回复
地板
STM32W108| | 2010-12-27 12:55 | 只看该作者
本帖最后由 STM32W108 于 2010-12-27 13:32 编辑

加个nop,能影响nop前后几个指令的执行时间。

还能影响指令的对齐方式。(暂不清楚,指令对齐方式是否影响指令运行时间)

使用特权

评论回复
5
c555| | 2012-8-24 10:18 | 只看该作者
和我遇到一样的问题,我还在想办法解决

使用特权

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

本版积分规则

26

主题

84

帖子

0

粉丝