2012-01-01 80 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