Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread 笔记 - 熟悉$Sub$$main与$Super$$main
发布于 2021-09-30 21:35:17 浏览:1538
订阅该版
[tocm] [RT-Thread 入门学习笔记 - 目录](https://club.rt-thread.org/ask/article/3420.html) ## 前言 - 学习RT-Thread内核,需要了解内核是怎么工作的,main函数的位置 - 如基于STM32的RT-Thread,ST会提供STM32的启动文件,启动文件调用执行:`__main` - RT-Thread没有定义`__main`,而是使用:`$Sub$$main`作为入口 - 那我们的`main`函数如何去调用?使用`$Sub$$main` ## 理一下头绪 - `$Sub$$main` 与`$Super$$main`的作用是什么?这个是Keil MDK的特殊处理,还是ARM 处理器的特殊处理? - 参考如下的文章的介绍: `https://developer.arm.com/documentation/100748/0616/Embedded-Software-Development/Hardware-initialization?lang=en` - 截图如下: ![2021-09-30_202009.png](https://oss-club.rt-thread.org/uploads/20210930/2f80e4296427e2cbb8c628152ef488e4.png.webp) - 这篇文章介绍,`$Sub$$main` 是在main函数之前,做一些事情,如初始化,等于不改变`main`函数的情况下,在`main`函数之前处理一些事情,也就是:`main`函数之前扩展一些功能。 - `$Super$$main`是调用真正的`main`函数。 ```c The linker replaces the function call to main() with a call to $Sub$$main(). From there you can call a routine that enables caches and another to enable interrupts. 【这种情况下,链接器调用$Sub$$main(),而不是main。】 The code branches to the real main() by calling $Super$$main(). 【通过调用$Super$$main(),去执行真实的main。】 ``` - 也就是说,如果定义了`$Sub$$main()`,就会执行`$Sub$$main()`。想要执行真正的`main()`,还要调用:`$Super$$main()` ## 小练习 - 使用`$Sub`,定义一个普通的函数,如`$Sub$$test_01()`,再执行:`$Super$$test_01()` ```c #include
void test_01(void) { rt_kprintf("%s: ok!!\n", __func__); } /* 注意: $Super$$test_01 就是执行 test_01*/ extern void $Super$$test_01(void); void $Sub$$test_01(void) { rt_kprintf("sub function enter!!\n"); $Super$$test_01(); rt_kprintf("sub function exit!!\n!!"); } void sub_func(void) { $Sub$$test_01(); } MSH_CMD_EXPORT(sub_func, sub_func); ``` - 执行结果 ```c msh >sub_func sub function enter!! test_01: ok!! sub function exit!! ``` - 发现调用 `$Sub$$test_01()`后,再调用:`$Super$$test_01();`,就可以调用:`test_01`了,等于在`test_01`之前,做了一点事情。 ## 小结 - 了解 `$Sub` 与 `$Super`的作用 - 了解 `$Sub$$main 与$Super$$main`
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
张世争
学以致用
文章
131
回答
809
被采纳
175
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部