在Arm Compiler for Embedded Reference Guide
中有介绍,$Super$$ and $Sub$$
是Armlink提供的wrapper symbol
,可以使用它们在不修改原symbol
定义的情况下,扩展(patch
)原symbol
的功能。
可能适用的场景:
- 函数定义在库中。
- 函数固化在ROM中。
用法示例:
已有函数foo()
,如果需要在不修改foo()
的前提下,在foo()
前插入新的执行代码ExtraFunc()
,则可借助$Super$$ and $Sub$$
来实现:
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.
*/
}