查看: 8057|回复: 6

[其他] POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

[复制链接]

该用户从未签到

7

主题

66

帖子

0

注册会员

Rank: 2

积分
155
最后登录
2020-12-15
发表于 2013-3-5 11:36:20 | 显示全部楼层 |阅读模式
我现在用汇编编写了1us延时函数:
__asm ​​Delay_1us(vuint16_t us1)
{
nofralloc
  mulli R14,R3,8
  mtctr R14
  time_us1:
    nop
    nop
    nop
  bdnz time_us1
blr
}
目前我若延时1us,调用Delay_1us(1),通过定时器得到延时时间接近1us.但是我若想延时10us,调用Delay_1us(10),通过定时器得到延时时间有时能够达到20us,有时又不到10us.结果相差非常大,这是为什么?上面的条件跳转指令bdnz time_us1执行一次用了多少指令周期啊?麻烦各位高手帮帮忙解决哈!谢谢啦
注释:MPC5604P单片机,时钟周期64MHz,单周期指令。
我知道答案 目前已有5人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-3-6 09:29:51 | 显示全部楼层

    RE:POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

    1的话只执行了1次。建议改成1个nop,自己通过指令机器周期算一下。想精确还是用定时器比较好。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    66

    帖子

    0

    注册会员

    Rank: 2

    积分
    155
    最后登录
    2020-12-15
     楼主| 发表于 2013-3-6 18:10:54 | 显示全部楼层

    回复:POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

    回复第 2 楼 于2013-03-06 09:29:51发表:
    1的话只执行了1次。建议改成1个nop,自己通过指令机器周期算一下。想精确还是用定时器比较好。 

    嗯,我之前用的是1个nop,配出了1us延时,但是若要延时n个us,计数次数就不是简单地乘以n了。感觉条件跳转指令像是需要几条指令周期。后来调试结果显示应该要4到5条指令周期。刚好8*8=64,对应64MHz。因此我才用了3条nop。但是通过定时器计算得到的延时时间不稳定,有时准确有时偏差又非常大。
    我延时时间的计算是在中断里计算的,而且该中断优先级是最高的,应该不是中断引起的这种误差。希望安帮主给我解答哈,谢谢啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-3-7 09:34:46 | 显示全部楼层

    RE:POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

    延时的处理在小的时候,感觉非常明显。这个适合多次循环,比如delay(100).而在当前状态下,只执行1次,几次的话,机器周期的时间一定要算精确了。
    正如你说的,执行1次,可能需要8个机器周期,这个时候正好是1us,但是如果执行2次,理论应该是16个机器周期,但是你这里执行的应该不是16个,应该是小于16个。所以还需要你再仔细的算一下机器周期。建议用2个循环做。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    66

    帖子

    0

    注册会员

    Rank: 2

    积分
    155
    最后登录
    2020-12-15
     楼主| 发表于 2013-3-7 15:03:59 | 显示全部楼层

    回复:POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

    回复第 4 楼 于2013-03-07 09:34:46发表:
    延时的处理在小的时候,感觉非常明显。这个适合多次循环,比如delay(100).而在当前状态下,只执行1次,几次的话,机器周期的时间一定要算精确了。
    正如你说的,执行1次,可能需要8个机器周期,这个时候正好是1us,但是如果执行2次,理论应该是16个机器周期,但是你这里执行的应该不是16个,应该是小于16个。所以还需要你再仔细的算一下机器周期。建议用2个循环做。 

    通过这几天的学习,了解到指令周期经常不稳定,所以不能单纯地认为指令周期是一成不变的。好在我对延时要求没有那么严格,以后需要高精度的延时,还得用你之前的建议:定时器延时。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-3-7 17:29:35 | 显示全部楼层

    RE:POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

    1us的延时比较小,指定汇编指令的机器周期是固定的.NOP就是1个机器周期.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    66

    帖子

    0

    注册会员

    Rank: 2

    积分
    155
    最后登录
    2020-12-15
     楼主| 发表于 2013-3-8 17:03:52 | 显示全部楼层

    回复:POWER PC汇编条件跳转指令bdnz执行需要多收个指令周期啊?

    回复第 6 楼 于2013-03-07 17:29:35发表:
    1us的延时比较小,指定汇编指令的机器周期是固定的.NOP就是1个机器周期.
     
    e200 core includes features like prefetch buffers, branch prediction,  instruction and data cache (well, cache is not available on MPC5604P)… This  leads to higher performance but, on the other hand, the timing is a little bit  unpredictable. The execution time of the same loop may not be always the same. 这是飞思卡尔官方技术人员给我的答案。 也许对于POWER PC e200内核的强大性能,一个指令周期就是不可预测的吧。
     
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 07:33 , Processed in 0.099123 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表