在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Thumb指令集之: ARM和Thumb的混合編程

            Thumb指令集之: ARM和Thumb的混合編程

            作者: 時(shí)間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/257035.htm

            (2)C語言的互交實(shí)例

            下面的例子顯示了一個Thumb狀態(tài)下的代碼通過互交調(diào)用子程序;而后又在子程序中調(diào)用的庫函數(shù)printf()。

            /*********************

            *thumbmain.c*

            **********************/

            #includestdio.h>

            externvoidarm_function(void);

            intmain(void)

            {

            printf(HellofromThumbWorldn);

            arm_function();

            printf(AndgoodbyefromThumbWorldn);

            return(0);

            }

            /*********************

            *armsub.c*

            **********************/

            #includestdio.h>

            voidarm_function(void)

            {

            printf(HelloandGoodbyefromworldn);

            }

            使用下面的命令對程序進(jìn)行編譯連接。

            ①編譯生成帶互交的Thumb代碼。

            armcc--thumb-c-g--apcs/interwork-othumbmain.othumbmain.c

            ②編譯生成帶互交的ARM代碼。

            armcc-c-g--apcs/interwork-oarmsub.oarmsub.c

            ③連接目標(biāo)文件。

            armlinkthumbmain.oarmsub.o-othumbtoarm.axf

            另外,可以使用--info選項(xiàng)使連接器輸出由于互交所增加的代碼大小。

            armlinkarmsub.othumbmain.o-othumbtoarm.axf--infoveneers

            輸出信息如下所示。

            Addingstotheimage

            AddingTAveneer(4bytes,Inline)forcallto'arm_function'fromthumbmain.o(.text).

            AddingATveneer(8bytes,Inline)forcallto'__0printf'fromarmsub.o(.text).

            AddingATveneer(8bytes,Inline)forcallto'__rt_lib_init'fromkernel.o(.text).

            AddingATveneer(12bytes,Long)forcallto'__rt_lib_shutdown'fromkernel.o(.text).

            AddingTAveneer(4bytes,Inline)forcallto'__rt_memclr_w'fromstdio.o(.text).

            AddingTAveneer(4bytes,Inline)forcallto'__rt_raise'fromstdio.o(.text).

            AddingTAveneer(8bytes,Short)forcallto'__rt_exit'fromexit.o(.text).

            AddingTAveneer(4bytes,Inline)forcallto'__user_libspace'fromfree.o(.text).

            AddingTAveneer(4bytes,Inline)forcallto'_fp_init'fromlib_init.o(.text).

            AddingTAveneer(4bytes,Inline)forcallto'__heap_extend'frommalloc.o(.text).

            AddingATveneer(8bytes,Inline)forcallto'__raise'fromrt_raise.o(.text).

            AddingTAveneer(4bytes,Inline)forcallto'__rt_errno_addr'fromftell.o(.text).

            12(s)(total72bytes)addedtotheimage.

            (3)Thumb狀態(tài)下的功能指針

            任何指向Thumb函數(shù)(由Thumb指令完成的功能函數(shù)并且其返回狀態(tài)也為Thumb狀態(tài))的指針,其最低有效位(LSB)必為1。

            當(dāng)重定位Thumb代碼中的地址標(biāo)號時(shí),連接器將自動設(shè)置地址的最低有效位。如果在程序中使用絕對地址,連接器將無法完成該設(shè)置。因此,如果在Thumb代碼中使用絕對地址時(shí),必須手工設(shè)置為其地址加1。

            下面的例子顯示了Thumb代碼的功能指針的使用。

            typedefint(*FN)();

            myfunc(){

            FNfnptrs[]={

            (FN)(0x8084+1), //有效的Thumb地址

            (FN)(0x8074) //無效的Thumb地址

            };

            FN*myfunctions=fnptrs;

            myfunctions[0](); //調(diào)用成功

            myfunctions[1](); //調(diào)用失敗

            }

            c++相關(guān)文章:c++教程



            上一頁 1 2 3 4 5 6 下一頁

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉