RTThread中的启动分析
程序员文章站
2022-06-09 08:30:32
...
RTThread中的启动分析—$Sub$$main()和$Super$$main()
@(RTThread源码学习)
main入口的重新定义$Super$$main()和$Sub$$main()
这是一种特殊模式:用于有一个已经存在且不能被改变的函数 的情况。使用这两个模式可以帮原函数打补丁。如存在一个函数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()
中,在这里做一些系统启动是的初始化等,使得移植和使用更加方便。
启动过程
- 这里进入main
-
跳转到
$Sub$$main()
- 跳转到rtthread_startup()
-
调用
$Super$$main()相当于调用main()
推荐阅读
-
Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini及服务无法启动的快速解决办法(问题小结)
-
深入分析iOS应用中对于图片缓存的管理和使用
-
Android学习之Intent中显示意图和隐式意图的用法实例分析
-
Python中列表元素转为数字的方法分析
-
SQL语句练习实例之五 WMS系统中的关于LIFO或FIFO的问题分析
-
Sqlserver中char,nchar,varchar与Nvarchar的区别分析
-
Android颜色编辑器的制作中遇到的问题分析
-
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
-
SQL查询中in和exists的区别分析
-
C#中new的用法及与override的区别分析