共3条
1/1 1 跳转至页

问
今天第一次接触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的分析,我已经很清楚了。
某些“高手”当然可以站在一旁嘲笑,因为你们是“高手”。
果然是:林子大了,什么高手都有!
请高手指点。 答 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的分析,我已经很清楚了。
某些“高手”当然可以站在一旁嘲笑,因为你们是“高手”。
果然是:林子大了,什么高手都有!
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 |