真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

RT-Thread中$Sub$$main與$Super$$main擴展main函數(shù)的示例分析

RT-Thread中$Sub$main與$Super$main擴展main函數(shù)的示例分析,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計制作、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元安多做網(wǎng)站,已為上家服務(wù),為安多各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108

MDK5的__main函數(shù)是自動生成的,且無法修改源碼。同時,MDK5提供了一對符號$Sub$$和$Super$$來擴展函數(shù)。這一對符號作用在連接器,當(dāng)連接器連接到func時,如果發(fā)現(xiàn)存在$Sub$$func函數(shù),會先連接$Sub$$func函數(shù),一直到出現(xiàn)$Super$$func為止,$Super$$func是func函數(shù)的新的入口。

Keil官網(wǎng)給的例子:

extern void ExtraFunc(void); extern void $Super$$foo(void):
/* this function is called instead of the original foo() */
void $Sub$$foo(void)
{
  ExtraFunc();    /* does some extra setup work */
  $Super$$foo();  /* calls the original foo() function */
                  /* To avoid calling the original foo() function
                   * omit the $Super$$foo(); function call.
                   */
}

$Sub$$和$Super$$符號可以在不修改原程序的情況下添加新功能,rtt就使用了這對符號來擴展main函數(shù)。

做一個簡單的例子來測試一下這種擴展:

int i = 0;

void $Super$$main(void);
void $Sub$$main(void)
{
    i++;
    $Super$$main();
}

int main(void)
{
    i++;
    while(1)
    {
        
    }
}

看反匯編(assembly mode),原來跳轉(zhuǎn)到main函數(shù)變成了跳轉(zhuǎn)到$Sub$$main函數(shù):

                 __rt_entry_main:
0x08000172 F000F867  BL.W     $Sub$$main (0x08000244)
0x08000176 F000F84F  BL.W     exit (0x08000218)

 $Sub$$main函數(shù):

                 $Sub$$main:
0x08000244 B510      PUSH     {r4,lr}
0x08000246 4804      LDR      r0,[pc,#16]  ; @0x08000258
0x08000248 6800      LDR      r0,[r0,#0x00]
0x0800024A 1C40      ADDS     r0,r0,#1
0x0800024C 4902      LDR      r1,[pc,#8]  ; @0x08000258
0x0800024E 6008      STR      r0,[r1,#0x00]
0x08000250 F000F8A8  BL.W     main (0x080003A4)
0x08000254 BD10      POP      {r4,pc}
0x08000256 0000      DCW      0x0000
0x08000258 0000      DCW      0x0000
0x0800025A 2000      DCW      0x2000

RT-Thread中$Sub$$main與$Super$$main擴展main函數(shù)的示例分析

這樣做,可以保持啟動代碼不變,而同時實現(xiàn)對main函數(shù)的擴展。rtt的調(diào)度器就是這樣做的。

看完上述內(nèi)容,你們掌握RT-Thread中$Sub$main與$Super$main擴展main函數(shù)的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


文章名稱:RT-Thread中$Sub$$main與$Super$$main擴展main函數(shù)的示例分析
網(wǎng)頁URL:http://weahome.cn/article/ggcpod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部