$Sub$$ 与 $Super$$ 的“补丁”功能(_CC_ARM编译器环境)

$Sub$$ 与 $Super$$ 的“补丁”功能

—CC_ARM编译器环境下

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

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

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

S u p e r Super Super f o o : 就 是 原 始 的 未 修 补 的 f o o 函 数 , 使 用 这 个 foo :就是原始的未修补的foo函数,使用这个 foofoo使Super$ $foo函数将直接跳转到foo()函数。

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

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

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

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

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

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

S u p e r Super Super$main();   // 跳转到 main()
    return 0;
  }

#endif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值