求助!!keil c 中函数调用的问题!

[复制链接]
2663|3
 楼主| liqimcu 发表于 2007-2-28 11:13 | 显示全部楼层 |阅读模式
void Wr93c46(tBYTE Addr_93c46,tWORD Word_93c46)
    {
    tBYTE i;
    Wen93c46();
    SK93c46=0;
    DI93c46=1;
    CS93c46=1;//选中
    Clock93c46();
    Addr_93c46=Addr_93c46&0x3f|0x40;
    for(i=8;i!=0;i--)
        {
        DI93c46=Addr_93c46&0x80;
        Clock93c46();
        Addr_93c46<<=1;
        }
    for(i=16;i!=0;i--)
        {
        DI93c46=Word_93c46&0x8000;
        Clock93c46();
        Word_93c46<<=1;
        }
    CS93c46=0;//不选中,以降低功耗
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    CS93c46=1;//选中
    DO93c46=1;
    while(DO93c46==0)
        {
        ;
        }
    EWDS();                ///用在此处不成功?
    }

调试时发现函数    EWDS();  不是被做为子程序调用的(lcall EWDS()),而是直接跳到那儿去(ljmp EWDS()),请问谁知道这是怎么回事?? 谢谢!
xujunchen 发表于 2007-2-28 11:24 | 显示全部楼层

这是优化造成的,没有关系.

computer00 发表于 2007-2-28 11:27 | 显示全部楼层

因为这个函数放在最后,没必要返回两次

直接在EWDS函数内返回就行了。

例如A调用B,B又调用C,如果C在B的最后面,那么我们可以直接从C返回到A,没必要先返回到B,再又返回到A。


你在EWDS();之后随便写个什么有意义的语句,再来编译一下,结果就不一样了。
 楼主| liqimcu 发表于 2007-2-28 11:32 | 显示全部楼层

明白了,谢谢两位!!!

明白了,谢谢两位!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

53

帖子

0

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