新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430 單片機C語言和匯編語言混合編程

        MSP430 單片機C語言和匯編語言混合編程

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

        是一款16位的,它具有超低功耗、豐富的片內外圍模塊、多樣的可選型號、軟件對硬件的靈活控制能力等優點。因此特別適合于以電池為電源的應用場合或手持設備,目前在國內主要應用于三表系統和消防設備方面。的開發軟件較常用的是IAR公司的IAR Embedded Workbench集成開發環境,它可以編輯、匯編和編譯和C源文件,并且其C具有相同格式的頭文件,給開發帶來了靈活性。C 語言具有簡單,可以移植等優點,但是產生代碼較長,對硬件的直接控制能力相對較弱;產生的代碼較小,控制硬件靈活,但是可讀性差,移植困難,因此為了發揮各自優點,產生高速度、高效率的代碼是最好的選擇。

        本文引用地址:http://www.104case.com/article/171849.htm

        1 IAR C語言編譯器的參數傳遞規則

        1.1 寄存器應用

        C語言編譯器把的寄存器分成兩組來使用:

        (1)高速暫存器(R12-R15),這組寄存器專門用作參數傳遞,因此調用時不需要保護。

        (2)其它普通寄存器(R4-R11),這組寄存器主要用作寄存器變量和保存中間結果,因此調用時必需保護,這一點C語言編譯器是自動處理的。

        1.2 堆棧結構和參數傳遞

        每一次函數調用會創建一個如圖所示的堆棧結構

        33.gif

        一個調用者函數傳遞給被調用函數的參數按照從右到左的順序傳遞的,換句話說就是除了最左邊的兩個參數用寄存器傳遞外,其余參數用堆棧傳遞,并按從右到左的順序入棧。若最左邊的兩個參數屬于結構或聯合類型,那么它們也用堆棧傳遞。函數的返回結果根據其類型存放在R12或R13:R12寄存器對,若返回結果屬于結構或聯合類型,那么R12中存放的是指向返回結果的指針。

        1.3 中斷函數

        C語言編譯器編譯中斷函數時會自動保護所有用到的寄存器(包括R12-R15在內),狀態寄存器SR的保護是中斷處理過程自動完成的。中斷函數中用到的任何寄存器都會用PUSH Rxx指令保護,中斷服務結束用后POP Rxx指令恢復;RETI指令會自動恢復狀態寄存器SR和從中斷返回。

        2 對匯編語言函數的約定

        一個能被C語言函數調用的匯編語言函數必須做到以下幾點:
        (1)符合C語言編譯器的參數傳遞規則。
        (2)具有PUBLIC入口標號。
        (3)對C語言調用者函數聲明為外部函數,并且允許參數類型檢查和提升(可選)。

        2.1 局部存儲分配

        如果匯編語言函數需要局部存儲空間,有兩種分配方法:
        (1)分配在硬件堆棧
        (2)分配在靜態空間,但是函數不能重入。

        2.2 中斷函數

        因為中斷可能發生在程序執行的任何期間,所以調用約定并不適用于中斷函數。因此必需注意以下幾點:
        (1)必須保護所有用到的寄存器。
        (2)必須用RETI返回。
        (3)把SR中各標志位當做未定義來使用。
        (4)中斷向量定義在INTVEC段

        c語言相關文章:c語言教程



        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 巩留县| 化德县| 临邑县| 博乐市| 巴彦淖尔市| 遂宁市| 阿拉善右旗| 铁力市| 松桃| 上饶市| 长沙县| 永仁县| 广南县| 平果县| 浪卡子县| 沙河市| 大庆市| 搜索| 克山县| 德惠市| 柏乡县| 易门县| 桐柏县| 南阳市| 巴林右旗| 塘沽区| 陇南市| 汕头市| 安溪县| 香河县| 湘乡市| 基隆市| 南川市| 黑龙江省| 汉中市| 中西区| 沛县| 瑞昌市| 五峰| 新闻| 朝阳县|