4065|8

109

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

c2000的switch指令周期有多长?? [复制链接]

本帖最后由 eeacc 于 2014-6-17 14:09 编辑

我用的是F28027,做了个小程序发现一条switch语句竟然达到了5us的时间,6个case,60M频率,这正常么?比运算几个乘除法都长啊
if  else  同样达到了5us.难道选择语句很耗时间?

最新回复

好的,谢谢你的方法分享,学习了,谢谢。   详情 回复 发表于 2014-6-20 20:34
 
点赞 关注

回复
举报

1119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
过来看看~~~~不是很了解
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

板凳
 
本帖最后由 dontium 于 2014-6-17 17:25 编辑

楼主是用什么办法测试那条语句是5us时间的?


一般的,CCS的编译器对switch语句的处理是用比较加跳转指令
以下以某一程序为例,看看它的指令时间

switch ( abc )
{
case: 1
    .....
case:2
   ......
}
相应产生的指令是:

        指令 ------------------------------- 注释 --------------------------执行周期
        MOVW      DP,#_abc  ;      数据段指针初始化。                  1
        AND       AL,@_abc,#0x00ff      假如使用低八位用判断            1
        CMPB      AL,#119               比较                            1
        BF        $C$L11,EQ             跳转                            4/4
        ;
        CMPB      AL,#187               第二个case,同上
        BF        $C$L12,EQ           
        ;
        CMPB      AL,#221               第三个case,同上
        BF        $C$L13,EQ            
        
        CMPB      AL,#238               第四个case,同上  
        BF        $C$L14,EQ           

可见,在执行此语句时,2周期是公用的,假如匹配最后一个,每增加一个case,就增加5个周期,

楼主说的5us,执行的周期数 = ( 5 / 16.666 )* 1000 = 300
这样,这个 switch语句应该有59个case,并且,是在最后一个匹配的。



显然,楼主没有说清楚问题。或者,计时不正确。



点评

版主:你好,请问下你的这种计算执行语句用了多长时间的方法,是怎么看的呢?比如,我想知道在AD中断中处理任务所占用的时间,我应该怎么看呢?谢谢。  详情 回复 发表于 2014-6-19 22:26
我是用的一个IO来观察执行时间,在SWITCH语句前IO=1,{}后IO=0,然后用逻辑分析仪进行观察,算了几个乘除法只用了4点几个us,但一个switch语句就花了5us,很纳闷哪。而且case只有6个。  详情 回复 发表于 2014-6-18 20:43
 
 
 

回复

109

帖子

0

TA的资源

一粒金砂(中级)

4
 
dontium 发表于 2014-6-17 17:20
楼主是用什么办法测试那条语句是5us时间的?



我是用的一个IO来观察执行时间,在SWITCH语句前IO=1,{}后IO=0,然后用逻辑分析仪进行观察,算了几个乘除法只用了4点几个us,但一个switch语句就花了5us,很纳闷哪。而且case只有6个。
 
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

5
 
dontium 发表于 2014-6-17 17:20
楼主是用什么办法测试那条语句是5us时间的?



版主:你好,请问下你的这种计算执行语句用了多长时间的方法,是怎么看的呢?比如,我想知道在AD中断中处理任务所占用的时间,我应该怎么看呢?谢谢。

点评

用IO开关来做应该是最准的,在要测的语句前开启或关闭,在语句后IO取反,然后运行,用示波器或逻辑分析仪看高电平或低电平时间即可。顶多减去两个周期的IO控制时间  详情 回复 发表于 2014-6-20 07:39
一个方法是计算指令数及所占的周期。 第二个方法是在DEBUG下使用那个叫什么?--必须在DEBUG下才行,等我仿真时取图给你  详情 回复 发表于 2014-6-19 23:10
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

6
 
506977544 发表于 2014-6-19 22:26
版主:你好,请问下你的这种计算执行语句用了多长时间的方法,是怎么看的呢?比如,我想知道在AD中断中处 ...

一个方法是计算指令数及所占的周期。
第二个方法是在DEBUG下使用那个叫什么?--必须在DEBUG下才行,等我仿真时取图给你

点评

非常感谢,我先按你讲的方法一试试,期待方法二中,谢谢版主。  详情 回复 发表于 2014-6-20 20:29
 
 
 

回复

109

帖子

0

TA的资源

一粒金砂(中级)

7
 
506977544 发表于 2014-6-19 22:26
版主:你好,请问下你的这种计算执行语句用了多长时间的方法,是怎么看的呢?比如,我想知道在AD中断中处 ...

用IO开关来做应该是最准的,在要测的语句前开启或关闭,在语句后IO取反,然后运行,用示波器或逻辑分析仪看高电平或低电平时间即可。顶多减去两个周期的IO控制时间

点评

好的,谢谢你的方法分享,学习了,谢谢。  详情 回复 发表于 2014-6-20 20:34
 
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

8
 
dontium 发表于 2014-6-19 23:10
一个方法是计算指令数及所占的周期。
第二个方法是在DEBUG下使用那个叫什么?--必须在DEBUG下才行,等我 ...

非常感谢,我先按你讲的方法一试试,期待方法二中,谢谢版主。
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

回复

182

帖子

7

TA的资源

一粒金砂(中级)

9
 
eeacc 发表于 2014-6-20 07:39
用IO开关来做应该是最准的,在要测的语句前开启或关闭,在语句后IO取反,然后运行,用示波器或逻辑分析仪 ...

好的,谢谢你的方法分享,学习了,谢谢。
 
个人签名每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表