新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > TMS320C6000嵌入式系統優化編程的研究

        TMS320C6000嵌入式系統優化編程的研究

        作者: 時間:2009-03-19 來源:網絡 收藏

          這時可以考慮使用線性匯編語言進行開發。線性匯編語言是中獨有的一種語言,介于高級語言和低級語言之間。因為在用手寫匯編語言進行應用開發時,開發者除了要精通C6000的指令之外,還必須為指令分配功能單元、考慮指令的延遲和功能單元之間的配合以及合理分配使用32個寄存器,才能寫出高效的并行指令,發揮C6000的威力。上面任何一個方面出現問題,都會嚴重影響算法的效率。

          線性匯編語言的指令和匯編語言的指令完全相同,但是它有自己的匯編器指令系統,用于和匯編器配合使用。與匯編語言的最大區別在于,編寫線性匯編語言時不需要考慮指令的延時、寄存器的使用和功能單元的分配,完全可以按照高級語言的方式進行編寫。當然由于它不是高級語言,有許多的限制。例如,在循環體時,不能使用跳轉到循環體之外的跳轉指令;另外計數器只能使用減計數,如果使用加計數,優化器將不能工作等等。但總的說來,它的代碼效率遠遠高于高級語言,而且開發難度和開發周期比匯編語言要小得多。

          在實際開發過程中需要具體情況具體分析,選擇一種高效、快捷的開發方法。以下結合應用開發中的幾個模塊來簡述我們使用的優化方法。

        2.1 使用匯編語言

          使用匯編語言進行并行難度比較大。但在有些情況下,程序中數據有非常強的承接關系,并且該程序體邏輯關系清楚,使用的寄存器不超過32個,這時直接使用匯編語言實現,效率會更高。另外,有些使用C語言比較難實現的運算函數,在C6000的匯編指令集中可能有專用指令,這時就可以直接使用匯編語言實現。

          使用匯編語言進行編程時特別需要注意的是C6000指令的延遲情況,有些指令并不是立刻就能得到結果。C6000指令集中有延遲的指令如表1所示。

        例1 32位歸一化函數norm_l()

          short norm_l(long L_var1)

           {short var_out;

           if (L_var1 == 0L) {

           var_out = (short)0;

           }

          else {

             if (L_var1 == (long)0xffffffffL) {

        var_out = (short)31;

        }

        else {

        if (L_var1 0L) {

        L_var1 = *L_var1;

        }

        for(var_out=(short)0;L_var1(long)0x40000000L;

        var_out++) {

        L_var1 = 1L;

        }}}

        return(var_out);

        }

        使用匯編語言進行優化:

        .global _norm_l

        _norm_l:

        B B3

        CMPEQ 0,A4,B0

        [!B0] NORM A4,A4

        NOP 3

          消耗時間(時鐘周期):C語言norm_l()為723;匯編語言為11。

        2.2 使用線性匯編語言重寫整個函數

          對于某些以循環體為主的函數可以使用線性匯編語言重寫整個函數。使用匯編優化器進行優化之后,效率是非常高的。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 申扎县| 哈巴河县| 平塘县| 嘉善县| 呼和浩特市| 桦川县| 塔河县| 丹棱县| 青铜峡市| 吉林市| 铁岭市| 庄河市| 苍山县| 远安县| 武冈市| 三明市| 射阳县| 天祝| 陕西省| 衡阳市| 齐齐哈尔市| 阳曲县| 辛集市| 册亨县| 西平县| 彰化县| 疏勒县| 顺昌县| 平安县| 泰州市| 古蔺县| 博客| 祁门县| 古丈县| 开阳县| 白河县| 察哈| 临泽县| 同仁县| 华蓥市| 双牌县|