2812中C程序执行效率问题

lysword   2009-11-30 03:09 楼主
在使用合纵达开发板时查看了一下C语言的执行效率,发现非常之低。
以定时器中断为例(合纵达开发板样例程序),只在在中断中点灯并延时后熄灭,看延时时间,时钟150M,通用定时器不分频,周期中断。延时为while(i<100){i +=1;},即执行100个延时指令周期,可用示波器观察灯的闪烁周期竟然达到了32us!请问为什么会执行这么产时间?无论怎样计算都无法理解!

回复评论 (3)

引用:
haifeng_2812 写道:
在使用合纵达开发板时查看了一下C语言的执行效率,发现非常之低。
以定时器中断为例(合纵达开发板样例程序),只在在中断中点灯并延时后熄灭,看延时时间,时钟150M,通用定时器不分频,周期中断。延时为while(i<100){i +=1;},即执行100个延时指令周期,可用示波器观察灯的闪烁周期竟然达到了32us!请问为什么会执行这么产时间?无论怎样计算都无法理解!
有点不明白你想说的是定时器定的不准还是延时延的不准?
看你的做法,好像都有问题。定时器的时钟150M,你定了多长时间?32us?
延时为while(i<100){i +=1;},怎么可能就是执行100个延时指令周期,你看看汇编吧,
不要随便指责编译器的效率低,至少比你强。
点赞  2009-12-2 06:59
呵呵,我想楼上的大哥不太明白我的意思吧,我也并没有指责编译器,只是疑问而已。因为我现在开发的系统需要在一定的中断时间内完成较大程序量的处理,而规定的中断时间不够,所以想到要查看C语言与汇编执行效率到底有多大差距(之前用汇编写过,效率很高,为便于移植现在用C)。我用定时器中断,在主循环中还有其他处理程序,利用中断能更准确的观察程序执行时间。定时器中断周期为50us,再则定时器中断周期与中断内程序处理所需时间没有关系吧。
我看过编译后的反汇编,按照单指令周期6.67ns计算,怎么也不会有32us那么长,这正是我不可理解的地方!
点赞  2009-12-2 12:30
如果你的指令在Flash运行的话,就有可能不是6.67ns了!!!Flash 不是全速的!!!而且IO状态改变都有一定的延时!!!

[ 本贴由 leesoywang 于 2008-12-3 13:23 最后编辑 ]
点赞  2009-12-3 05:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复