TI论坛
直播中

卢表镜

7年用户 1007经验值
私信 关注
[问答]

2812执行一条16位加法指令要几个时钟周期?

用2812编写采样程序,在采样值排序平均时发现每条指令运行占用很长的时间。一个定点除法_iqdiv就用掉200多个指令周期,于是考虑可能是程序烧写在flash中导致的。然后写了烧写在ram里的测试程序,发现写在ram中运行速度依然很慢。
代码段如下,纯粹为了验证程序执行时间。程序烧写到ram中进行在线调试。结果如图所示。没有运行中断服务程序,运行两个断点之间的程序要18个指令周期。请教一下是哪里出了问题?
Uint16 THETA = 0xaa;
Uint16 OMEGA = 0x55;
THETA=THETA+OMEGA;
THETA=THETA+OMEGA;
THETA=THETA+OMEGA;
THETA=THETA+OMEGA;
THETA=THETA+OMEGA;
THETA=THETA+OMEGA;

回帖(7)

刘丽艳

2020-5-29 13:53:49
反汇编一下,看一下你这一条add被编译器解析成啥样了?
                                                                         Holly
举报

卢表镜

2020-5-29 14:04:07
引用: ctx1129 发表于 2020-5-29 14:17
反汇编一下,看一下你这一条add被编译器解析成啥样了?
                                                                         Holly

谢谢!
反汇编后是这样的,解析的确实是一条add指令。
新的现象是:我单步运行c程序,每运行一个c语言16位加法用一个机器周期。但全速运行时,5个加法就用了18个指令周期。
我又检查了程序确实没有中断服务函数,请问则可能是什么原因呢?
举报

刘丽艳

2020-5-29 14:21:45
可能的原因是加法指令的执行和取指不是流水线结构的,又共用了寄存器。这样一条指令周期执行了加法,又要花一个指令周期取指令。累计起来就是双倍的时间了。
                                                                         Holly
举报

韩香茹

2020-5-29 14:29:58
您好 打扰一下 能问下这个时钟符号是怎么调出来的么
举报

更多回帖

发帖
×
20
完善资料,
赚取积分