程序中调用loop函数会影响堆栈,宏DELAY会吗?

[复制链接]
 楼主| hxdjb 发表于 2011-4-7 10:06 | 显示全部楼层 |阅读模式
本帖最后由 hxdjb 于 2011-4-7 10:32 编辑

#define  DELAY  6-3
void  loop(void)
       { nop
          nop
          nop
          nop };
void main(void)
   {
      DELAY;  //用宏 DELAY 会影响堆栈深度吗?
      loop; ()     
      .......
      .......
    }
ayb_ice 发表于 2011-4-7 10:23 | 显示全部楼层
调用时堆栈加深,退出时释放了
 楼主| hxdjb 发表于 2011-4-7 10:27 | 显示全部楼层

先谢谢ayb_ice,不好意思,我问反了,请再看看

本帖最后由 hxdjb 于 2011-4-7 10:36 编辑

用DELAY时也会堆栈加深吗?我想用DELAY代替函数LOOP()用来做微秒级的延时。
刘前辈 发表于 2011-4-7 10:32 | 显示全部楼层
除非这样,只嵌入,不调用:
    ……
   _nop_( );
  _nop_( );
  _nop_( );
  _nop_( );  
    ……


/
caighostniao 发表于 2011-4-7 10:35 | 显示全部楼层
来学习下
ayb_ice 发表于 2011-4-7 10:39 | 显示全部楼层
用宏是否会增加堆栈,那要看宏是怎么定义的
用你那个宏编译都过不了
 楼主| hxdjb 发表于 2011-4-7 10:55 | 显示全部楼层
本帖最后由 hxdjb 于 2011-4-7 11:05 编辑

编译通过了,这样行吗? 我就是想延时几个微秒,但是又不会影响堆栈,如果采用刘前辈的方法,ROM 不够。程序中用到
延时几个微秒的地方太多了。能否给个意见。
#define  DELAY(a,b)   a*b
uchar temp;
void  loop(void)
       { nop
          nop
          nop
          nop };
void main(void)
   {
      temp=DELAY(3,4);  //用宏 DELAY 会影响堆栈深度吗?
      loop; ()     
      .......
      .......
    }
ayb_ice 发表于 2011-4-7 11:43 | 显示全部楼层
LZ
堆栈没有那么紧张,一个平行的调用不会增加堆栈的深度,怕的是嵌套调用,
每嵌套一级调用增加2个字节的堆栈深度,一般很少有超过9级的嵌套调用,就算9级也才9*2=18字节
影响远小于中断
joyme 发表于 2011-4-7 11:43 | 显示全部楼层
宏是完全替代,智能节省写代码不能节省最终生成的代码量,你用a*b在c语言看似少了几行,可实际编译后你看汇编就知道比连用4个NOP要多很多,当然它的延时也不止这么多了。几个us如果主频是1MHz的话, 一个函数调用就差不多是4个指令周期即4us,你可以考虑loop函数里不要再加nop语句。
abin0415 发表于 2011-4-7 12:57 | 显示全部楼层
学习了
刘前辈 发表于 2011-4-7 19:23 | 显示全部楼层
本帖最后由 刘前辈 于 2011-4-7 19:28 编辑

很简单:直接嵌入NOP,计时精确,程序可靠,比调用跳转 / 返回好。

#define DELAY2  _nop_();_nop_()  
#define DELAY4  _nop_();_nop_();_nop_();_nop_()     //一个_nop_( ) 1 us或者固定延迟时间;

main( )

; DELAY4;
                        ; SOURCE LINE # 30
        NOP         
        NOP         
        NOP         
        NOP         
?C0001:


函数调用是要脱离程序轨道的,假设正在调用子程序中,随机中断发生,又跳到中断程序,中断又调用服务程序,……所以,跳来跳去并不好。


、、
ayb_ice 发表于 2011-4-8 08:52 | 显示全部楼层
LZ 看看这个帖子你就明白了 https://bbs.21ic.com/viewthread.php?tid=45743&highlight=
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

244

帖子

2

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