Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread 笔记 - 熟悉$Sub$$main与$Super$$main
发布于 2021-09-30 21:35:17 浏览:1614
订阅该版
[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` - 截图如下:  - 这篇文章介绍,`$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
回答
813
被采纳
177
关注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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部