这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » AVR AVR工作速度疑问

共3条 1/1 1 跳转至

AVR AVR工作速度疑问

院士
2006-09-17 18:14:16     打赏
AVR AVR工作速度疑问



关键词: 工作     速度     疑问    

院士
2006-12-22 22:43:00     打赏
2楼
问 今天第一次接触AVR单片机,为了验证AVR单片机(ATmega8)是否书上说的“每个时钟周期指令运行一条指令”,于是编写了一个最简单的测试程序,只运行While(1){IO = !IO;},用CodeVision编译,结果数字示波器看到的是1.92MHz的方波。如果是书上所说的“每个时钟周期指令运行一条指令”是否应该远高于2MHz?
请高手指点。  1: 汇编指令?c语句?指的应该是汇编指令,c一条语句可能被编译成n条汇编指令 2: AVR的设计就是方便用C编程如果用C编程只有汇编的1/8效率,那我凭什么选用AVR?又贵又不好
我等一下再用汇编试试。 3: 我也是新手,说不大清按我的理解,利用高级语言来写程序是为了更容易理解,维护,执行效率的话汇编当然快,不过说到好用的话,还是c,这是我学c到现在的感觉,容易看的懂。

而且,AVR是哈佛结构的,区分数据空间和程序空间,标准c是没有这种区分的,所以也不能说AVR设计方便用c编程。 4: 用什么也达不到16MHz 5: 当然“用什么也达不到8MHz”,但效率也实在太低了。“标准c是没有这种区分的,所以也不能说AVR设计方便用c编程”,但是编译器就是否应该有区分?
我的项目希望是,怎样才能高于3MHz? 6: 我是说用汇编也达不到你排一排时序就知道了, 7: 厉害!! 你用汇编写一写。。。。 a=!a  a=!a  a=!a也只有8M! 8: 关于速度,这不是CPLD,一条指令设高,一条指令设低,已是最快由于你加入了跳转,很明显,你没有加入优化,所以,速度已经很可以了。

运行速度在于“if for call”真正讲求速度的,就是FPGA. 9: 顶楼的兄弟,你的简单程序可是得费不少的汇编语句哟 10: 真是被wireless的逻辑笑死了。如果他写句x=sin(a),也得要求在1个时钟周期内做出来吗?应该去学学单片机的基本原理。 11: 刚入门肯定是个刚入门的,别急以后会明白到底是怎么回事 12: CV效率不高 13: 笑死了。 14: 提高认识总是要有过程的,别急 15: 赫赫,好好研究~~~ 16: 呵呵,仔细想想吧。“高手”说的不错。 17: 我试了一下!我用GCC编译Mega128的:
C语言:while(1){PORTB = ~PORTB;}    ,编译出来的汇编是:
47:               PORTB = ~PORTB;
+000000A4:   B388        IN      R24,0x18         In from I/O location
+000000A5:   9580        COM     R24              One's complement
+000000A6:   BB88        OUT     0x18,R24         Out to I/O location
+000000A7:   CFFC        RJMP    -0x0004          Relative jump
这里中共用5 clock

但是,按照楼主说的 IO = !IO来做
C:while(1) {PORTB = !PORTB;}         ,编译出来的是
47:               PORTB = !PORTB;
+000000A4:   E090        LDI     R25,0x00         Load immediate
+000000A5:   B388        IN      R24,0x18         In from I/O location
+000000A6:   2388        TST     R24              Logical AND
+000000A7:   F409        BRNE    +0x01            Branch if statusflag cleared
+000000A8:   E091        LDI     R25,0x01         Load immediate
+000000A9:   BB98        OUT     0x18,R25         Out to I/O location
+000000AA:   CFF9        RJMP    -0x0007          Relative jump
这里应该会执行8-9 clock,刚好和楼主所说的频率相约,固AVR指令执行的时间应该没错。

新人的愚见,还望更正! 18: to:zsmbj“如果他写句x=sin(a),也得要求在1个时钟周期内做出来吗?应该去学学单片机的基本原理。”
“x=sin(a)”同“IO=!IO”相同吗?别人嫌你的东西贵,你就说“不如送给你”?
这是什么逻辑? 19: 多谢vagrantzAVR我的确是刚开始使用,所以才会测试它的速度,以便确定是否适用我的项目。
多谢vagrantz的分析,我已经很清楚了。
某些“高手”当然可以站在一旁嘲笑,因为你们是“高手”。
果然是:林子大了,什么高手都有!

专家
2022-08-20 17:32:15     打赏
3楼

学习学习


共3条 1/1 1 跳转至

回复

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