搜索
bottom↓
回复: 207

从嵌入式硬件工程师角度去看MIPS

[复制链接]

出0入0汤圆

发表于 2009-12-12 14:32:17 | 显示全部楼层 |阅读模式
MIPS(Million Instructions Per Second)是CPU处理能力的一个指标,它的字面意思是每秒种执行指令的平均条数。

这个指标缺少了一个重要的评估标准,哪就是CPU的时钟是多少?同样的CPU,只要在允许的范围内,使用的系统时钟频率越高,当然MIPS也越高。

所以更能体现指标应该是MIPS/MKHz,也就是系统时钟(CPU的工作时钟)为1M时,平均能够执行的指令数。

国内2本中文介绍STM32的书中,一本是这样介绍的:“STM32的32位Cortex-M3内核,时钟频率可达72MHz,指令速度可接近80MIPS”。另外一本写到“32位Cortex-M3处理器所具备RISC结构、1.25DMIPS/MHz的处理性能......”。

那么作为嵌入式硬件工程师,如何理解和分析这个指标呢?

首先从最基本的硬件常识和基础分析。CPU的工作是按时钟节拍工作的,对于非并行处理RICS架构的CPU,一个CLK最多能执行一条实际的指令(不考虑指令的功能),这个是实在的,也是上限!也就是说:1MIPS/MHz到顶了(AVR给出的是接近1MIPS/MHz的指标)。

那么STM32的1.25DMIPS/MHz是什么含义?这里面的D是什么意思?

网上查了一下(http://www.longen.org/A-D/detaila-d/ComputerTestStandardIntro.htm),基本明白了D的含义。简单说吧:2个CPU,每个CLK都能执行一条指令,这个是相同的,都是“1MIPS/MHz”。但我们让它门做某个处理运算,一个需要执行10条指令完成,而另一个因为指令系统中具备专用的处理这个运算的指令,所以只需要5条指令就行了。故第2个CPU的性能为“2DMIPS/MHz”。

可见DMIPS/MHz是一个相对的、综合指标。Cortex-M3好象没有具体给出内核每个时钟周期具体能执行的平均指令数(应该每CLK不到一个指令),而是给出1.25DMIPS/MHz,有点不实在。

因为要达到这个1.25DMIPS/MHz指标,还要看程序员的水平。比如上面的例子,如果程序员水平低,用了20条指令才完成运算,那么CPU的性能就成为0.5DMIPS/MHz了。

所以,我个人认为,嵌入式硬件工程师应该注意和掌握的是CPU每个CLK具体能够执行指令的条数,最大就是一个CLK一条了。这样能清楚的进行系统的分析。

举例说明:如果用STM32产生1M的方波,采用定时器0.5us间隔中断,中断中将I/O取反的方法,其CPU的效率如何?

简单评估:假定STM32的时钟为72M,那么0.5us最多为36条指令执行的时间。扣除中断响应、现场保护、现场恢复、中断返回所必要的时间,中断中你还可以写几条指令?此时CPU的效率如何?还能做其他事情吗?

“32位的处理器也太笨了吧,产生一个1M的方波,就什么事情也做不了。”你会得到这样的结论吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-12-12 14:39:06 | 显示全部楼层
我以为是看mips内核呢。

出0入0汤圆

发表于 2009-12-12 14:41:53 | 显示全部楼层
不认同,

出0入0汤圆

发表于 2009-12-12 14:43:59 | 显示全部楼层
所以,我个人认为,嵌入式硬件工程师应该注意和掌握的是CPU每个CLK具体能够执行指令的条数,最大就是一个CLK一条了。这样能清楚的进行系统的分析
------------------------------------------------------------------------------------------
不同意。
CPU越高级,指令执行的时间越复杂。

出0入0汤圆

 楼主| 发表于 2009-12-12 14:49:06 | 显示全部楼层
为什么反对?我的分析有问题吗?如果有问题,是什么地方出了问题?

不认同可以,说明道理。

出0入22汤圆

发表于 2009-12-12 15:04:37 | 显示全部楼层
有点不解,曾经看见过machao教训过别人不要用avr定时器溢出中断的方式产生高频方波,怎么跑来在STM32里面讨论这个问题了?

出0入0汤圆

发表于 2009-12-12 15:06:02 | 显示全部楼层
举例说明:如果用STM32产生1M的方波,采用定时器0.5us间隔中断,中断中将I/O取反的方法,其CPU的效率如何?

简单评估:假定STM32的时钟为72M,那么0.5us最多为36条指令执行的时间。扣除中断响应、现场保护、现场恢复、中断返回所必要的时间,中断中你还可以写几条指令?此时CPU的效率如何?还能做其他事情吗?

“32位的处理器也太笨了吧,产生一个1M的方波,就什么事情也做不了。”你会得到这样的结论吗?
----------------------------------------------------------------------------------------

这么比较,不是比较性能。

而是在比较
1.时钟那个快
2.响应中断,进入中断,退出出中断哪个快(STM32进入中断自动压栈,在这里不仅没有用,反而严重拖慢了中断速度)
3.对IO取反,用的指令越少越好,用的寄存器越少越好。(最好一条指令,不使用寄存器)

出0入8汤圆

发表于 2009-12-12 16:07:50 | 显示全部楼层
【1楼】 wf361
积分:171
派别:
等级:------
来自:南京
        我以为是看mips内核呢。
-------------------------------------
我和你的想法一样

出0入0汤圆

 楼主| 发表于 2009-12-12 16:47:09 | 显示全部楼层
说32位处理器“太笨”这个结论当然是错误的。可是我的分析应该没错。

再好的处理器,进入中断都需要时间(只是多少的问题),保护和恢复现场肯定少不掉。对IO取反输出肯定需要对寄存器操作,至少需要一条指令。不对寄存器操作,对RAM操作可能需要的时间更多。一个CLK执行一条指令也是上限(STM32平均实际指令执行时间肯定是不到一条的)。这些都是在最宽余的条件下的评估。

“产生1M的方波,采用定时器0.5us间隔中断,中断中将I/O取反的方法”是所有学生给我的第一个回答。

做一个最“佳”评估:中断响应2个CLK(取中断入口地址和执行转移),不需要中断现场保护和恢复,I/O取反输出1条指令,1条中断返回指令,中断返回时间为2CLK(取返回地址,执行转移),总的需要6个CLK(够快吧)。系统时钟72M,0.5us为36个CLK,那么6/36,采用这个方法只是产生一个1M的方波,就占用了CPU的17%的时间!如果你系统时钟为8M,还做不了这个事情。

帖上此贴的目的是比较性能。但不是比较处理器的性能,是比较,以及如何简单评估某个实现某功能的方法或算法的性能,以及它的可行性。

不管是AVR,还是STM32,都不需要使用很高的系统时钟就能产生1M的方波,而且CPU的占用率基本就是0。“用定时器0.5us间隔中断,中断中将I/O取反”的方法是最笨和最傻的方法,被我“枪毙”的。但我需要说明否定的道理,这就是上面这个方法的性能分析。

它不是表示处理器“笨”,是说明......

“对牛弹琴”原本的意义是讽刺牛的,说它不懂音乐。但更实际的是讽刺弹琴者的,说明弹琴者笨,不懂牛,不知道牛不懂音乐,还对牛去弹琴。

出0入0汤圆

发表于 2009-12-12 17:50:22 | 显示全部楼层
嵌入式硬件工程师应该注意和掌握的是CPU每个CLK具体能够执行指令的条数,最大就是一个CLK一条了。
-------------------------------------------------------------------------------------------
这个CPU指的是没有流水线的吧

出0入0汤圆

发表于 2009-12-12 17:59:24 | 显示全部楼层
简单的控制操作看不出MIPS的意义,复杂的操作,如fft或数值运算型的程序才有价值。
还有外设速度和MIPS关系不大(IO也是设备)

出0入0汤圆

 楼主| 发表于 2009-12-12 18:21:22 | 显示全部楼层
这个是考虑最好的情况,肯定有流水线。

CPU要一个CLK执行一条指令,当然需要读指令系统的配合,如果取指系统不能及时提供指令,CPU的性能还要低。

所以现在的处理器都有流水线,如果没有流水线也就不要谈1MIPS/1MKz了。流水线只是起到提前把指令取出(在执行当前指令的同时取出下一条指令,或更多条放在流水线中)以便及时提供CPU操作。但执行指令还是CPU的事情,它需要一条一条的执行指令(指不具备并行处理能力的处理器)。

学习了解处理器架构非常重要,它能让你从根本上了解处理器本身,并且充分发挥它的性能,或知道它的限制。51内核采用CISC架构,系统时钟12M,但指令周期是系统时钟的1/12。也就是说它需要12个CLK才能执行一条指令,而且许多指令的执行需要2-3个指令周期。而AVR、ARM等都是RISC架构,一个系统周期相当于一个指令周期,大部分指令可以在一个指令周期中完成。

学习一下《计算机组成原理》,不过这样的基础课程好多学校都不开了,学生也不要学。好象会个C语言编程,能上个网就是IT工程师了。

出0入0汤圆

 楼主| 发表于 2009-12-12 18:27:02 | 显示全部楼层
10楼明显不是硬件出身的,根本不了解我讲的东西。我这里讲的I/O不是外部设备,是处理器的引脚。

出0入0汤圆

发表于 2009-12-12 18:31:00 | 显示全部楼层
对于标量流水线的处理器可以这么算
有超标量流水线就不能这么算了
超标量流水线的处理器一般具有多入多出的多级缓存
以及若干执行单元,允许多条指令并发执行、乱序执行
2MIPS/MHz是没问题的

出0入0汤圆

 楼主| 发表于 2009-12-12 20:20:15 | 显示全部楼层
楼上的,关键是“多条指令并发执行”,那么这是个具备并行处理的CPU,当然需要相应的流水线配合了,不过我已经排除掉了。所有的分析是针对不具备“多条指令并发执行”的处理器。

你能说出现在市场上哪一款8位或32位的微处理器内核具备“多条指令并发执行”的功能?我想学习了解一下。

出0入0汤圆

发表于 2009-12-12 20:47:55 | 显示全部楼层
现在市场上哪一款8位或32位的微处理器内核具备“多条指令并发执行”的功能?
------------------------

貌似TI的6X DSP有并行处理指令的能力。

出0入663汤圆

发表于 2009-12-12 20:50:44 | 显示全部楼层
DMIPS指Dhrystone MIPS吧,特指整数运算能力。
Dhrystone是一套综合测试系统,不是单单衡量某个指令的时钟周期,而是综合常见的高级语言用例和编译器转译模式,以较接近实际应用的测试用例去衡量CPU的综合整数运算能力。
Cortex-M3具有3级流水线(取指、解码、执行)和分支预测(解码阶段完成),虽然不具备指令并行处理能力,但是具备并行取指能力。如果分支预测正确,将减少一级取指周期,执行效率提高1/3,综合预测失败的情况,平均提高1/4,即实现1.25DMIPS。

出0入0汤圆

发表于 2009-12-12 20:59:50 | 显示全部楼层
有没有哪位大人来讲讲怎么(最好用AVR为例)测试Dhrystone MIPS??
同时可想知道下,AVR的DMIPS会是多少?

---------------------------------
IAR ARM自带STM32的Dhrystone例子,不知道怎么用?
IAR Systems\Embedded Workbench 5.4\arm\examples\ST\STM32F10x\IAR-STM32-SK\Dhrystone

出0入663汤圆

发表于 2009-12-12 21:20:36 | 显示全部楼层
看readme.txt就知道了。

出0入0汤圆

发表于 2009-12-13 16:58:05 | 显示全部楼层
to machao:
单片机的最基本的I/O设备就是端口(port),端口也有速度的,很多单片机是阻塞性端口访问的,虽然cortexM3的结构特别是数据流走向与一般的不同,不过这一点上没有区别。

端口速度不是内核速度,不能简单用io速度衡量内核。

控制系统很多东西不只用开关来解决的,这就是为什么stm32能做变频器,同频率的51就不一定了

出0入0汤圆

发表于 2009-12-13 18:28:03 | 显示全部楼层
即使72M时钟32位机MCU的IO口速度跟20M时钟8位机打个平手,但是在做算法时,特别是关于FFT,IFFT变换的算法,8位机只能望其项背。性能相差一个数量级以上。

假若改用8位机,此时就要把时钟频率调到720M以上才能和32位机打个平手。不知到要等到何年马月8位机才能提升到720M这个速度了?也就是讲现实中根本不可能发生,所以得必需转用32位机。

出0入0汤圆

发表于 2009-12-13 18:50:56 | 显示全部楼层
To 【17楼】 voidx void *
Drystone,标准测试那块不要动,好象是两个C文件,直接编译,即可。
取得结果的方法:1s内,看跑了多少个Drystone的主循环。

找一个现成的程序,把主程序改一下就好。

出0入0汤圆

 楼主| 发表于 2009-12-13 19:50:20 | 显示全部楼层
看来,学习STM32的大多数还是软件出身的人员,硬件上基本或者根本不懂。汗颜!

注意到LZ位帖子的标题吗?是“从嵌入式硬件工程师角度......”

里面的问题是:“如果用STM32产生1M的方波,采用定时器0.5us间隔中断,中断中将I/O取反的方法,其CPU的效率如何”

20楼:这需要FFT吗?

19楼:这个与端口速度有什么关系?端口输出1M方波,就“阻塞”了内核速度?

本贴的目的不是去比较什么32位与8位,或STM32与其他处理器的性能。其真正的目的是“作为嵌入式硬件工程师如何真正掌握STM32,在系统设计中,学会选择最佳的方法去充分发挥处理器的性能”

本人再举个例子:

如果系统需要读SD卡,如何设计才能实现可以最快的操作SD卡?

从软件上看,好的程序代码和结构,好的文件系统都可以提高SD卡的操作速度。但是别忘了还有个根本的东西:硬件!!!

目前网上大部分的SD卡操作例子是采用SPI接口实现的。知道SPI接口的低层规范吗?它是1个BIT,1个BIT传输数据的。知道SD卡的低层还可以用什么方式操作吗?知道SDIO吗?知道STM32具备SDIO口吗?知道SDIO口是采用4BIT位宽与SD卡交换数据吗?

因此简单的讲,在相同的时钟下,使用SDIO方式就比SPI方式操作SD卡快了4倍!!(这个与什么FFT根本无关吧)

如果在硬件上使用了SDIO方式的接口,软件又写的好,这样才能真正发挥出处理器真正的性能。

20楼的兄弟:如果你用STM32设计一个系统,这个系统需要做FFT的处理,并同时输出3个1M/1K/1Hz的方波,如果产生方波的方法就是使用“定时器0.5us间隔中断,中断中将I/O取反”的方法,你FFT软件写的再好,实际的FFT处理可能还不入一个8位的快,甚至根本就不能工作!知道是什么原因吗?

买块什么32位的板子,移植一个OS,会在OS上编程就算会用32位嵌入式系统了吗,就能设计出性能好的系统吗?

TIF彩色LCD屏的驱动器有的有串行的接口,如果STM32使用这个串行方式与LCD屏连接通信的话,你软件写的再好,也做不到图片的快速翻屏功能。

各位看官,能明白理解本贴的意思吗?看来我真的就是“对牛弹琴”中所讽刺的弹琴者了。

出0入663汤圆

发表于 2009-12-13 20:38:42 | 显示全部楼层
马老师说得没错,的确是这样的,DMIPS是一套模拟实际应用的测试代码,算出来的不是每秒执行多少条指令,而是以1MIPS的VAX 11/780机器为基准计算出的相对速度,其中牵涉到指令集和架构效率、编译器优化等因素,甚至可以专门针对Dhrystone测试代码做一个优化的编译器,获得>30%的性能提升,所以DMIPS并不是衡量CPU性能的绝对指标,只是相对参考而已。实际的代码运行效率,和程序员的代码质量、代码和硬件架构的配合、编译器的优化能力息息相关。所以并不能单纯地认为,1.25DMIPS/72MHz的STM32就是能够每秒执行90M条指令,实际上1.25DMIPS只是意味着72MHz的STM32跑Dhrystone测试的成绩和90MHz的VAX 11/780一样而已。

出0入0汤圆

发表于 2009-12-13 20:42:00 | 显示全部楼层
不管是AVR,还是STM32,都不需要使用很高的系统时钟就能产生1M的方波,而且CPU的占用率基本就是0。“用定时器0.5us间隔中断,中断中将I/O取反”的方法是最笨和最傻的方法

小弟初学,请教楼主以及楼上各位高手:
要实现楼主说的“不需要使用很高的系统时钟就能产生1M的方波,而且CPU的占用率基本就是0。”
当如何处理??

出0入0汤圆

发表于 2009-12-13 20:46:45 | 显示全部楼层
对不起各位,刚看到楼主的另一帖:
如何正确产生精确、同步的1M、1K、1Hz方波(STM32通用定时器应用笔记)
正在拜读,以上问题取消,

出0入0汤圆

发表于 2009-12-13 22:52:22 | 显示全部楼层
to machao:
首先,你的文字很容易让人气血上头的,不过好在我不在意,当然在这里我没有必要也上火来个争论什么,非要“技人相轻”。做人的态度不能这样。

其次,只是随便看看帖子,随便扯扯,是对是错探讨一下即可。当然,我个人觉得你的一些看法还是有很多问题:

1嵌入式硬件工程师要考虑的恐怕就不只是纯硬件的问题了,有时候也要考虑选型的问题,如果不明白软件的需求,选型不会最好。而且工作中没有纯软件工程师或纯硬件工程师,给了原理图画板子也不能只会硬件软件一无所知。在需求分析时,MIPS主要还是软件工程师要考虑的。处理器内核结构的研究算硬件还是软件研究?这个恐怕就不能简单回答了

2CortexM3的结构还是比较先进的,有并行机制,所以1.25这个值还是有看点的。
楼主说“所以,我个人认为,嵌入式硬件工程师应该注意和掌握的是CPU每个CLK具体能够执行指令的条数,最大就是一个CLK一条了。这样能清楚的进行系统的分析。”
“最大就是一个CLK一条了”这话是有问题的。

3楼主用简单操作IO的方式来评估MIPS是错误的,一般1.25DMIPS/MHz是指内核指标,实际可能低得多。比如取指令时间,在有外部程序存储器的系统就不会高,片内存储器的访问要快的多,这时候怎么算"CLK条”指令?对于简单的系统,没有这些问题,如果是复杂的呢?虽说国内我们大多数干的都是些不需要什么考虑算法,任务时限的活。

4楼主的标题就是:《从嵌入式硬件工程师角度去看MIPS》所以,也就只是就题论题,随便说说这个,至于sd卡,我们实际使用也没有用spi方式。还有坛里很多人都不至于只会用中断来产生方波,不是所有的人都是初学者,虽说现在很多研究生水平不怎么样,不过我准备辞职考研。

5楼主说“这个与端口速度有什么关系?端口输出1M方波,就“阻塞”了内核速度?”这个我不想多解释了,建议各位不详细了解单片机端口可以查查IO端口的实际结构,当然这里就不仅限于stm32了。

最后,再次声明,只是随便聊聊,楼主不用太过较真。如果有言辞不周,请多包涵。

出0入0汤圆

发表于 2009-12-13 23:02:12 | 显示全部楼层
应该是配置IO吧,虽然买了VET6,对ARM,FPGA也感兴趣,不过毕业工作后就一直和51打交道,提不起精神。

如果对硬件有个好的了解,再去开发软件会事半功倍的

出0入0汤圆

发表于 2009-12-14 00:06:52 | 显示全部楼层
【12楼】 machao
积分:5201
派别:
等级:------
来自:
10楼明显不是硬件出身的,根本不了解我讲的东西。我这里讲的I/O不是外部设备,是处理器的引脚。  
-----------------------------------------------------------------------------------------------
O,my god!
IO可是标准的外设,而且还是挂在APB总线上的慢速外设!

(原文件名:aaa.JPG)


我试过用三星的44b0和2500发IO脉冲,最快只能发到4,5mhz的样子,就是一条指令置1一条置0,就是卡在APB速度上。nxp的214x有fast io功能,它的io是挂在local bus上的,可以达到15mhz。可以参见214x的手册。

楼主的基本意思还是对的,只不过这个例子举的不太好。DMIPS本来是一个纯软件的概念,就是尽量抛开一切外部因素来考察一个cpu内核的性能。也就是learner123 说得算fft时,DMIPS才有意义。

顺便问下楼主,产生1mhz或以上的脉冲,除了用中断还有什么好的方法?我试过在44b0上用for循环的方式仿真串口,但发现第一个bit比后面的长好多,后来发现是cache在作怪,刚跑这段程序时要加载cache,而后面的bit再跑时是在cache里跑,所以快的多。

出0入0汤圆

 楼主| 发表于 2009-12-14 11:55:11 | 显示全部楼层
回29楼 3dg12:

请上帝也没用,上个图也并不说明你真正理解了和会使用STM32。

1。我知道,从STM32内部看,I/O属于“外部”的挂的设备,没有内核工作速度快,但STM32的I/O工作的频率可以为50M、10M和2M!在中断中用一条指令将I/O取反,输出1M方波,I/O工作频率也就2M,因此配置I/O工作在10M或50M就可以了。不会“阻塞”影响内核速度的。我同意你们的看法,把I/O归属于外部设备,会阻塞内核速度,那么更说明了从硬件角度,证明这个时候DMIPS的参考作用不大。

2。我的帖子明确说明是“从嵌入式硬件工程师角度去看”问题的,也就不是讨论做什么FFT(做FFT更好的是采用DSP,它可以用硬件完成,那比用软件实现快多了),我举的例子就实际上就是纯硬件功能的应用,因此在这个例子分析中DMIPS的参考意义不大,需要考虑的就是CPU每秒能执行的指令数。

3。STM32产生1M方波的方法在我另一个帖子中“如何正确产生精确、同步的1M、1K、1Hz方波(STM32通用定时器应用笔记)”http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3762261&bbs_page_no=1&bbs_id=3020。根本不使用中断,CPU占用率基本为0,也就是除了初始化代码外,程序根本不需要再做与1M方波相关的事情。下面我的例子中,在PA3上输出18M的脉冲(我手上头示波器为20M,看上去波形已经成为三角波了),这里使用的只是通用定时器(36M的APB1)。按STM32手册,如果使用TIME1,工作在72M,应该可以产生最高为36M的脉冲波,而且CPU的占用率也是另!点击此处下载 ourdev_514299.rar(文件大小:303K) (原文件名:stm32_demo_4_18.rar)

4。ST公司把STM32定义成32位的“微控制器”,而不是“微处理器”,要理解这2个字的差别和意义。


    好的硬件工程师实际上比软件工程师要更深入,知道除了软件之外,更重要的是如何充分和全部发挥硬件的能力。我说的用STM32,工作在72M,在I/O上产生36M的方波,就是发挥STM32纯硬件的能力,如果不行,就是STM32根本达不到手册上的功能指标。

    而你用中断,然后在中断中“就是一条指令置1一条置0”,要了你的命也产生不了36M方波的。这不是I/O“阻塞”了CPU的速度,是你的“软件方法”阻塞了!
    你还是不理解我说的东西。产生36M方波,软件就要以72M的速度去置1/置0,置1或置0都是一条指令,需要一个CLK时间!还要进中断,出中断,现场保护和恢复!

    此时应该 O,my god!了,原来不是硬件I/O的无能,是使用者无能。就知道什么:“溢出中断,中断中就是一条指令置1一条置0”。可是知道什么时候可以用,什么时候不应该用这样的方式吗?

出0入0汤圆

发表于 2009-12-14 13:07:49 | 显示全部楼层
to machao :
我没有和你比用stm32产生1mhz方波的技巧,用TC确实是一个很巧妙的方法。我只是说用这个例子来衡量DMIPS实在有些不妥。DMIPS是个纯软件的概念,硬要它去操作硬件,然后说它不行。就好比让一个学通信的人去设计一个机械装置,然后再说他笨一样。

出0入0汤圆

发表于 2009-12-14 13:25:46 | 显示全部楼层
举例说明:如果用STM32产生1M的方波,采用定时器0.5us间隔中断,中断中将I/O取反的方法,其CPU的效率如何?

这样的例子等于是让华罗庚用手写算1+1+1+1+1+ .....中间省略了N 个 .... +1+1,这样的话,你说华罗庚还能做什么?

出0入0汤圆

 楼主| 发表于 2009-12-14 13:58:36 | 显示全部楼层
回【27楼】 learner123:

1嵌入式硬件工程师要考虑的恐怕就不只是纯硬件的问题了,有时候也要考虑选型的问题,如果不明白软件的需求,选型不会最好。而且工作中没有纯软件工程师或纯硬件工程师,给了原理图画板子也不能只会硬件软件一无所知。在需求分析时,MIPS主要还是软件工程师要考虑的。处理器内核结构的研究算硬件还是软件研究?这个恐怕就不能简单回答了
==================================
我的问题没有这么复杂,不涉及什么“选型”,就是指使用STM32,产生1M的方波。我不知道软件工程师会采用什么方法,以及如何分析这个方法的效率,用DMIPS来评估?
  

2CortexM3的结构还是比较先进的,有并行机制,所以1.25这个值还是有看点的。
楼主说“所以,我个人认为,嵌入式硬件工程师应该注意和掌握的是CPU每个CLK具体能够执行指令的条数,最大就是一个CLK一条了。这样能清楚的进行系统的分析。”
“最大就是一个CLK一条了”这话是有问题的。
===================================
我没有说M3不好,我的问题是,0.5us中断时间是36个CLK(72M时钟),在36个CLK中,能执行你几条指令,用1.25来评估就不适合此时的情况。

你说“最大就是一个CLK一条了”这话是有问题的,那么就STM32讲,一个CLK具体能执行几条STM32的指令?或许你理解STM32的一条指令的功能是别的处理器一条指令功能的1.25倍,但控制一个I/O取反,都是并且就是一条指令,这个没有差别。



3楼主用简单操作IO的方式来评估MIPS是错误的,一般1.25DMIPS/MHz是指内核指标,实际可能低得多。比如取指令时间,在有外部程序存储器的系统就不会高,片内存储器的访问要快的多,这时候怎么算"CLK条”指令?对于简单的系统,没有这些问题,如果是复杂的呢?虽说国内我们大多数干的都是些不需要什么考虑算法,任务时限的活。
=============================
    用STM32来产生一个1M的方波算“复杂”的系统?这个说不过去吧。但这个简单的要求,就必须考虑方法问题(这个不是软件的算法)以及中断时限的问题。我不是“用简单操作IO的方式来评估MIPS”,而是说明在这样的情况下采用DMIPS来评估这个方法的效率是不合适的,此时考虑的应该是一个CLK具体能执行的本处理器的指令数。
    你实际已经在支持我的观点了,明白“一般1.25DMIPS/MHz是指内核指标,实际可能低得多。比如取指令时间,在有外部程序存储器的系统就不会高,片内存储器的访问要快的多”。所以STM32一个CLK可能还不能执行一条指令。我采用1MIPS/1MHz已经把其他的不利因素取掉了,已经放宽了。所以使用1.25DMIPS更不合适用于此情况下的评估。




4楼主的标题就是:《从嵌入式硬件工程师角度去看MIPS》所以,也就只是就题论题,随便说说这个,至于sd卡,我们实际使用也没有用spi方式。还有坛里很多人都不至于只会用中断来产生方波,不是所有的人都是初学者,虽说现在很多研究生水平不怎么样,不过我准备辞职考研。
============================================
29楼的帖子看到吗?你说他是“初学者”? 三星的44b0和2500以及nxp的214x我没玩过,29楼的这位兄弟比我都“老道”。可他只能做到15M,并且此时可能其它的事情都不能做了,更不要说再同时做什么FFT了吧?



5楼主说“这个与端口速度有什么关系?端口输出1M方波,就“阻塞”了内核速度?”这个我不想多解释了,建议各位不详细了解单片机端口可以查查IO端口的实际结构,当然这里就不仅限于stm32了。
============================================
恐怕你越解释越不明白。我在30楼有解释。
STM32的I/O最高可以工作在50M,现在只是1M的输出,就“阻塞”了内核速度?
实际外设“阻塞”内核的速度不是这样理解的。实际内核总是全速运行的,并不会由于外设慢而自动减速。由于外设速度不高,所以程序员使用延时等待,或中断方式,让内核去配合外设工作。这种让内核放“慢”工作,是人为的。其实内核本身速度并没有放慢,只是在做延时等待这样无用浪费的事情,当然使用中断就可以去处理另外一个外设的工作,这个也是一种并行处理的概念(但这个不是说内核可以同时执行2条或多条指令的并行处理)。

出0入0汤圆

发表于 2009-12-14 14:11:53 | 显示全部楼层
楼主牛气冲天,像是捍卫真理,不像是心平气和要跟大家讨论问题。
我等菜鸟敬而远之……

出0入0汤圆

发表于 2009-12-14 14:18:18 | 显示全部楼层
对于这句我不赞成 : STM32的I/O最高可以工作在50M,现在只是1M的输出,就“阻塞”了内核速度?
STM32的I/0最高可以工作在50M,但这是有条件的,就算只要输出1M,但算法很落后的话,的确是可以"阻塞"内核的.
比如说,你用软件的方法翻转I/O口的话,最高只能输出18M,而且这时内核100%被占用了,但你却不能说STM32的I/O
最高只能输出18M.

出0入0汤圆

发表于 2009-12-14 14:18:55 | 显示全部楼层
ARM核的缺点就是IO口的取反是一件非常烦人的事情,不象8位机那样只要一条异或指令就摆平,但幸运的是它的高时钟补救了这一缺点。

ARM 核的结构和指令本身就包含有DSP与OS的理念在里面,使用ARM MCU的性能因人而异,一些人喜欢把其当成高速单片机用,一些人喜欢把其当成准DSP处理器用,一些人喜欢用其作OS用,各采所需。

使用一种MCU,充分挖掘出其硬件的极限能力,知道此种MCU的极限应用能力,对于项目中MCU的正确选型与成本估算是非常的关键的一环。

出0入0汤圆

发表于 2009-12-14 14:22:00 | 显示全部楼层
我也不认同这种观点,或者说我认为这样的观点说法毫无意义。当然是我个人的看法,请轻点拍转。

出0入0汤圆

 楼主| 发表于 2009-12-14 15:19:50 | 显示全部楼层
懂行的人看门道,不懂的人只是看热闹。武功高手哪怕是在表演,外行的人也认为是真斗。

1。我没有说STM32不好,承认1.25DMIPS的性能。换句话说,没说东西不好,是说使用东西的人如何更聪明些,把东西用好。

2。1.25DMIPS作为评价整体性能没有错,可是在我举的例子应用中,用它来评估这个方法就脱离实际太多,不合适。

3。从最低层硬件出发,我认为一个CLK能执行具体指令的个数,能更好的评估一个方法时间问题,尤其是对于实时性,时序上要求严格的系统。

4。嵌入式工程师不是只局限在软件上的。学习掌握STM32,真正发挥出其硬件本身的功能和应用方法技巧,在许多情况下是非常重要和关键的,甚至是唯一的。

出0入0汤圆

发表于 2009-12-14 15:27:37 | 显示全部楼层
“如何正确产生精确、同步的1M、1K、1Hz方波"  
从这个命题出发,我赞同马老师的意见.

即使STM32跑72MHZ速度,用软件方法或者定时器中断来产生这个频率是很不明智的.

用PWM模式,不用它的中断,可以产生芯片手册允许的最高频率且不占用CPU带宽,相当于与CPU并行工作.
当然这要看这个芯片是否有这个功能.

出0入0汤圆

发表于 2009-12-14 16:12:05 | 显示全部楼层
马老是要说 MIPS比DMISP更能体现 CPU整体的性能??

CPU厂商都是按自己有利的一面写。
如果是AVR,算DMIPS,肯定是惨不忍睹。

AVR宣传1MIPS/1M也不厚道,实际根本达不到1MIPS/1M。


还有,CM3核一条指令到底多少周期,好像并没有明确的答案。

出0入0汤圆

发表于 2009-12-14 16:25:07 | 显示全部楼层
to machao:
恐怕你越解释越不明白。我在30楼有解释。
STM32的I/O最高可以工作在50M,现在只是1M的输出,就“阻塞”了内核速度?
实际外设“阻塞”内核的速度不是这样理解的。实际内核总是全速运行的,并不会由于外设慢而自动减速。由于外设速度不高,所以程序员使用延时等待,或中断方式,让内核去配合外设工作。这种让内核放“慢”工作,是人为的。其实内核本身速度并没有放慢,只是在做延时等待这样无用浪费的事情,当然使用中断就可以去处理另外一个外设的工作,这个也是一种并行处理的概念(但这个不是说内核可以同时执行2条或多条指令的并行处理)。

----------------------------------------------------------------------------------

外设会不会阻塞内核速度一试便知,用下面的示意程序试下就知道了:

start:
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  置1
  置0
  b   start

用示波器看下IO的频率,肯定比想象的慢的多。这就是我在44b0上的测试程序,66mhz的arm7只能发4,5mhz,算下来6个clk才一条指令。

出0入0汤圆

发表于 2009-12-14 16:48:50 | 显示全部楼层
CM3核一条指令到底多少周期,好像并没有明确的答案。

----------------------------

象arm这种cpu已经和51,avr有很多不同了,单纯考虑一条指令多少周期没什么实际意义。影响这个参数的因素太多,例如指令的执行位置,是在ram里还是在flash里(有flash加速的例外,可以做到0等待),还有操作对象的位置,例如楼上那段代码不是操作io,而是ram里的某bit,速度就会快很多,因为操作ram不用通过ahb总线到慢速的apb总线。如果再加上cache是否命中,那将更加复杂。
cortex-m3的trm第18章列出了每个指令的clk,大家可以去参考。

出0入0汤圆

发表于 2009-12-14 16:51:36 | 显示全部楼层
仅仅是看个热闹……

出0入0汤圆

 楼主| 发表于 2009-12-14 17:09:16 | 显示全部楼层
to 【32楼】 huatong:

41楼出现了“让华罗庚用手写算1+1+1+1+1+ .....中间省略了N 个 .... +1+1”的方法。

用STM32产生1M的方波,采用定时器0.5us间隔中断,中断中将I/O取反的方法,已经比这个方法进步了。

to 【41楼】 3dg12:

    你的这个程序能证明CPU也只是工作在4,5M吗?其实CPU还是按66M的速度在正常执行指令,只是I/O跟不上了。你试在每个置0置1之间增加一个NOP指令,你用示波器看IO的频率,会减少一半吗?
  
    通俗的举个例子:你每秒最多跑10步,可我喊口令每秒喊了100次的一、二、一,你只能在我10次口令的基础上踏齐一个步点。

    在32位系统中,内核时钟与I/O时钟不同,I/O的时钟慢,I/O口是按I/O时钟触发同步工作的,假如I/O的时钟工作频率为1M,它是每隔1us输出一次的,可是CPU在这1us中已经设置了好几次了,I/O只不过是在1us时输出最后的一次设置值。

    CPU以1秒的间隔控制I/O口输出0/1,控制一个LED,其效果是LED闪烁,如果以1us的间隔控制I/O口输出0/1控制LED,其效果LED是一直亮,你能说CPU没有工作吗?被LED“阻塞”了?

    塌实仔细学点真正的东西吧,再多解释就更体现硬件基础差的实质了。

出0入0汤圆

发表于 2009-12-14 17:24:24 | 显示全部楼层
//---用STM32产生1M的方波,采用定时器0.5us间隔中断。。。

其实用中断来做也没有什么不好,最令人担心的是否能做出完全对称稳定的方波?

假设把定时器中断级设定到最高级,是否还会受到分支指令的影响而产生了延迟。使输出的方波在执行某段程序时出现随机瞬的不对称?这才是最大的问题。

出0入0汤圆

发表于 2009-12-14 17:39:10 | 显示全部楼层
看来3dg12水平确实挺高,有些道理讲得的确比我清晰很多。看来玩了不少东西。

不过说实在的“嵌入式硬件工程师”称呼有时候并没有严格定义,这年头小公司只有技术人员的说法,有时候软件,硬件,甚至机械,采购,产品生产,送货,外带扫地拖地,送外卖都是“嵌入式硬件工程师”。所以我其实不太赞同区分什么软件工程师,硬件工程师,只有残酷的社会和现实。老板要求低价格,给你个at89C51让你单芯片完成USB设备,可能?

对外设的了解越深,对系统设计和电路设计确实越好。才来论坛,看到machao确实做了很多不流行的经典应用。可以肯定,他是国内较早玩单片机的。捕获计数器的使用和一般计数器是不同的,但不能就此而说这是处理器不行。不过没有捕获计数器的单片机,小技巧也没什么价值了。这类应用实际是数字电路的应用,的确和处理器没什么关系。没有捕获功能,或路数多的应用,恐怕就要专门的电路了,比如专用芯片和cpld或fpga。当然在我看来用标准74搭一个和用cpld没什么大的区别。

但这些和处理器内核的性能恐怕没关系,所以楼主的举例子不好。3dg12在41楼很明确的展示了。

其实这个话题当然更多展示的是嵌入式开发中软硬结合的问题:在有速度要求的地方,如何优化软硬资源了。前面说了,很多时候没有“纯”的软件工程师,也没有“纯”的硬件工程师,所以这个话题本来就有点不太对,应该为嵌入式工程师如何看待MIPS。软件,硬件不分家的。

另:个人,纯属个人,我认为“春哥”是“纯爷们"。开个玩笑。

出0入0汤圆

发表于 2009-12-14 17:41:04 | 显示全部楼层
但你前边也说了:简单评估:假定STM32的时钟为72M,那么0.5us最多为36条指令执行的时间。扣除中断响应、现场保护、现场恢复、中断返回所必要的时间,中断中你还可以写几条指令?此时CPU的效率如何?还能做其他事情吗?

但你也说了:STM32的I/O最高可以工作在50M,现在只是1M的输出,就“阻塞”了内核速度?

这样的话,还不算是“阻塞”?

所以我举的例子只是一个极端的方法说明就算出输出1M,在错误的方法下也是会“阻塞”内核的。

而且作为一个工程师,如果是使用这种不入流的处理方法,不如回炉算了。


下面是楼主在1楼说的:
可见DMIPS/MHz是一个相对的、综合指标。Cortex-M3好象没有具体给出内核每个时钟周期具体能执行的平均指令数(应该每CLK不到一个指令),而是给出1.25DMIPS/MHz,有点不实在。

而ST说:32位Cortex-M3处理器所具备RISC结构、1.25DMIPS/MHz的处理性能,
应该是在一定条件上得出的最高性能,作为一件商品,这是一种销售手段,楼主不能断章取义就说ST错误。

出0入0汤圆

发表于 2009-12-14 17:48:01 | 显示全部楼层
【44楼】 machao
在32位系统中,内核时钟与I/O时钟不同,I/O的时钟慢,I/O口是按I/O时钟触发同步工作的,假如I/O的时钟工作频率为1M,它是每隔1us输出一次的,可是CPU在这1us中已经设置了好几次了,I/O只不过是在1us时输出最后的一次设置值。

----------------------------------------------------------------------------------------------

我举的例子是个极限情况,是apb总线把内核托到最慢的情况,在中间加nop当然不会使频率降到一半,因为:1,nop执行的很快,它不用等待硬件ready    2,内核执行完对apb的操作会不管apb是否已经完成而继续执行下一条指令,但内核下次再操作apb时会查询上次操作的完成,如果未完成则等待。而不是象你所说的只输出最后一次设置值。这个可以验证,如果只输出最后值,那么我的那个例子某些置0或置1指令会“丢失”,示波器上看就不是50%的很标准的方波。

出0入0汤圆

发表于 2009-12-14 18:04:40 | 显示全部楼层
to machao:
聊天就是聊天,没必要带有其他感情_色彩,“塌实仔细学点真正的东西吧,再多解释就更体现硬件基础差的实质了。”这话就很过分了,
中学生嘲笑小学生的考题简单,你觉得好么?
术业有专攻,闻道有先后,似乎你是华东的老师,这个道理您更清楚吧。

当然,我的学历很低,只是个小玩家,很多东西可能只是自己的臆测,不是高手,没有什么可以“牛”的资本。还有很多要向您学习的东西。

您自己也说明了
“  CPU以1秒的间隔控制I/O口输出0/1,控制一个LED,其效果是LED闪烁,如果以1us的间隔控制I/O口输出0/1控制LED,其效果LED是一直亮,你能说CPU没有工作吗?被LED“阻塞”了? ”这个现象比较有价值哦。但同样也说明不能简单用I/O操作来衡量MIPS

系统速度和MIPS有关系,但MIPS一项参数并不能绝对决定系统速度。

其实这个话题本身没多少意思,不过在讨论中倒是知道了不少东西

出0入0汤圆

发表于 2009-12-14 18:06:20 | 显示全部楼层
to  learner123:
水平高不敢当,玩arm也有6,7年了,而且开发的就是arm仿真器,也算做过具体东西的了。那个例子就是用44b0模仿jtag时序时的测试代码,发现比想象的慢的多,才发现是apb总线在作鬼。最后改用FPGA才把速度搞上去。

出0入0汤圆

 楼主| 发表于 2009-12-14 18:22:35 | 显示全部楼层
【42楼】 3dg12
CM3核一条指令到底多少周期,好像并没有明确的答案。
----------------------------
象arm这种cpu已经和51,avr有很多不同了,单纯考虑一条指令多少周期没什么实际意义。影响这个参数的因素太多,例如指令的执行位置,是在ram里还是在flash里(有flash加速的例外,可以做到0等待),还有操作对象的位置,例如楼上那段代码不是操作io,而是ram里的某bit,速度就会快很多,因为操作ram不用通过ahb总线到慢速的apb总线。如果再加上cache是否命中,那将更加复杂。
cortex-m3的trm第18章列出了每个指令的clk,大家可以去参考。  
==========================================================================

简单点吧:STM32的I/O可以配置工作在50M,10M和2M,操作I/O口的指令是一样的。那么当系统工作在72M时,I/O为2M,与系统工作在72M时,I/O为50M,执行指令有什么变化?

   同样的指令,同样的时钟速度,在I/O工作在2M时,需要多几个clk,还是把系统时钟自动降下来了? 

出0入0汤圆

发表于 2009-12-14 18:25:49 | 显示全部楼层
3dg12果然高手,不会是做仿真器吧?有空常联系,我的邮箱fuchouzhe_1234@163.com

出0入0汤圆

发表于 2009-12-14 19:19:40 | 显示全部楼层
to 51楼,我个人的理解是系统不会将时钟自动降下来,在I/O工作在2M的时候,如果I/O口输出太快的时候,不保证I/O口的输出的正确性.
我只是一个电子爱好者,以上是我的个人理解,请轻拍砖.

出0入0汤圆

发表于 2009-12-14 19:31:05 | 显示全部楼层
to machao:
现代处理器内核结构中对高速总线,特别是片上总线加入了等待状态,这个其实在x86时代和6800时代就有了。

出0入0汤圆

发表于 2009-12-14 19:42:36 | 显示全部楼层
从嵌入式微控制器的角度, 确实要算算单条指令执行的准确时间, 可是现在的内核已经很难算准确了——不论它有多快。
这时可能就要用用软件方法, 只能让它不超过某个时空复杂性的函数了。
很怀念经典51单片机, 是慢——但都是可以完全控制的, 现在这种芯片是越来越少了。。。

出0入0汤圆

发表于 2009-12-14 20:27:32 | 显示全部楼层
搞笑,一群人都没读懂楼主的意思,就。。。。

出0入0汤圆

发表于 2009-12-14 20:46:37 | 显示全部楼层
产生方波本来就不是MCU的主要用途,要产生波形用CPLD啊

出0入0汤圆

发表于 2009-12-14 20:51:52 | 显示全部楼层
看完该帖学到不少东西。马老师的分析很有道理,后续的精彩讨论,可能是互相之间理解上有些误会。“对于非并行处理RICS架构的CPU,一个CLK最多能执行一条实际的指令”意思是“对于非并行处理RICS架构的CPU,一个CLK最多一个动作”,而这个“动作”能完成些什么功能,则各有不同。

出0入0汤圆

发表于 2009-12-14 20:55:35 | 显示全部楼层
继续学习!

出0入0汤圆

发表于 2009-12-14 21:00:42 | 显示全部楼层
马老师在顶楼说的肯定是对的。

但这个话题意义不大。

这年头搞个单片机,就美其名曰嵌入式,越来越没劲。

出0入0汤圆

发表于 2009-12-14 21:19:07 | 显示全部楼层
马老师对STM32 I/O端口速度的设置理解有误。

STM32每个I/O端口的输出端都有三个输出驱动电路,按照输出带宽区分,分别为2MHz、10MHz和50MHz,应用程序可以根据不同的需要选择不同带宽的输出驱动电路。配置I/O端口时速度的选择,正是选择上述三种输出电路之一。

这个速度与I/O端口的驱动时钟的速度无关。因为所有I/O端口都是挂在了APB2总线上,所以I/O端口的驱动时钟应该是APB2的时钟。

我有一篇博客,讨论了这个问题,大家可以去看看:STM32 GPIO端口的输出速度设置

出0入0汤圆

发表于 2009-12-14 22:25:21 | 显示全部楼层
马老师,你别对牛弹琴了

是他们在死钻牛角尖。。。。

不过这个也看平台

我之前经常接手这样的板子:

   明明硬件上能产生的东西,硬体工程师随便接个IO就投版了,还跟我说你可以用软件模拟的。。。最后每次都要看完他们的原理图,才肯投板,一群人还觉得我多管闲事哈。。
哭死。。。

出0入0汤圆

 楼主| 发表于 2009-12-14 23:28:48 | 显示全部楼层
回61楼:

   我对STM32 I/O端口速度的设置理解应该没有错误。非常明白3个时钟的选择的目的是“达到最佳的噪声控制和降低功耗的目的”。

    你在上面讲的“所有I/O端口都是挂在了APB2总线上,所以I/O端口的驱动时钟应该是APB2的时钟”,APB2最高是72M,与内核相同。因此直接操作I/O是不会“阻塞”内核速度的,只是应了你博客帖子中的“输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号”的说法。

    这也就是我举的比喻:内核在1秒内喊了100次的的一、二、一,而I/O在1秒内勉强走10步,因为输出驱动就只有这个10步的能力。这个不能说内核被I/O“阻塞”,在1秒内喊了10次口令。内核还是1秒100次,是I/O跟不上了,使输出“失真”的。

    其实,我LZ位的帖子根本不涉及I/O的速度,也不是说STM32性能不好,1.25DMIP是假的。我要想说明是学习使用STM32,更要注意学习和掌握新的硬件功能,采用正确的方法充分发挥硬件的特点去实现某个功能。

    产生1M方波是一个简单的检验测试(STM32的I/O设置成10M就可以保证输出不成问题),我有意的给出了一个“32位的处理器也太笨了吧,产生一个1M的方波,就什么事情也做不了”的错误结论。其结果与我想象的一样,没有几个人明白此时采用“中断+控制I/O取反”的方法是错误的方法。可笑的是,还说是I/O“阻塞”了内核的速度。甚至还有更可笑的帖子“产生方波本来就不是MCU的主要用途,要产生波形用CPLD啊 ”

看看另一个发表了很多看法的朋友怎么说的:“捕获计数器的使用和一般计数器是不同的,但不能就此而说这是处理器不行。不过没有捕获计数器的单片机,小技巧也没什么价值了。这类应用实际是数字电路的应用,的确和处理器没什么关系。没有捕获功能,或路数多的应用,恐怕就要专门的电路了,比如专用芯片和cpld或fpga。当然在我看来用标准74搭一个和用cpld没什么大的区别。”

(不知道这位朋友会不会这样认为:没有C也没什么,与处理器没有什么关系,用汇编就行了,用C和用汇编没有大的区别。)

带捕捉功能和比较匹配功能的计数器早就不是什么新东西了,只有早期的控制器没有(当然标准51是没有的),10几年前推出的AVR就有,现在新的控制器哪个没有?stm32一个普通的TIME就配备了4个通道的捕捉功能/比较匹配。就是STC的改良51,也配备了CCP。为什么?就是为了精确产生波形,产生PWM,以及用于精确的频率和周期测量,而且占用CPU资源最少。所以早就是一个重要的硬件功能集成到各种控制器中了。

兄弟,看明白了吗,我根本的本意不是说STM32控制器不行(STM32非常强大,它的许多硬件功能我到现在还不了解),是讲提出定时中断这个方法产生1M的人不行,不知道使用TIME的比较匹配,这个最简单的,基本是纯硬件的方法来产生1M方波。

我同样不理解另外一个玩arm也有6,7年了,而且开发的就是arm仿真器高手所说的情况(因为自己没玩过),“66mhz的arm7只能发4,5mhz”?

内核66M,I/O只能工作在10M?(请哪位熟悉的朋友能提供一个手册值吧:I/O最高工作频率为多少)。我想I/O应该不会低于20M,这个ARM7不会这么“笨”吧。

到是要问,测试代码中的那些N个“置0 置1”的指令是直接对寄存器操作吗?是用汇编写的吗?需要几条汇编指令清另?如果是C,那么一条置0的C语句相当几条汇编的指令?这些指令需要几个CLK执行时间?这些你都清楚吗?如果不清楚怎么证明是I/O“阻塞”了内核速度?

出0入0汤圆

发表于 2009-12-15 00:00:36 | 显示全部楼层
MCU硬件技术不断推陈出新,换代越来越快,个人感觉ARM系列的MCU外围寄存器的功能定义含接还是比较好的,特别是UART0的功能,不论片子外围增加多少,其定义还是不变,使软件的积累成为可能。

8位机的‘AVR’的寄存器与‘ARM’相比就显得很混乱,上到M64时就惨不忍睹的乱,前期的软件投入几乎被打回原形。要用UART0调试,还得重新查核一翻数据手册与C头文件H的定义再做修改。令人非常的脑火!

出0入0汤圆

发表于 2009-12-15 00:19:11 | 显示全部楼层
马老师还是先用STM32试试用汇编直接写IO寄存器看看最高IO速度能达到多少吧。

你看看41楼代码最后一句就知道人家用的是汇编还是C了

出0入0汤圆

发表于 2009-12-15 00:21:05 | 显示全部楼层
1.25DMIPS/MHz这个指标本来就是个扯眼球的虚参数,想不到上面竟然还有搞技术的人为它辩护、甚至质疑马老师。我就不明白了,
你们真的懂硬件吗?


以下均不考虑IO的速度、不考虑超标量、以72MHz时钟为前提讨论(即单周期指令的执行时间为1/72 μs):

首先从马老师提出的硬件方面来讲,不说IO输出方波的问题了,考虑两个简单的情况——控制DA产生阶梯波、控制LED灯逐盏变亮:
在4 * (1/72)μs时间内,别的MCU(1MIPS/MHz)最多产生4个阶梯或者点亮4盏LED,你不是1.25倍的等效性能吗?
那你倒是产生出5个阶梯或者点亮5盏LED出来给大家看看呀?你能吗?

再说软件,同样两个简单的例子——单个字宽度的加法运算和FFT运算中用得最多的MAC运算(假设它有硬件的单周期MAC运算支持):
在4 * (1/72)μs时间内,别的MCU/DSP最多作4次加法运算或者MAC运算,你不是1.25倍的等效性能吗?
那你倒是作5次加法运算/MAC运算出来给大家看看呀?你能吗?

以上硬件和软件分别的两种情况,你都不能吧?恐怕当初写出1.25DMIPS/MHz这个指标的人,TA也是不能的吧?
这个1.25有什么意义?是不是完全没有意义了?


我们说不是,1.25这个系数是一个平均值,是被少数几条指令给拉高的一个参数,楼上反驳马老师的那些人,你们知道具体是哪些指令
使得ST得出1.25这个系数的吗?了解这几条指令对我们搞硬件的有多大的实际意义吗?知道是什么原因使得这些指令的等效性能这么高吗?
说穿了,无非就是软件功能由硬件实现、时序逻辑电路功能由组合逻辑电路完成而已——你们清楚地了解类似于SIMD、桶形移位器等
这样的名词所代表的含义及具体的硬件电路实现方式吗?

出0入0汤圆

 楼主| 发表于 2009-12-15 01:06:46 | 显示全部楼层
哈哈,终于有了一个强力支持者。不过66楼的解释太“硬件”了,许多人会不明白的。

我LZ位的帖子实际上主要含义是指学习和掌握正确的方法与思路来设计系统。下面我们不考虑什么MIPS,也不考虑什么新的硬件接口功能带来的变化,我用UART举例子吧(UART,51就有这个接口,应该不是新东西),看看方法和思路的重要性。

一个系统要求是这样,使用一个DMIPS足够高的控制器,通过一个UART口接受GPS卫星接收模块的信号,然后做处理计算(纯软件),最后通过另外一个UART把结果发送到另外一个系统中。

条件:1。两个UART都采用9600bps,标准10位(1/8/无/1)(两头都是原先的设备,已经定死了,不能改变)
      2。接受GPS数据为50个字节(ASIIC码),每秒一次。
      3。对一次GPS数据的处理和计算(包括数据转换等),需要0.5s(软件算法已经最优化,尽管不需要做FFT,可是由于是浮点运算,化时间)
      4。对一次GPS数据处理和计算的结果为500个字节,需要全部通过UART送到另外系统,也是1秒1次。
      5。系统不能丢失(可以迟后,当然要迟后的,运算处理需要时间的)每一秒GPS的数据,以及对其的处理和结果发送。也就是说在1s内要完成接受、处理计算以及数据发送的工作,否则会“阻塞”下一秒的处理。

      问题是9600bps的UART在1s内连续不断的工作,也只能送出9600/10=960字节,那么送出500个字节就需要>0.5s的时间。这样加上数据处理计算需要的0.5秒,(还没计入接受50字节需要的时间)系统好象不能实现上面的需求了。

     怎么办?换系统时钟更快的,DMIPS更高的控制器?还是请DSP出山?

     我不客气了,【27楼】的learner123,你不是要辞职考研吗,这个问题先考考你如何解决,能否给出一个好的、可行的参考方案。

出0入0汤圆

发表于 2009-12-15 02:00:17 | 显示全部楼层
他应该不会说出硬件有buf这样的话。。。。

出0入0汤圆

发表于 2009-12-15 02:13:57 | 显示全部楼层
【67楼】 machao
我LZ位的帖子实际上主要含义是指学习和掌握正确的方法与思路来设计系统。
-------------------------------------------------------------------
问题就在于那么多人就是没有理解马老师想说的是“学习和掌握正确的方法与思路来设计系统”,不知道进行系统设计的时候对功能模块实现方式的一般优先顺序是 硬件>中断服务程序>主程序,然而却纠缠于内核速度与外设速度的不匹配上。


【67楼】 machao
不过66楼的解释太“硬件”了,许多人会不明白的。
-------------------------------------------------------------------
马老师在顶楼提的本来就是“从嵌入式硬件工程师角度去看MIPS ”,真正合格的“嵌入式硬件工程师”应该没有任何困难地看懂我66楼所说的所有内容。如果马老师您认为“会不明白的”的那“许多人”也能称为“嵌入式硬件工程师”的话,那马老师请您恕我直言——您真的是“对牛弹琴”了。


【65楼】 ilcvm
“马老师还是先用STM32试试用汇编直接写IO寄存器看看最高IO速度能达到多少吧。

你看看41楼代码最后一句就知道人家用的是汇编还是C了”

【41楼】 3dg12
“外设会不会阻塞内核速度一试便知,用下面的示意程序试下就知道了:

start:
  置1
  置0
  .
  .
  .
  置1
  置0
  b   start

用示波器看下IO的频率,肯定比想象的慢的多。这就是我在44b0上的测试程序,66mhz的arm7只能发4,5mhz,算下来6个clk才一条指令。 ”
-------------------------------------------------------------------
41楼以活生生的例子回答了马老师在顶楼提出的问题——“‘32位的处理器也太笨了吧,产生一个1M的方波,就什么事情也做不了。’你会得到这样的结论吗?
——马老师,您冤枉“32位的处理器”了,其实真的不是“32位的处理器”太笨了,而是用它的人太笨了呀……

出0入0汤圆

发表于 2009-12-15 09:00:36 | 显示全部楼层
关于STM32的I/O端口速度,我再举一个例子明确说明一下。

大家都知道,如果用程序直接翻转I/O端口,在CPU时钟频率为72MHz时,最多只能在引脚上得到18MHz的输出波形。如果你设置这个引脚的输出驱动器带宽为50MHz,则可以得到18MHz的方波;如果你设置这个引脚的输出驱动器带宽为10MHz或2MHz,则仍然可以得到18MHz的波形,我没有具体看过示波器,但绝不是方波,有可能是正弦波,也有可能是其它幅度变化的奇怪波形。

这里需要注意的是,程序的运行速度,不会因为仅仅由于输出驱动器带宽的改变而改变,输出波形的频率也不会改变,改变的只是波形的形状。

出0入0汤圆

发表于 2009-12-15 09:18:51 | 显示全部楼层
说句实话,这是少见的出现长篇大论的讨论但又无啥营养的帖子,感觉就像在进行学生辩论赛。

出155入0汤圆

发表于 2009-12-15 12:57:08 | 显示全部楼层
首先声明我不是合格的嵌入式硬件工程师,但是我同意马老师的描述,一条指令/时钟是上限了,不可能1.5条指令/时钟。要产生1MH的方波肯定不能用定时器中断的方式,应该用比较匹配模式产生中断。这样子CPU才不会被定时器每μS被中断一次,注意我没说CPU被IO口拖慢了。CPU在每μS内还可以干别的事情,因为66MHz的单周期指令时间不到1μS。
  马老师其实主要就是说从硬件角度考虑,怎么能提高代码的运行效率(cpu执行时间更短),实现同样的功能,纯软件出身的工程师写的程序,肯定没有硬件出身的工程师考虑的更全面,更底层。

出0入31汤圆

发表于 2009-12-15 14:01:42 | 显示全部楼层
【67楼】 machao
这题目被你这样一说,容易让人钻进迷宫
你在诱导做题人按照你出题陷阱方向走,哈哈

出0入0汤圆

发表于 2009-12-15 15:19:39 | 显示全部楼层
to machao:
"我不客气了,【27楼】的learner123,你不是要辞职考研吗,这个问题先考考你如何解决,能否给出一个好的、可行的参考方案。"

首先,考研不考这个,高数线数概率英语政_治专业课,即使专业课,也没这种题,虽说我会做。

如果你能不考试就招我,我倒是要好好答这道题。当然,别是工程硕士,这个好像没两证。

这题和MIPS没有关系,不过和操作系统,中断响应时间及中断程序的编程,fifo有关。


对MIPS不能随便乱理解,个人觉得很多人对MIPS的理解的还是有偏差。

出0入0汤圆

发表于 2009-12-15 15:44:22 | 显示全部楼层
来学习学习。

出0入0汤圆

发表于 2009-12-15 16:28:54 | 显示全部楼层
综合看个人认为:
16楼gzhuli 咕唧霖 对DMIPS的解释比较正统。
42楼3dg12 对影响系统速度特别是造成“实际MIPS”下降的原因做了解释
47楼huatong 对“销售”手段的说明比较客观。当然实际上,除了新手,大多数人不会只看MIPS来选型,不过从某一角度可以拿捏一个芯片是否能完成自己的需求。至少在一些应用中可以否定一些芯片哦

3楼voidx void * 提出的问题是很重要的,马老容易引起初学者误会。

至于很多帖子的不合适的语言就不提了,希望少一些比较好。

其实这贴里的IO部分的讨论可以让我们理解更深一步了。

当然我更想知道的是:马老师真能不看成绩就收研究生(非工程硕士)?如果是,我们邮件联系。

出0入0汤圆

发表于 2009-12-15 16:36:47 | 显示全部楼层
对了这个帖子比较有意思,和IO有关
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3767895&bbs_page_no=1&bbs_id=3020

出0入0汤圆

发表于 2009-12-15 20:58:14 | 显示全部楼层
马老师的题没错。这就是ARM与8位单片机的最大不确定性,高质量高速度的嵌入式编程时常需要了解。但对于用C编写类似于WINDOS CE,高级人机界面之类的纯软件人员,不可能理解,也不必要理解,所以才有对“对牛弹琴”之说。引起的争论都已经跑题。并且他们的理解,对于他们自己来说还是正确的,并经实践得出来的,马老师没必要在这上面费口舌,更不要象对学生一样批评他们,他们可是接受不了批评的。
  还有对于STM32的I/O端口速度,与程序执行速度无关,简单的说,就象是在端口上接个电容,容量不同,对输出波形的影响也就肯定不同。

出0入0汤圆

发表于 2009-12-15 21:47:05 | 显示全部楼层
废话不说,上试验结果

1,硬件试验环境
   a,泰克TDS1012示波器
   b,自制TRACE-ICP  arm仿真器
   c,STM32开发板:STM32F103RBT6,外部晶体8Mhz

试验桌面 (原文件名:IMG_2258.JPG)

2,硬件连接
   开发板采用USB供电。PB10接示波器通道1,提供触发同步信号用。PB11接示波器通道2,为测试IO频率。

3,软件环境
   a,编译软件
IDE-Version:
μVision V4.00a
Copyright (c) Keil Elektronik GmbH / Keil Software, Inc. 1995 - 2009

License Information:
xia asd
jkl
LIC=9WSKX-HRB5I-TMV9P-8IAUR-GRHJ4-IU161

Tool Version Numbers:
Toolchain:        RealView MDK-ARM  Version: 4.01
Toolchain Path:    BIN40\
C Compiler:         Armcc.Exe       V4.0.0.524
Assembler:          Armasm.Exe       V4.0.0.524
Linker/Locator:     ArmLink.Exe       V4.0.0.524
Librarian:             ArmAr.Exe       V4.0.0.524
Hex Converter:      FromElf.Exe       V4.0.0.524
CPU DLL:               SARMCM3.DLL       V4.01
Dialog DLL:         DARMSTM.DLL       V1.44
Target DLL:             BIN\UL2CM3.DLL       V1.54
Dialog DLL:         TARMSTM.DLL       V1.43

  b,工程管理采用VC6。0,通过makefile调用keil编译器
  c,仿真软件采用TRACE32 08年10月份版本

试验工程文件ourdev_515100.rar(文件大小:208K) (原文件名:software.rar)

出0入0汤圆

发表于 2009-12-15 21:55:23 | 显示全部楼层
试验1,产生最快的方波
  配置STM32内核频率为72Mhz(外部晶体8Mhz,倍频9),APB2总线为1分频,即72Mhz

RCC参数 (原文件名:1.JPG)

部分试验代码:
                EXPORT iotest
iotest
                ldr     r0, = 0x40010C0C
                ldr     r1, = 0x00000800
                ldr     r2, = 0
                ldr     r3, = 0x00000400
always_loop
                str     r3, [r0]
                str     r2, [r0]

                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]
                str     r1, [r0]
                str     r2, [r0]

                b       always_loop

试验结果:PB11上产生约17。86Mhz方波,内核频率为72Mhz,说明此时内核每2CLK执行一次翻转IO指令


示波器测量结果 (原文件名:IMG_2265.JPG)

出0入0汤圆

发表于 2009-12-15 21:59:40 | 显示全部楼层
试验2,中间加入一个nop
RCC配置同上
试验部分代码:

                EXPORT iotest
iotest
                ldr     r0, = 0x40010C0C
                ldr     r1, = 0x00000800
                ldr     r2, = 0
                ldr     r3, = 0x00000400
always_loop
                str     r3, [r0]
                str     r2, [r0]

                str     r1, [r0]
                nop
                str     r2, [r0]
                nop
                str     r1, [r0]
                nop
                str     r2, [r0]
                nop
                str     r1, [r0]
                nop
                str     r2, [r0]
                nop
                str     r1, [r0]
                nop
                str     r2, [r0]
                nop
                str     r1, [r0]
                nop
                str     r2, [r0]
                nop
                str     r1, [r0]
                nop
                str     r2, [r0]
                nop

                b       always_loop

试验结果:PB11上仍产生约17。86Mhz方波,内核频率为72Mhz,说明此时内核仍为每2CLK执行一次翻转IO指令

(原文件名:IMG_2266.JPG)

出0入0汤圆

发表于 2009-12-15 22:03:02 | 显示全部楼层
试验3,加入两个nop
RCC配置同上
试验部分代码类似上个试验

试验结果:PB11上产生约11。90Mhz方波,内核频率为72Mhz,说明此时内核平均每3CLK执行一次翻转IO指令


(原文件名:IMG_2267.JPG)

出0入0汤圆

发表于 2009-12-15 22:12:43 | 显示全部楼层
试验4,加入三个nop
RCC配置同上  
试验部分代码类似上个试验

试验结果:PB11上产生约9。259Mhz方波,内核频率为72Mhz,说明此时内核平均每4CLK执行一次翻转IO指令


(原文件名:IMG_2270.JPG)

出0入0汤圆

发表于 2009-12-15 22:18:11 | 显示全部楼层
试验5,代码采用试验1的,RCC配置APB2为2分频
RCC配置

(原文件名:2.JPG)

试验部分代码同试验1

试验结果:PB11上产生约8。929Mhz方波,内核频率为72Mhz,说明此时内核平均约每4CLK执行一次翻转IO指令

(原文件名:IMG_2271.JPG)

出0入0汤圆

发表于 2009-12-15 22:29:01 | 显示全部楼层
试验6,修改IO输出配置为2Mhz
RCC配置同试验1
试验部分代码同试验1
IO输出配置修改为2Mhz

试验结果:屏幕上半部分为50Mhz时的波形,下半部分为2Mhz时的波形,发现改为2Mhz后输出频率没有发生变化,但上升沿和下降沿明显变欢,过冲减小


(原文件名:IMG_2272.JPG)

出0入0汤圆

发表于 2009-12-15 22:53:01 | 显示全部楼层
LS,你在83楼提供的例子能说明什么?用的这些程序,在产生方波的过程中,CPU的占用率都应该都是100%吧?

这能说明内核频率为72Mhz的STM32,在产生17.86MHz方波的时候,就完全不能做其他任何事了吗?

你真的了解STM32芯片中集成的各个硬件功能外设吗?你真的了解你所玩过的那些MCU吗??你真的了解硬件吗???

以你这样的系统设计概念,不管你“玩”任何一种MCU多少年、“玩”多少种MCU,最终也只能停留在“玩”的层面上,永远也上升不到“设计”的层面上。

送你一句忠告:视野和想法很重要。

出0入0汤圆

发表于 2009-12-15 23:31:40 | 显示全部楼层
这一回还真有看头,接照ARM核来说,在产生分支转移的时候,打断了流水线操作,应该会产生出这种效果。
本来以前还在猜想阶段,这一回眼见为实。大开眼界,好贴!
本人的示波器是泰克50M,只可惜是模以的,没有存储功能。汗一个!

出0入0汤圆

发表于 2009-12-15 23:45:44 | 显示全部楼层
试验总结:
    1,APB相对内核是慢速的,操作需要2个APB CLK。内核操作APB时如果遇上APB上次操作未完成,则内核需等待。试验1和试验5可以验证这一点,程序中没有别的多余指令,但受APB影响,执行速度降了下来。
    2,内核对APB执行写操作,不用等待本次操作完成,即可执行下一条指令。试验2,3,4可验证这点,相对试验1,似乎IO翻转命令后的一条nop没有托慢IO的输出频率。
    3,至少str和nop指令内核可以做到一条指令一个周期。试验2,3,4可验证这点,试验2中1条str加1条nop需2个CLK,式样3中1条str加2条nop需3个CLK,试验4中1条str加3条nop需4个CLK。
    4,对于STM32,IO输出频率配置的作用是改变输出特性,尽量放缓上升和下降沿,减少对外影响,而与输出频率无关,对内核程序执行速度没有影响。

不同意马老师的观点有:
   1,DMIPS本来是评价一款内核的纯软件计算性能的指标,与编译器有关,与外设和程序员无关。而用来评价处理器的硬件特性不太合适。ARM给出的1.25DMIPS/MHz是很实在的,而且经过验证的。好像realview可以达到这个指标,GCC则差一些。举的那个1Mhz方波的例子也不太合适。
   2,【12楼】“10楼明显不是硬件出身的,根本不了解我讲的东西。我这里讲的I/O不是外部设备,是处理器的引脚。 ”
      -----这个不用多说,GPIO模块可是挂在APB(Advanced Peripheral Bus)总线上的。
   3,【30楼】“1。我知道,从STM32内部看,I/O属于“外部”的挂的设备,没有内核工作速度快,但STM32的I/O工作的频率可以为50M、10M和2M!在中断中用一条指令将I/O取反,输出1M方波,I/O工作频率也就2M,因此配置I/O工作在10M或50M就可以了。不会“阻塞”影响内核速度的。我同意你们的看法,把I/O归属于外部设备,会阻塞内核速度,那么更说明了从硬件角度,证明这个时候DMIPS的参考作用不大。 ”
      -----STM32的50M,10M,2M和内核无关,并且IO会阻塞内核,只要内核操作的足够快,在试验结果1中。
   4,【44楼】“在32位系统中,内核时钟与I/O时钟不同,I/O的时钟慢,I/O口是按I/O时钟触发同步工作的,假如I/O的时钟工作频率为1M,它是每隔1us输出一次的,可是CPU在这1us中已经设置了好几次了,I/O只不过是在1us时输出最后的一次设置值。 ”
       -----IO不会象D触发器那样任凭输入怎么变,只在clk有效时输出最后结果,试验总结1说明内核会等待IO操作完成的,保证每次写入都生效。并且示波器上也没有观察到有写丢失现象,是非常标准的方波。

   5,【63楼】“我同样不理解另外一个玩arm也有6,7年了,而且开发的就是arm仿真器高手所说的情况(因为自己没玩过),“66mhz的arm7只能发4,5mhz”?

内核66M,I/O只能工作在10M?(请哪位熟悉的朋友能提供一个手册值吧:I/O最高工作频率为多少)。我想I/O应该不会低于20M,这个ARM7不会这么“笨”吧。 ”
       -----44b0确实如此的“笨”,它的APB总线效率比STM32的低多了,我用类似试验1的代码就只能出4,5Mhz,不信大家可以找个板子来试验下。44b0毕竟是2000年左右的产品了,对它别要求太高。

出0入0汤圆

发表于 2009-12-15 23:55:00 | 显示全部楼层
to 【69楼】 eduhf_123 经历
我再次声明,那段代码是为测试44b0极限所写的,如果只是产生一个简单1mhz的方波,这肯定不是一个好方法。但当时我是要模拟JTAG时序,还需要输出TMS,TDI,读取TDO,不是一个简单的方波,所以只能用软件操作IO。

另外对于你在89楼所说的,我希望你能认真看完我做的试验和我后面写的试验总结。如果你仍保持原看法的话,那只有让大家来评论了,我将不与你说话。谢谢!!!

出0入0汤圆

发表于 2009-12-15 23:56:43 | 显示全部楼层
to 【90楼】 zhousd 银河一号
你所说的“在产生分支转移的时候,打断了流水线操作,应该会产生出这种效果。”
那种效果?能具体点么

出0入663汤圆

发表于 2009-12-16 00:22:28 | 显示全部楼层
总线访问肯定是会阻塞的,总线有个BUSY信号,操作没完成,BUSY有效,其它试图访问总线的master就得阻塞。
如果有DMA传输,情况会更复杂。

出0入0汤圆

发表于 2009-12-16 01:43:44 | 显示全部楼层
RE:93楼 3dg12
具体点就是ARM的某些令时间很难准确算出来,产生的效果就是跟设想中不同啊。有时还真得靠仪器才能最后验证出来。
例如:IIS接口的DAC,MCU通过DMA再经IIS接口时序到DAC中的数据肯定会发生瞬间传送延迟随机抖动,因此用MCU做声音DAC转换时,跟音响的发烧理论发生冲突。

出0入0汤圆

发表于 2009-12-16 01:56:57 | 显示全部楼层
DMA速率比IIS快得多(DMA在几十M上百M级别  IIS为几十K)
在上一个数据还没发完
下一个数据已经准备好了

出0入0汤圆

发表于 2009-12-16 02:54:07 | 显示全部楼层
佩服3dg12,实验很具有说服力。我得好好学习学习了。
我也在搞jtag,不过只是玩玩,还没这么高的水平,准备自己做个ti仿真器,有很多问题请教,可否留个联系方式?
目前用cpld来做jtag时序处理,不过不准备用cy68xxx之类的片子,准备做以太网口的。

以下言论如有言辞不周,请指出,学生自当改正。

希望马老师注意自己的言行,不要动不动就说这个能力差,那个白学了之类的话
“对牛弹琴”
“请上帝也没用”此类话语不好,最好少用。

如果普通人在论坛里这样说,无所谓,只能说明该人素质不好。可您是老师,您也发表过关于中国教育现状的帖子,应该注重自己的言行,为人师表。术业有专攻,闻道有先后,如是而已。没有人天生就会什么东西,由于教育制度,很多学生没法做到您的高要求(至少现在很多普通的本科学生做不到)
至于其他人的有些话语,也应该改改措辞。

当然马老师您放心,我不准备考你的学校,只是个玩笑而已。因为我现在很清楚学好数学的重要性,不过是高数看的头痛后灌灌水,不过引发很多的讨论,倒是学到不少。


以下还是个搞笑轻松的:
    大学期间高数(高等数学)考试的前后,各位注意一下啊,就能看出每个人混的境界了。
  有慧根的呢,就会说:什么?明天要考高数?
  得道成仙的呢,会说:什么?下节课要考高数?
  已入化境的呢,会说:什么?昨天考高数了?
  大彻大悟的呢会说:什么?高数?刚才考得不是英语啊?
  得无量大法,脱轮回之苦,跳出三界外,不在五行中的会说:唉,悟空,八戒,高数是什么树啊?

出0入663汤圆

发表于 2009-12-16 03:11:10 | 显示全部楼层
【95楼】 zhousd 银河一号
例如:IIS接口的DAC,MCU通过DMA再经IIS接口时序到DAC中的数据肯定会发生瞬间传送延迟随机抖动,因此用MCU做声音DAC转换时,跟音响的发烧理论发生冲突。
-----------------------------
IIS的传输时钟是硬件分频出来的,和DMA无关。如果DMA来不及送数据,就不是发不发烧的问题,声音已经是断断续续的了。

出0入0汤圆

发表于 2009-12-16 08:56:22 | 显示全部楼层
有图有真相。

出0入0汤圆

发表于 2009-12-16 11:39:27 | 显示全部楼层
to【95楼】 zhousd 银河一号
我想DMA的随机抖动是在和内核抢总线吧,总线仲裁不可能让DMA一直占着总线。IIS没用过,别的不太好说。

to 【97楼】 learner123
我的邮箱xiaoyang2000@sina.com。jtag本身很简单,就是围绕那个状态机来做文章。TCK提供同步信号,TMS控制状态机的迁移,TDI和TDO传送数据。用什么实现要看你的具体需求,要速度还是要成本。
至于马老师的那些话语,上帝是我先请的。当时只不过是看到“我这里讲的I/O不是外部设备,是处理器的引脚”发表一下感慨,并没有其他意思。因为我从没见过内核中集成IOpin的cpu,IO最多算个ON chip外设,外设并不是cpu外面的意思。如果引起了马老师的不快,我在这里先说声对不起了。
其他人的言论我一般不予理睬,尤其是那些还没弄清事情的来龙去脉就瞎评论的人。我的能力水平是我的,他说一两句话,我的能力水平也不会改变。薪水是老板给的,又不是他给的,他怎么看我的水平无所谓。有些人上论坛是切磋技艺的,有些人上论坛是来发泄的。

--------------------------------------------------------
下面接着做试验,看看其他两款cpu的软件操作IO能力。可以为以后大家选型参考。
代码还是那段代码,只不过改用GCC编译
    .global iotest
iotest:
    ldr     a1, =0x01D20020
    ldr     a2, =0x08
    ldr     a3, =0
always_loop:
    str     a2, [a1]
    nop
    nop
    str     a3, [a1]
    nop
    nop
    str     a2, [a1]
    nop
    nop
    str     a3, [a1]
    nop
    nop
    str     a2, [a1]
    nop
    nop
    str     a3, [a1]
    nop
    nop
    str     a2, [a1]
    nop
    nop
    str     a3, [a1]
    nop
    nop
    str     a2, [a1]
    nop
    nop
    str     a3, [a1]
    nop
    nop
    b       always_loop

1,三星S3c44b0x,50Mhz内核频率,8Kb Cache打开,程序在sdram中运行(其实是在cache里)。手册中未说明APB分频系数,也不可调整。APB为早期版本,写操作需写完才可执行后面的指令。

(原文件名:20091216(000).JPG)
没有nop指令,IO频率为6。25Mhz,可见APB操作与主频(50Mhz)之间为4倍的关系。



(原文件名:20091216(001).JPG)
一条nop指令,IO频率为4。950Mhz。



(原文件名:20091216(002).JPG)
两条nop指令,IO频率为4。167Mhz。综合上个试验可以看出内核操作完APB后没有立即执行下面的nop,而是等待APB。算出nop执行时间为0。02us,为一个CLK。

2,NXP的LPC1754,72Mhz内核频率,程序在FLASH中,FLASH加速打开。GPIO挂在AHB上,与APB无关。

(原文件名:ccc.jpg)
注意他的GPIO是挂在AHB上的,并且叫“High Speed GPIO”



(原文件名:20091216(003).JPG)
没有nop指令,IO频率为35。71Mhz,每次操作需1个CLK,不用等待。


(原文件名:20091216(004).JPG)
1条nop指令,IO频率为18。18Mhz,每条指令也是1个CLK。


总结:44b0的IO最弱,毕竟是老前辈了。APB操作需4个CLK,并且写操作要等写完才能继续运行。
      STM32中等,借着ARM改进了APB的春风,APB操作只需2个APB CLK,并不需写等待。
      LPC1754最强,IO直接挂在AHB上,1个CLK一次操作。

出0入0汤圆

发表于 2009-12-16 12:22:27 | 显示全部楼层
有图为证,佩服3dg12,以后请多指教.
不过在这贴中也学了一样东西,以后不要在贴中提出反对,免得被说成是"对牛弹琴".
其实真的很反感这种说话.

出0入0汤圆

发表于 2009-12-16 12:43:15 | 显示全部楼层
TO:3dg12
理想的音频DAC转换是送到DAC中的数据不可能有任何的中断,中间若果出现了几个时钟的失步传送,人耳是很难分得出来的,但是听感就没有那么的甜了,通俗点讲就是不耐听了。
IIS接口的DAC与MCU之间的基本工作原理就是:
MCU在某段内存中有一待传送的数据块,这个块是FIFO的,当空一个字节或字的候,MCU应能在FIFO没有完全发空时传送,并且在传送过程中,FIFO的优先级是受IIS时钟控制的。

出0入663汤圆

发表于 2009-12-16 15:14:01 | 显示全部楼层

(原文件名:IIS.jpg)
IIS接口本身是双缓冲的,正在发送的数据在Shift register,下一个待发数据在TX buffer,TX buffer为空即发出TXE信号,此时DMA有16个IIS时钟周期的时间去填下一个数据,时间很充裕的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 16:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表