<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 混合使用C、C++和匯編語之: C、C++ 和 ARM 匯編語言之間的調(diào)用

          混合使用C、C++和匯編語之: C、C++ 和 ARM 匯編語言之間的調(diào)用

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

          本文引用地址:http://www.ex-cimer.com/article/257031.htm

          (6)從++程序

          下面的代碼顯示了如何從++程序。

          下面是被++程序。

          structS{//本結(jié)構(gòu)沒有基類和虛擬函數(shù)

          S(ints):i(s){}

          inti;

          };

          externCvoidcppfunc(S*p){

          //定義被調(diào)用的功能

          //功能函數(shù)體

          p->i+=5;

          }

          語言中,聲明要調(diào)用的功能,使用帶連接的跳轉(zhuǎn)指令調(diào)用功能。

          AREAAsm,CODE

          IMPORTcppfunc ;聲明被調(diào)用的C++函數(shù)名

          EXPORTf

          f

          STMFDsp!,{lr}

          MOVr0,#2

          STRr0,[sp,#-4]! ;初始化結(jié)構(gòu)體

          MOVr0,sp ;調(diào)用參數(shù)為指向結(jié)構(gòu)體的指針

          BLcppfunc ;調(diào)用C++功能'cppfunc'

          LDRr0,[sp],#4

          ADDr0,r0,r0,LSL#1

          LDMFDsp!,{pc}

          END

          (7)在C和C++函數(shù)間傳遞參數(shù)

          下面的例子顯示了如何在C和C++函數(shù)間傳遞參數(shù)。

          下面的代碼為C++函數(shù)。

          externCintcfunc(constint);

          //聲明被調(diào)用的C函數(shù)

          externCintcppfunc(constintr){

          //定義將被C調(diào)用的C++函數(shù)

          return7*r;

          }

          intf(){

          inti=3;

          returncfunc(i); //相C函數(shù)傳參

          }

          下面為C函數(shù)。

          externintcppfunc(constint*);

          /*聲明將被調(diào)用的C++函數(shù)*/

          intcfunc(constint*p){

          /*定義被C++調(diào)用的C函數(shù)*/

          intk=*p+4;

          returncppfunc(k);

          }

          (8)從C或匯編語言調(diào)用C++

          下面的例子綜合顯示了如何從C或匯編語言中調(diào)用非靜態(tài)、非虛的C++成員函數(shù)。可以使用編譯器編譯出的匯編程序查找已延伸的函數(shù)名。

          下面是被調(diào)用的C++成員函數(shù)。

          structT{

          T(inti):t(i){}

          intt;

          intf(inti);

          };

          intT::f(inti){returni+t;}

          //定義將被C調(diào)用的C++功能函數(shù)

          externCintcfunc(T*);

          //聲明將被C++調(diào)用的C函數(shù)

          intf(){

          Tt(5);//createanobjectoftypeT

          returncfunc(t);

          }

          下面為調(diào)用C++的C語言函數(shù)。

          structT;

          externint_ZN1T1fEi(structT*,int);

          /*被調(diào)用的C++函數(shù)名*/

          intcfunc(structT*t){

          /*定義被C++調(diào)用的C函數(shù)*/

          return3*_ZN1T1fEi(t,2);/*實(shí)現(xiàn)3乘以t->f(2)功能*/

          }

          下面為調(diào)用C++的匯編函數(shù)。

          EXPORTcfunc

          AREAfoo,CODE

          IMPORT_ZN1T1fEi

          cfunc

          STMFDsp!,{lr} ;此時(shí)r0已經(jīng)包含了指向?qū)ο蟮闹羔?/p>

          MOVr1,#2

          BL_ZN1T1fEi

          ADDr0,r0,r0,LSL#1 ;r0乘以3

          LDMFDsp!,{pc}

          END

          下面的例子顯示了如何用嵌入式匯編語言實(shí)現(xiàn)上面的例子。在此例中,使用__cpp關(guān)鍵字引用該函數(shù)。因此,用戶不必了解已延伸的函數(shù)名。

          structT{

          T(inti):t(i){}

          intt;

          intf(inti);

          };

          intT::f(inti){returni+t;}

          //定義被C++調(diào)用的匯編功能

          __asmintasm_func(T*){

          STMFDsp!,{lr}

          MOVr1,#2;

          BL__cpp(T::f);

          ADDr0,r0,r0,LSL#1;r0乘以3

          LDMFDsp!,{pc}

          }

          intf(){

          Tt(5);//創(chuàng)建T類型的對(duì)象

          returnasm_func(t);

          }

          聯(lián)系方

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



          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();