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

  • 相关阅读:
    闭包函数 (字符编码,文件处理,函数基础总结)
    函数参数详解
    文件处理及函数基础
    文件处理高级
    面向对象----反射
    正则表达式与re模块
    常用模块
    模块和包
    内置函数与匿名函数
    HDU
  • 原文地址:https://www.cnblogs.com/raswin/p/10031117.html
Copyright © 2011-2022 走看看