keil c 中函数调用的问题!

[复制链接]
 楼主| liqimcu 发表于 2007-2-28 10:15 | 显示全部楼层 |阅读模式
void&nbsp;Wr93c46(tBYTE&nbsp;Addr_93c46,tWORD&nbsp;Word_93c46)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;tBYTE&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;Wen93c46();<br />&nbsp;&nbsp;&nbsp;&nbsp;SK93c46=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;DI93c46=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;CS93c46=1;//选中<br />&nbsp;&nbsp;&nbsp;&nbsp;Clock93c46();<br />&nbsp;&nbsp;&nbsp;&nbsp;Addr_93c46=Addr_93c46&0x3f|0x40;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=8;i!=0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DI93c46=Addr_93c46&0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clock93c46();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Addr_93c46&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=16;i!=0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DI93c46=Word_93c46&0x8000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clock93c46();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Word_93c46&lt&lt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;CS93c46=0;//不选中,以降低功耗<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;CS93c46=1;//选中<br />&nbsp;&nbsp;&nbsp;&nbsp;DO93c46=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(DO93c46==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;EWDS();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///用在此处不成功?<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />调试时发现函数&nbsp;&nbsp;&nbsp;&nbsp;EWDS();&nbsp;&nbsp;不是被做为子程序调用的(lcall&nbsp;EWDS()),而是直接跳到那儿去(ljmp&nbsp;EWDS()),请问谁知道这是怎么回事??&nbsp;谢谢!
原野之狼 发表于 2007-3-3 12:37 | 显示全部楼层

RE:

我也有遇到这种情况:<br />可以查看一下汇编代码,看看到底是怎么运行的。<br />改变一下优化选项<br />确定器件没有选错<br />实在不行,稍稍改变一下程序接口,或者改变一些变量或函数的命名。<br />
风吹草动 发表于 2007-3-3 22:23 | 显示全部楼层

要是把EWDS();放到while()里面会有什么结果呢?

  
computer00 发表于 2007-3-3 23:12 | 显示全部楼层

已经解决过的了

  <br /> 相关链接:<a href='https://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2453089'>https://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2453089</a>
 楼主| liqimcu 发表于 2007-3-7 10:00 | 显示全部楼层

已经有高人指点过了!

&nbsp;xujunchen&nbsp;发表于&nbsp;2007-2-28&nbsp;11:24&nbsp;侃单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />2楼:&nbsp;这是优化造成的,没有关系.&nbsp;<br /><br />&nbsp;<br /><br /><br /><br />欢迎报名参加&nbsp;新型触摸屏技术及其控制方案&nbsp;在线研讨会&gt&gt&gt<br />&nbsp;<br />&nbsp;<br /><br />&nbsp;computer00&nbsp;发表于&nbsp;2007-2-28&nbsp;11:27&nbsp;侃单片机&nbsp;←返回版面&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />3楼:&nbsp;因为这个函数放在最后,没必要返回两次&nbsp;<br /><br />直接在EWDS函数内返回就行了。<br /><br />例如A调用B,B又调用C,如果C在B的最后面,那么我们可以直接从C返回到A,没必要先返回到B,再又返回到A。<br /><br /><br />你在EWDS();之后随便写个什么有意义的语句,再来编译一下,结果就不一样了。&nbsp;<br />&nbsp;<br />
ayb_ice 发表于 2007-3-12 10:00 | 显示全部楼层

随便说说

&nbsp;&nbsp;&nbsp;&nbsp;EWDS();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;用在此处不成功?<br />&nbsp;&nbsp;&nbsp;&nbsp;_nop_();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;添加即可(还必须有合适的头文件)
maxking 发表于 2007-3-12 16:21 | 显示全部楼层

头文件是"intrins.h"

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

53

帖子

0

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