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