查看: 679|回复: 2

[原创] 【申请LPC55S69,移植 RT-Thread大作战】Ch3:RT-Thread启动流程...

[复制链接]
  • TA的每日心情
    开心
    2024-3-23 22:59
  • 签到天数: 74 天

    [LV.6]常住居民II

    3

    主题

    170

    帖子

    0

    高级会员

    Rank: 4

    积分
    595
    最后登录
    2024-4-16
    发表于 2023-3-9 23:41:48 | 显示全部楼层 |阅读模式
    本帖最后由 slmxiaodai 于 2023-3-9 23:41 编辑

    3 RT-Thread启动流程剖析
    在使用rt-thread-master提供的lpc55s69_nxp _evk工程时,发现其结构跟我原来移植RT-Thread系统有些区别,我原来是将RT-Thread系统源码移植到工程后,直接在main()函数中调用rtthread_startup()来启动rt-thread系统。而示例工程为了在执行main()函数之前完成对RT-Thread系统的初始化,使用了 MDK 的扩展功能 $Sub$$ 和 $Super$$。

    1. 关于$Super$$和$Sub$$ 的用法
       MDK的help文件描述如下:
    (1)$Super$$foo :指向原始的未修补的foo函数,使用$Super$$foo函数将直接跳转到原始foo()函数。
    (2)$Sub$$foo :指向替换原始foo函数的新的函数,使用$Sub$$foo可以在原始foo函数之前/后添加程序代码。
    $Sub$$main 可以先调用一些要补充在 main 之前的功能函数(这里添加 RT-Thread 系统启动,进行系统一系列初始化),再调用$Super$$main转到 main() 函数执行,这样可以让用户不用去管 main() 之前的系统初始化操作。
    1-1.jpg
    components.c文件中
    1-2.jpg ,启动RT-Thread。
    通俗理解:在main(void)函数之前先执行$Sub$$main(void)函数。

    $Super$$main(void)执行真正的main(void)函数
    1-3.jpg
    注意:
    (1)void $Sub$$main(void)和intmain(void)可以不放在同一个C文件中,就算放在同一文件中也没有先后顺序之分;
    (2)extern int $Super$$main(); /* for ARMCC. */必须要有,且位于$Super$$main();调用之前,可以放在$Sub$$main(void)函数内,也可以放在函数外;
    (3)$Super$$与$Sub$$基本是要成对使用;
    (4)需要特定编译器才支持该符号,比如MDK;
    (5)$Super$$与$Sub$$不只用于main()函数,也可以用于其他函数;
    (6)$Super$$Fun();函数之后还可以写代码且能够被执行,此处相当于整体把Fun()函数替换进来,执行完Fun()后接着往下执行,相当于$Sub$$Fun()变成了真正的Fun()。
    (7)可以用于给某个函数打补丁,而不破坏原来的程序结构。

    RT-Thread启动过程的流程如下(通过打桩测试验证):
    RT-Thread启动流程.jpg

    串口打印信息如下:

    启动过程中创建了5个线程:main、timer、tidle0、mmcsd、tshell。
    1-5.jpg
    启动文件:工程结果Libraries文件夹下的startup_LPC55S69_cm33_core0.s。
    在rt-thread工程中,程序执行完__main函数并不是跳转到main()函数,而是跳转到conmponent.c中的$Sub$$main函数。因为 RT-Thread 使用MDK编译器自带的 $Sub$$ 和 $Super$$这两个符号来扩展了main 函数,使用 $Sub$$main 可以在执行 main 之前先执行 $Sub$$main,在$Sub$$main 函数中我们可以先执行一些预操作,预操作执行完成后通过调用 $Super$$main 来执行 main() 函数。
            总结:rtthread工程启动流程

    启动文件—>__main函数—>$ Sub$$main函数—>rtthread_startup函数—>启动调度器—>C中main()函数。

    好好学习,加油
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2023-3-10 08:28:32 | 显示全部楼层
    楼主这文章,这基础知识。
    不知不觉中,我又被落下了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92619
    最后登录
    2024-4-24
    发表于 2023-3-10 13:49:49 | 显示全部楼层
    支持一下~~
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-26 03:07 , Processed in 0.115576 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表