當前位置:首頁 » 編程軟體 » ceva的編譯器

ceva的編譯器

發布時間: 2022-07-15 10:21:18

⑴ 如何利用C和匯編語言混合編程實現DSP軟體設計

其中絕大部分功能不屬於標准C語言,因此被稱為C語言擴展。下面列出的是其中有益於DSP編程的一些功能。 內聯匯編(inline assembly):該功能可以幫助編程人員將匯編指令插入C代碼。 硬體寄存器綁定C變數:該功能經常與匯編指令內聯功能結合在一起,幫助內聯匯編代碼訪問C語言級的變數(見圖3)。圖3:結合內聯匯編和硬體寄存器綁定功能的代碼示例。 存儲區屬性:該功能允許編程人員將上述變數和函數分配到獨特的用戶定義存儲區,可以讓編程人員將C語言級單元分配到實際的存儲器位置,這對DSP應用來說非常關鍵。 用戶定義的調用約定:在某些情況下,匯編函數可以通過用戶定義的調用約定取得更好的優化效果。 編譯器內部函數(Compiler intrinsics):是指能夠使用專門的宏或函數調用觸發的內建編譯器功能總稱。沒有內部函數支持的編譯器必須調用用戶定義的函數,這樣做可能會令用戶定義函數可能會在一個環路里產生函數調用和返回(見圖4),從而產生巨大的開銷。圖4:ETSI的mult_r(乘法和取整)基本操作的C代碼實現(左)和對應的由CEVA-TeakLite-III編譯器生成的匯編代碼(右)。 匯編內部函數:是將匯編代碼內聯進C代碼的一種先進方法,下文將有詳細介紹。把匯編指令當作C語句一樣來編寫內聯匯編功能具有顯著的缺點。它會破壞各種編譯器優化操作,因為編譯器不了解內聯代碼的內容,會使用最壞假設;以及它可能迫使編程人員處理底層問題,如寄存器分配和指令調度。匯編內部函數可以幫助編程人員實現內聯匯編代碼,並且不存在這些缺點。從編程人員的角度看,匯編內部函數就像是C語言宏或函數。它們接收C語言變數,返回C語言輸出結果,同時表現為單個匯編指令。由於涉及該功能的所有代碼都在C語言等級,因此編程人員不必擔心寄存器分配、指令調度和其它底層問題。匯編內部函數不僅不會妨礙編譯器優化操作,還會參與優化過程,就像它們是編譯器正常產生的匯編指令一樣。這些特徵使得匯編內部函數的功能非常強大。利用匯編內部函數,編程人員可以從編譯器不可能產生的獨特匯編指令中受益。例如,CEVA-X1641的bitrev(位反向)指令就是為FFT等演算法定製的。由於編譯器不太可能把一個程序看作一個FFT並使用bitrev指令,因此編程人員可以完全把bitrev匯編內部功能嵌入到C代碼中。結合對應用的透徹了解,編程人員還可以使用C應用程序的性能決定段里的精確序列匯編內部函數,從而能夠確保編譯器生成的代碼效率就像手工編寫的一樣高。圖5是CEVA-X1641編譯器與匯編內部函數一起使用的例子。匯編內部函數還受益於由CEVA-X1641編譯器處理的問題所決定的機器,如寄存器分配、指令調度和硬體單元分配。圖5:CEVA-X1641編譯器支持的匯編內部函數的使用。 調試混合代碼的應用程序匯編代碼的調試需要對延遲和存儲器對齊限制等架構和機器級問題有深入的了解。只是簡單地把C代碼和匯編代碼放在一起會使事情更麻煩,因為編程人員現在還必須調試C代碼和匯編代碼之間的連接。調試混合代碼應用程序的第一步就是分隔問題。假設保持匯編代碼的C語言實現不變以及C語言實現方案工作正常,那麼將匯編函數轉換成C語言實現並重新測試應用程序就相對比較容易。為了迅速檢測出問題,編程人員可以在每一步把受懷疑函數的一半轉換為相應的C語言實現方案。一旦有問題的匯編函數被確定,它就應該同時作為獨立的匯編問題和C與匯編的連接問題加以分析。調試獨立的匯編問題對匯編編程人員來說十分簡單明了,但C與匯編的連接問題就有點麻煩。在考慮匯編函數本身時,C與匯編的連接問題是不可見的,這與獨立的匯編問題有所不同。為了找出這些問題,編程人員必須檢查編譯器的約定,比如調用約定和寄存器使用約定。編程人員還必須檢查編譯器假設,比如匯編指令的行蹤。為了節省調試時間,編程人員應該在第一次實現匯編函數時驗證是否遵循所有的編譯器約定和假設。

⑵ CEVA法國詩華是家什麼樣的公司

說到ceva,很多人想到的是一家國際物流公司。但是,如果你對養殖行業有一定的了解,就不會想到是國際物流公司了,CEVA,中文名:法國詩華,在養殖圈子裡真的很有名,屬於全球動物保健品行業前十大品牌之一,主要生產家禽、生豬、寵物等方面的疫苗及化葯製品

⑶ 如何將匯編語言與C語言整合至DSP

隨著DSP處理器性能的提升以及編譯器最佳化技術的進步,曾經紅極一時、僅用匯編語言編寫DSP應用程序的作法已逐漸被淘汰。今天,幾乎每個DSP應用程序都使用C語言程序代碼和匯編程序碼混合的方式。對於一些性能需求極高的關鍵功能,DSP工程師會繼續使用高度最佳化的匯編程序碼;而一些次要的功能現在也使用C語言編寫,使程序代碼更容易維護和移植。對於C語言和匯編程序碼的結合,每位DSP工程師都需要掌握特殊的工具和方法。 眾所皆知,匯編語言編碼具有更高的性能優勢,而用C語言編碼則較容易且速度也更快。為了解其中原因,以下我們進一步比較匯編語言編碼與C語言編碼的優缺點: 匯編語言編碼的優點: 匯編語言編碼可以充分利用處理器的獨特指令以及各種專門的硬體資源。而C語言程序代碼是通用型程序代碼,必須支持各種硬體平台,因此很難支持特殊平台程序代碼。 匯編程序設計人員通常對應用程序非常熟悉,可以作出編譯器無法作出的假設。 匯編程序設計人員可以發揮人類的創造性;而再先進的編譯器也只是一個自動化的程序。 匯編語言編碼的缺點: 匯編程序設計人員必須解決耗時的機器級問題,如緩存器分配和指令排程。若使用C語言程序代碼,這些問題可以由編譯器解決。 使用匯編語言編碼的程序設計人員必須了解DSP架構及其指令集的專業知識;而C語言編碼只需要掌握相當普及的C語言知識。 若使用匯編語言,將應用程序從一個平台移植到另一個平台非常困難也相當耗時;而C語言應用程序的移植相對而言非常容易。 圖1顯示了如何利用專用硬體機制來獲得高度最佳化的匯編程序碼。左邊的C語言編碼利用模塊演算法設計出一個循環緩沖區P1;右邊高度最佳化的匯編程序碼中,等效的緩沖區是利用CEVA-TeakLite-III DSP核心的模塊運算機制(Molo Mechanism)設計產生的。只要緩沖區指標(本例中的r0)有更新,模塊運算機制便會自動執行模塊運算。這種運算與指針更新在同一個周期發生,因此匯編程序碼比C語言程序代碼更加高效,可為模塊運算產生獨立的指令。 點擊看原圖圖1:右邊的CEVA-TeakLite-III匯編程序碼可以建置成左邊的C語言程序代碼。 為DSP應用選擇C/匯編程序碼 混合使用的問題就在於該如何劃分C語言程序代碼和匯編程序碼的界限,而答案取決於剖析器提供的性能分析結果。然而在使用剖析器之前,DSP工程師需要為應用程序定義清晰的對象,一些典型的對象包括循環數、程序代碼大小和數據大小。一旦這些對象確定後,所有應用程序都應該先以C語言編寫和製作,隨後使用剖析器來分析性能。 在一些極端情況下,如控制應用,用C語言層級的編碼就足夠了;但大多數情況下,原始C語言層級應用程序版本不會遵從一個或多個對象,這也意味著需要使用一些匯編程序碼來完成。在求助於匯編語言編碼之前,C語言編碼可提供許多方法來提高性能,但這些方法不屬於本文討論的范疇。假設所有C語言級的方法全用完了,並且准備使用匯編語言編碼,這時強烈建議將原始C語言程序代碼保存起來。這樣不僅方便除錯,而且一旦條件許可(比如轉移到更強大的平台)還可以回復原始的C語言。 程序代碼中的匯編語言部份應盡可能維持在最少,這樣便能分析從剖析器得到的性能結果,並定義應用程序中的關鍵函數。關鍵函數會佔用大部份執行時間,必須用匯編語言重寫才能滿足性能對象。當兩到三個最關鍵的函數重寫後,需要重新進行性能測量,若應用程序仍然不能滿足對象需求,那麼必須使用匯編語言定義並重寫額外的關鍵函數,這個過程需要不斷地重復直到滿足性能對象需求為止。 匯編語言設計師的編譯器考慮 在編寫會與C語言程序代碼結合的匯編程序碼時,匯編程序設計人員必須了解編譯器的慣例和假設。其中有個重要的編譯器慣例是函數呼叫慣例,也稱為函數參數傳遞慣例。這個慣例描述了編譯器如何在一個函數呼叫另一個函數時傳遞參數。為了使匯編語言函數能被C語言函數成功呼叫;反之亦然;匯編語言函數必須截取參數,然後將參數發送到由函數呼叫慣例定義的硬體資源上,通常為緩存器或堆棧內存。 匯編程序設計人員還必須了解編譯器的緩存器使用慣例。這些慣例將硬體緩存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)緩存器。編譯器假設被呼叫者保存緩存器在函數呼叫過程中保持不變的值,若匯編程序設計人員希望使用這種緩存器,他們必須先將緩存器的值備份,然後在返回到C語言程序代碼之前恢復這些緩存器的內容;相反的,被呼叫者使用緩存器被認為在函式呼叫過程中不會保持一定的值。這意味著匯編程序設計人員使用這些緩存器之前無需進行備份,不過他們必須記住,當匯編語言函數呼叫C語言函數時,被呼叫者可以對這些緩存器進行覆寫。 圖2為一個從CEVA-X1641 DSP核心FFT實作中截取的匯編程序碼案例。其中以黃色標示的add指令遵循CEVA-X1641編譯器的呼叫慣例,在r0地址緩存器中傳遞指針參數。標為藍色的pushd指令用於備份,隨後函數會使用的被呼叫者保存緩存器。

⑷ 如何將匯編語言與C語言整合至DSP

隨著DSP處理器性能的提升以及編譯器最佳化技術的進步,曾經紅極一時、僅用匯編語言編寫DSP應用程序的作法已逐漸被淘汰。今天,幾乎每個DSP應用程序都使用C語言程序代碼和匯編程序碼混合的方式。對於一些性能需求極高的關鍵功能,DSP工程師會繼續使用高度最佳化的匯編程序碼;而一些次要的功能現在也使用C語言編寫,使程序代碼更容易維護和移植。對於C語言和匯編程序碼的結合,每位DSP工程師都需要掌握特殊的工具和方法。 眾所皆知,匯編語言編碼具有更高的性能優勢,而用C語言編碼則較容易且速度也更快。為了解其中原因,以下我們進一步比較匯編語言編碼與C語言編碼的優缺點: 匯編語言編碼的優點: 匯編語言編碼可以充分利用處理器的獨特指令以及各種專門的硬體資源。而C語言程序代碼是通用型程序代碼,必須支持各種硬體平台,因此很難支持特殊平台程序代碼。 匯編程序設計人員通常對應用程序非常熟悉,可以作出編譯器無法作出的假設。 匯編程序設計人員可以發揮人類的創造性;而再先進的編譯器也只是一個自動化的程序。 匯編語言編碼的缺點: 匯編程序設計人員必須解決耗時的機器級問題,如緩存器分配和指令排程。若使用C語言程序代碼,這些問題可以由編譯器解決。 使用匯編語言編碼的程序設計人員必須了解DSP架構及其指令集的專業知識;而C語言編碼只需要掌握相當普及的C語言知識。 若使用匯編語言,將應用程序從一個平台移植到另一個平台非常困難也相當耗時;而C語言應用程序的移植相對而言非常容易。 圖1顯示了如何利用專用硬體機制來獲得高度最佳化的匯編程序碼。左邊的C語言編碼利用模塊演算法設計出一個循環緩沖區P1;右邊高度最佳化的匯編程序碼中,等效的緩沖區是利用CEVA-TeakLite-III DSP核心的模塊運算機制(Molo Mechanism)設計產生的。只要緩沖區指標(本例中的r0)有更新,模塊運算機制便會自動執行模塊運算。這種運算與指針更新在同一個周期發生,因此匯編程序碼比C語言程序代碼更加高效,可為模塊運算產生獨立的指令。 點擊看原圖圖1:右邊的CEVA-TeakLite-III匯編程序碼可以建置成左邊的C語言程序代碼。 為DSP應用選擇C/匯編程序碼 混合使用的問題就在於該如何劃分C語言程序代碼和匯編程序碼的界限,而答案取決於剖析器提供的性能分析結果。然而在使用剖析器之前,DSP工程師需要為應用程序定義清晰的對象,一些典型的對象包括循環數、程序代碼大小和數據大小。一旦這些對象確定後,所有應用程序都應該先以C語言編寫和製作,隨後使用剖析器來分析性能。 在一些極端情況下,如控制應用,用C語言層級的編碼就足夠了;但大多數情況下,原始C語言層級應用程序版本不會遵從一個或多個對象,這也意味著需要使用一些匯編程序碼來完成。在求助於匯編語言編碼之前,C語言編碼可提供許多方法來提高性能,但這些方法不屬於本文討論的范疇。假設所有C語言級的方法全用完了,並且准備使用匯編語言編碼,這時強烈建議將原始C語言程序代碼保存起來。這樣不僅方便除錯,而且一旦條件許可(比如轉移到更強大的平台)還可以回復原始的C語言。 程序代碼中的匯編語言部份應盡可能維持在最少,這樣便能分析從剖析器得到的性能結果,並定義應用程序中的關鍵函數。關鍵函數會佔用大部份執行時間,必須用匯編語言重寫才能滿足性能對象。當兩到三個最關鍵的函數重寫後,需要重新進行性能測量,若應用程序仍然不能滿足對象需求,那麼必須使用匯編語言定義並重寫額外的關鍵函數,這個過程需要不斷地重復直到滿足性能對象需求為止。 匯編語言設計師的編譯器考慮 在編寫會與C語言程序代碼結合的匯編程序碼時,匯編程序設計人員必須了解編譯器的慣例和假設。其中有個重要的編譯器慣例是函數呼叫慣例,也稱為函數參數傳遞慣例。這個慣例描述了編譯器如何在一個函數呼叫另一個函數時傳遞參數。為了使匯編語言函數能被C語言函數成功呼叫;反之亦然;匯編語言函數必須截取參數,然後將參數發送到由函數呼叫慣例定義的硬體資源上,通常為緩存器或堆棧內存。 匯編程序設計人員還必須了解編譯器的緩存器使用慣例。這些慣例將硬體緩存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)緩存器。編譯器假設被呼叫者保存緩存器在函數呼叫過程中保持不變的值,若匯編程序設計人員希望使用這種緩存器,他們必須先將緩存器的值備份,然後在返回到C語言程序代碼之前恢復這些緩存器的內容;相反的,被呼叫者使用緩存器被認為在函式呼叫過程中不會保持一定的值。這意味著匯編程序設計人員使用這些緩存器之前無需進行備份,不過他們必須記住,當匯編語言函數呼叫C語言函數時,被呼叫者可以對這些緩存器進行覆寫。 圖2為一個從CEVA-X1641 DSP核心FFT實作中截取的匯編程序碼案例。其中以黃色標示的add指令遵循CEVA-X1641編譯器的呼叫慣例,在r0地址緩存器中傳遞指針參數。標為藍色的pushd指令用於備份,隨後函數會使用的被呼叫者保存緩存器。

⑸ 三角形 ceva線 什麼是三角形的ceva線

ceva就是著名的塞瓦.ceva線就是塞瓦線
見圖,點擊放大:
BD比DC=三角BAD:三角CAD=三角BOD:三角COD=三角ABD:三角ACO
則:線段:AD.BE.CF稱塞瓦線,點O為塞瓦點

⑹ 已知AD是三角形ABC 的角平分線,求證AD2=AB*AC-BD*DC. 不要用三角函數,可以用Ceva定理或Menelaus定理

延長AD交△ABC的外接圓於E,連接EC,在△ABD和△AEC中,∠ABD=∠AEC,∠BAD=∠EAC,所以△ABD∽△AEC,AB/AE=AD/AC,或AE*AD=AB*AC;其中AE*AD=(AD+DE)AD
=AD²+DE*AD,而在外接圓中DE*AD=BD*DC,於是AD²+BD*DC=AB*AC,就是
AD²=AB*AC-BD*DC。

⑺ 求DSP的C6600的匯編, 改變成匯編

隨著DSP處理器性能的提升以及編譯器最佳化技術的進步,曾經紅極一時、僅用匯編語言編寫DSP應用程序的作法已逐漸被淘汰。今天,幾乎每個DSP應用程序都使用C語言程序代碼和匯編程序碼混合的方式。對於一些性能需求極高的關鍵功能,DSP工程師會繼續使用高度最佳化的匯編程序碼;而一些次要的功能現在也使用C語言編寫,使程序代碼更容易維護和移植。對於C語言和匯編程序碼的結合,每位DSP工程師都需要掌握特殊的工具和方法。眾所皆知,匯編語言編碼具有更高的性能優勢,而用C語言編碼則較容易且速度也更快。為了解其中原因,以下我們進一步比較匯編語言編碼與C語言編碼的優缺點:匯編語言編碼的優點:匯編語言編碼可以充分利用處理器的獨特指令以及各種專門的硬體資源。而C語言程序代碼是通用型程序代碼,必須支持各種硬體平台,因此很難支持特殊平台程序代碼。匯編程序設計人員通常對應用程序非常熟悉,可以作出編譯器無法作出的假設。匯編程序設計人員可以發揮人類的創造性;而再先進的編譯器也只是一個自動化的程序。匯編語言編碼的缺點:匯編程序設計人員必須解決耗時的機器級問題,如緩存器分配和指令排程。若使用C語言程序代碼,這些問題可以由編譯器解決。使用匯編語言編碼的程序設計人員必須了解DSP架構及其指令集的專業知識;而C語言編碼只需要掌握相當普及的C語言知識。若使用匯編語言,將應用程序從一個平台移植到另一個平台非常困難也相當耗時;而C語言應用程序的移植相對而言非常容易。圖1顯示了如何利用專用硬體機制來獲得高度最佳化的匯編程序碼。左邊的C語言編碼利用模塊演算法設計出一個循環緩沖區P1;右邊高度最佳化的匯編程序碼中,等效的緩沖區是利用CEVA-TeakLite-IIIDSP核心的模塊運算機制(MoloMechanism)設計產生的。只要緩沖區指標(本例中的r0)有更新,模塊運算機制便會自動執行模塊運算。這種運算與指針更新在同一個周期發生,因此匯編程序碼比C語言程序代碼更加高效,可為模塊運算產生獨立的指令。點擊看原圖圖1:右邊的CEVA-TeakLite-III匯編程序碼可以建置成左邊的C語言程序代碼。為DSP應用選擇C/匯編程序碼混合使用的問題就在於該如何劃分C語言程序代碼和匯編程序碼的界限,而答案取決於剖析器提供的性能分析結果。然而在使用剖析器之前,DSP工程師需要為應用程序定義清晰的對象,一些典型的對象包括循環數、程序代碼大小和數據大小。一旦這些對象確定後,所有應用程序都應該先以C語言編寫和製作,隨後使用剖析器來分析性能。在一些極端情況下,如控制應用,用C語言層級的編碼就足夠了;但大多數情況下,原始C語言層級應用程序版本不會遵從一個或多個對象,這也意味著需要使用一些匯編程序碼來完成。在求助於匯編語言編碼之前,C語言編碼可提供許多方法來提高性能,但這些方法不屬於本文討論的范疇。假設所有C語言級的方法全用完了,並且准備使用匯編語言編碼,這時強烈建議將原始C語言程序代碼保存起來。這樣不僅方便除錯,而且一旦條件許可(比如轉移到更強大的平台)還可以回復原始的C語言。程序代碼中的匯編語言部份應盡可能維持在最少,這樣便能分析從剖析器得到的性能結果,並定義應用程序中的關鍵函數。關鍵函數會佔用大部份執行時間,必須用匯編語言重寫才能滿足性能對象。當兩到三個最關鍵的函數重寫後,需要重新進行性能測量,若應用程序仍然不能滿足對象需求,那麼必須使用匯編語言定義並重寫額外的關鍵函數,這個過程需要不斷地重復直到滿足性能對象需求為止。匯編語言設計師的編譯器考慮在編寫會與C語言程序代碼結合的匯編程序碼時,匯編程序設計人員必須了解編譯器的慣例和假設。其中有個重要的編譯器慣例是函數呼叫慣例,也稱為函數參數傳遞慣例。這個慣例描述了編譯器如何在一個函數呼叫另一個函數時傳遞參數。為了使匯編語言函數能被C語言函數成功呼叫;反之亦然;匯編語言函數必須截取參數,然後將參數發送到由函數呼叫慣例定義的硬體資源上,通常為緩存器或堆棧內存。匯編程序設計人員還必須了解編譯器的緩存器使用慣例。這些慣例將硬體緩存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)緩存器。編譯器假設被呼叫者保存緩存器在函數呼叫過程中保持不變的值,若匯編程序設計人員希望使用這種緩存器,他們必須先將緩存器的值備份,然後在返回到C語言程序代碼之前恢復這些緩存器的內容;相反的,被呼叫者使用緩存器被認為在函式呼叫過程中不會保持一定的值。這意味著匯編程序設計人員使用這些緩存器之前無需進行備份,不過他們必須記住,當匯編語言函數呼叫C語言函數時,被呼叫者可以對這些緩存器進行覆寫。圖2為一個從CEVA-X1641DSP核心FFT實作中截取的匯編程序碼案例。其中以黃色標示的add指令遵循CEVA-X1641編譯器的呼叫慣例,在r0地址緩存器中傳遞指針參數。標為藍色的pushd指令用於備份,隨後函數會使用的被呼叫者保存緩存器。

熱點內容
共享雲源碼 發布:2024-09-08 10:01:10 瀏覽:395
ios應用上傳 發布:2024-09-08 09:39:41 瀏覽:439
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:873
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:780
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566