zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    前端 JavaScript&Dom
    前端 css续
    前端 初级篇(CSS)
    前端 初级篇(HTML)
    堡垒机
    Python操作RabbitMQ
    常用到代码片段
    关于文件上传功能的思考
    JS正则表达式将url转成json格式
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
  • 原文地址:https://www.cnblogs.com/NickQ/p/11344029.html
Copyright © 2011-2022 走看看