zoukankan      html  css  js  c++  java
  • 在 __CC_ARM 编译器环境下,使用$Sub$$ 与 $Super$$ 的“补丁”功能

    $Sub$$ 与 $Super$$ 的“补丁”功能(详见 ARM® Compiler v5.06 for µVision® armlink User Guide):

    这是一种特殊模式:用于有一个已经存在且不能被改变的函数的情况(比如不能更改的库函数);使用这两个模式可以帮原函数打补丁,如存在一个函数foo();

    $Sub$ $foo :定义的新功能函数,在foo()函数之前/后使用$Sub$ $foo 可以添加一些新的程序代码。

    $Super$ $foo :就是原始的未修补的foo函数,使用这个$Super$ $foo函数将直接跳转到foo()函数。

    下面以stm32f10xxx的int main(void)函数为例:

    (1)  上电后,运行启动代码startup_stm32f10xxx.s

    (2)  从系统初始化(SystemInit)开始执行,将函数地址赋给R0寄存器,跳转到R0地址执行并返回此处。

    (3)  将__main函数地址给R0,将函数地址赋给R0,跳转到R0地址执行,不返回。

     

    (4)  跳转到$Sub$$main(自己定义该函数)。

    #if defined (__CC_ARM)
         extern int $Super$$main(void);
      /* re-define main function */
      int $Sub$$main(void)
      {
        preWork() ;      // do somthing before call main

           $Super$$main();      //  跳转到 main() 
        return 0;
      }

    #endif

  • 相关阅读:
    模板实参推断
    Koa2介绍及环境搭建
    nodejs之http.request
    nodejs请求json数据
    nodejs之url模块
    Nodejs之querystring 查询字符串
    将导航条设置成透明的
    10.12.1 安装cocoapods及使用详解
    UIViewAnimation动画
    iPhone屏幕尺寸、分辨率及适配
  • 原文地址:https://www.cnblogs.com/raswin/p/10031117.html
Copyright © 2011-2022 走看看