2012-01-01 82 views
0

我想用微控制器进行图像处理。我想知道在一切之前需要多少时间来完成这项操作。如何确定算法的顺序

我需要知道多少个CPU时钟是如何做一些操作需要。

如何计算它?

这些是知道哪种类型的CPU的,我应该使用? ARM的或AVR的?

+1

你需要知道CPU的类型。 – rene 2012-01-01 15:28:01

+1

更不用说算法。 – kenny 2012-01-01 15:33:55

回答

2

一切都可以使用不同数量的时钟不同的CPU。时序是非常特定于CPU的。您还需要考虑到等待状态,闪存和RAM等

一个快速的ARM微控制器评估板与浮点单元i和d缓存就可以了$ 20

http://www.st.com/internet/evalboard/product/252419.jsp

或搜索对于stm32f4发现(不要与stm32价值线发现或任何stm8板混淆)。

我对如何使用该芯片/电路板在 http://github.com/dwelch67/stm32f4d例子

例子

许多基于AVR arduinos可用(http://sparkfun.com)从$ 30到$ 50,你在串行接口添加+ ,有一个Lilypad套件和一个专业的迷你套件,它具有所有的功能,还有串行的USB接口。

注意的AVR将是比从性能的角度武器显著慢。如果你想避免进入嵌入式编程,arduino沙盒可以去除很多(如果不是所有的嵌入式魔法),让你用apis去调用操作系统。 ST也有图书馆,但你需要做更多的工作。当谈到让您的生活变得轻松(以一些性能和其他资源为代价)时,很难与avr arduino家族竞争。

的mbed http://mbed.org也许是方法的与Arduino的沙箱竞争,但获得ARM性能越好。枫树http://leaflabs.com/devices/maple/尝试,如果不成功(我不知道)是替代基于avr的arduino与臂性能下降。

为什么要提到所有这些板?因为您应该购买一对夫妇并尝试使用您的算法,并从性能角度找出您真正可以做的和无法做到的事情。现在许多处理器不会公布每条指令的时钟表,因为较新的处理器往往在每条指令的一个时钟内执行。你仍然需要知道如何计算周期。我强烈建议迈克尔·亚伯拉什的书禅汇编语言的

http://www.amazon.com/Zen-Assembly-Language-Knowledge-Programming/dp/0673386023/ref=sr_1_1?ie=UTF8&qid=1325433046&sr=8-1

使用拷贝是实惠。它确实专注于8088/86,其性能问题在下一代处理器中得到了解决/移动,其性能问题已得到解决/移动,现在我们主要处于处理器不是I/O问题的情况。对于微控制器来说,它与过去的大小和成本相似,如果使用C语言编程或汇编器以外的其他语言,处理器仍然是瓶颈。 Zen书会让你理解你所问的问题。指令集引用可能只说每个指令执行一个时钟,但请记住,如果该指令执行一个存储器周期,则该存储器周期有一个或更多时钟等,则需要一个或多个时钟来取指令。这些周期以及它们如何进行优化不仅仅是针对CPU /处理器,而是针对特定的微控制器芯片,来自同一家公司的一个芯片可能与来自同一家公司具有相同核心处理器的另一个芯片的性能完全不同。回过头来参考Michael Abrash,基本上不管你认为你知道多少,或者弄清楚硬件是如何工作的,你仍然需要运行和计时你的代码(准确!),你可以在尝试计算代码和形成时犯很多错误基于不良测试/时间的结论)。

0

转到您的CPU制造商的网站,应该有个文档中有告诉你的每个指令需要多长时间。然后加起来说明你的算法的

+0

你的意思是,“+”或“if”可以在不同的CPU中使用不同的CPU时钟? – 2012-01-01 15:33:38

1

你应该学习大的O-notation。它理论上会给你一个算法的时间复杂度。请注意,将AVR(8位)与ARM(32位)进行比较并不公平。您应该比较AVR32(32位)和ARM(32位)处理器。

+0

是否有任何方法知道AVR(8位)是否足够我或我应该使用ARM(32位)? – 2012-01-12 11:44:29

+0

只有在代码正在运行时,您才会知道。 8位可能就够了,但是,你的性能目标是什么?如果你使用32位处理器,你将有更多的发展空间,但这并不意味着你应该选择ARM。从成本和性能的角度来看,这一切都取决于你想要做什么。 – 2012-01-12 14:51:01