论坛» 嵌入式开发» MCU

请问瑞萨M16C系列如何计算一个空操作指令所用时间

菜鸟
2008-10-27 16:42 1楼
我简单测试了一次啊,外部时钟7MHz,PLLx2,所以M16C运行在14MHz,
p11_0=1;
asm("nop");
p11_0=0;
asm("nop");
asm("nop");
asm("nop");

我按照常规计算的话,一个空操作指令用一个机器周期的话,那么一个asm("nop")所用时间
应该就是(1/14)us=71.4ns.
可是我用示波器侧到的情况是
p11_0高电平时间是706ns
p11_0低电平时间是1.35us

奇怪的是为什么用示波器测到的asm("nop")时间为700ns左右,
为什么低电平时间不是高电平时间的三倍呢?
菜鸟
2008-10-28 15:44 2楼
M16C族拥有队列缓冲器,不占用总线时,预取指令代码。
软件手册中记载的各条指令的执行数是指令已经预取在队列缓冲器时的值。若未预取指令,则周期数增加。另外,队列缓冲器的状态取决于1条指令的插入或者删除,所以通过计算指令数来计算出程序执行的周期是十分困难的。
准确计算出周期数的最正确的方法是使用仿真器的跟踪功能,计算出周期数。
助工
2009-06-13 00:17 3楼

学习了~

高工
2012-02-27 10:44 4楼
要连接仿真器才能具体看到每条空指令的时间 记得要设置断点哦
连接仿真器状态下:
1、选择view-->CPU--->Status
2.、在弹出的对话框中选择platform一项
3、观察其中的Run Time Count即可
注意,只能统计从运行到下一个断点的时间
专家
2012-03-01 09:52 5楼
p11_0=1;
asm("nop");
p11_0=0;
asm("nop");
asm("nop");
asm("nop");

这里应该是有两个问题,一个是置高或者低的指令时间,然后是空指令的执行时间,所以会出现不是1:3 而是接近 1:2 ,关键就是设置为高或者低的指令运行时间
共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]