摘要:使用PWM或定時器外設來產生輸出脈衝。
首先,CPU的時鐘速度必須實際代碼的執行速度一種複雜的關係,並且在許多CPU存在參與執行的不同階段多於一個的時鐘速率。例如,chip you reference有幾個內部時鐘源。此外,每個單獨的指令可能需要不同數量的時鐘來執行,並且一些內核可以同時執行部分(或全部)幾條指令。
要嚴格創建一個循環,需要12.5微秒,而無需使用一個定時中斷或其他硬件設備將需要在彙編語言小心手編碼與每個指令的執行時間小心會計一起執行。
但是你用C編寫而不是彙編程序。
所以你要問的第一個問題是你的循環實際生成了哪些機器代碼。第二個問題是你是否啓用了優化器,以及到了什麼級別。
正如書面所說,一個體面的優化器將確定循環for (i=0; i<1000; i++) ;
沒有可見的副作用,因此只是寫入;
的緩慢方式,並且可以完全刪除。
如果是編譯循環,它可以被使用天真地可能多達5條指令,或儘可能少的一個或兩個寫入。我並不熟悉這種特定的TI CPU架構,所以我不會試圖猜測最佳的實現方式。所有這些都說明,瞭解CPU架構及其效率對於構建可靠高效的嵌入式系統非常重要。但是鑑於該芯片內置了可爲PWM(脈衝寬度調製)輸出提供硬件支持的外圍設備以及通用硬件定時器/計數器,您將更好地學習如何使用硬件爲您生成波形。
我會通過收集CPU核心及其外設,特別是應用筆記和示例代碼中每一個文檔開始。
C編譯器將有一個選項來發出和保存彙編語言源文件。我將以此作爲指導,研究爲關鍵循環和其他瓶頸生成的代碼結構,以及編譯器各種優化級別的影響。
工具套件應該有一個分析運行代碼的機制。在採取追求優化的英雄措施之前,首先要用它來確定實際的瓶頸。即使它缺乏體面的分析,您也可能擁有備用的GPIO引腳,可以切換代碼的關鍵部分,並使用邏輯分析儀或示波器進行測量。
一個while循環產生一個運行超過1000個時鐘週期的循環,因爲它增加了,分支等等......循環內的每個事物都需要多於一條指令。除此之外,在各種微控制器上,一些指令需要超過一個時鐘週期。 –
更不用說,很高興知道哪個操作系統,如果有的話,還有什麼其他任務,等等。 – 2013-06-26 18:08:30
@VladLazarenko它是在微控制器上通常沒有操作系統時期,例如,TinyOS並不僅僅是一些樣板代碼。 –