ARMCC中的特殊修补符号Super和Sub
前言
偶然在RTthread代码中发现,特殊的修补符号$Super$$
和 $Sub$$
,他的作用很强大,介绍一下。
实例代码
如下代码:
extern int $Super$$main(void);
/* re-define main function */
int $Sub$$main(void)
{
rt_hw_interrupt_disable();
rtthread_startup();
return 0;
}
如上代码中,用符号 $Super$$
和 $Sub$$
修饰了原函数main()
;为原来不能修改的main()
函数打了补丁,作用是在调用原来的main()
函数前,先调用自己定义的$Sub$$main()
函数。
说明
在符号定义无法被修改的情况下,你可以用种特殊符号 $Super$$
和 $Sub$$
去为该符号定义打补丁。
例如,如果它位于外部库或ROM代码中。 在这种情况下,您可以使用 $Super$$
和 $Sub$$
模式来修补现有符号,修补函数的定义。
看下官方举的例子
foo():
$Super$$foo
标识原始未修补的函数foo(),用它来直接调用原始函数。
$Sub$$foo
标识调用的新函数而不是原始函数foo(),使用此选项可在原始函数之前或之后添加处理。
-----Note-----
$Sub$$
和$Super$$
机制仅适用于静态链接时,$Super$$
引用无法导入或导出到动态符号表中。
详见参考手册:
ARM® Compiler v5.06 for µVision® Version 5 armlink User Guide
作者:NickQ
出处:http://www.cnblogs.com/NickQ/
版权声明:
本文版权归原创作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。