共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |