打印

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

[复制链接]
1850|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

粉丝