欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RTThread中的启动分析

程序员文章站 2022-06-09 08:30:32
...

RTThread中的启动分析—$Sub$$main()和$Super$$main()

@(RTThread源码学习)

main入口的重新定义$Super$$main()和$Sub$$main()

  • RTThread中的启动分析
这是一种特殊模式:用于有一个已经存在且不能被改变的函数 的情况。使用这两个模式可以帮原函数打补丁。如存在一个函数foo();
$Sub$$foo() :定义的新功能函数,原先foo()函数的入口变为$Sub$$foo(),可以在此函数添加一些新的程序代码。
$Super$$foo() :就是原始的未修补的foo函数,使用这个$Super$$foo函数将直接跳转到foo()函数。
以下例子:
extern  void $Super$$hellow(void);
void hellow(void)
{
    printf("hellow\n");
}
void $Sub$$hellow(void)
{
    printf("Sub hellow first\n");
    $Super$$hellow();
    printf("Sub hellow second\n");
}
void main()
{
    $Sub$$hellow();
}   
打印结果
Sub hellow first
hellow
Sub hellow second

  • 以上使用的好处是可以系统启动后,跳转到系统编写的$Sub$$main()中,在这里做一些系统启动是的初始化等,使得移植和使用更加方便。

启动过程

  • RTThread中的启动分析这里进入main
  • RTThread中的启动分析跳转到$Sub$$main()
  • RTThread中的启动分析跳转到rtthread_startup()
  • RTThread中的启动分析
  • RTThread中的启动分析调用$Super$$main()相当于调用main()