在KEIL-MDK中使用 $ Super $ $ 和 $ Sub $ $ 打補丁

問題描述

某個工程中使用了一個庫,庫中包含很多個函數,其中有一個函數是

void foo(void);

現在,在新的工程中,需要對foo函數的邏輯功能進行修改。

由於foo函數是在庫裏面,直接修改foo函數的代碼是不現實的。

重新定義一個函數foo2並實現它,也是行不通的。因爲庫裏面很多地方都調用了foo(),不可能讓這些地方重新調用foo2()。

怎麼辦?

打補丁!

 

解決措施

 

使用以下代碼,可以替換 foo() 函數:

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.
    */
}

$Supper$$foo 指代原來的函數foo(); $Sub$$foo 是用來替換的新函數,則鏈接器鏈接此函數取代原來的foo()函數。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章