RT-Thread的启动流程

2023-05-16

笔记:

其中,rtthread_startup()函数如下:

/**
 * @brief  This function will call all levels of initialization functions to complete
 *         the initialization of the system, and finally start the scheduler.
 */
int rtthread_startup(void)
{
    rt_hw_interrupt_disable();

    /* board level initialization
     * NOTE: please initialize heap inside board initialization.
     */
    rt_hw_board_init();

    /* show RT-Thread version */
    rt_show_version();

    /* timer system initialization */
    rt_system_timer_init();

    /* scheduler system initialization */
    rt_system_scheduler_init();

#ifdef RT_USING_SIGNALS
    /* signal system initialization */
    rt_system_signal_init();
#endif /* RT_USING_SIGNALS */

    /* create init_thread */
    rt_application_init();

    /* timer thread initialization */
    rt_system_timer_thread_init();

    /* idle thread initialization */
    rt_thread_idle_init();

#ifdef RT_USING_SMP
    rt_hw_spin_lock(&_cpus_lock);
#endif /* RT_USING_SMP */

    /* start scheduler */
    rt_system_scheduler_start();

    /* never reach here */
    return 0;
}

 其中,rt_application_init()函数会创建“main”线程,线程函数为main_thread_entry(),该函数会调用用户的main()函数。

/**
 * @brief  The system main thread. In this thread will call the rt_components_init()
 *         for initialization of RT-Thread Components and call the user's programming
 *         entry main().
 */
void main_thread_entry(void *parameter)
{
    extern int main(void);

#ifdef RT_USING_COMPONENTS_INIT
    /* RT-Thread components initialization */
    rt_components_init();
#endif /* RT_USING_COMPONENTS_INIT */

#ifdef RT_USING_SMP
    rt_hw_secondary_cpu_up();
#endif /* RT_USING_SMP */
    /* invoke system main function */
#ifdef __ARMCC_VERSION
    {
        extern int $Super$$main(void);
        $Super$$main(); /* for ARMCC. */
    }
#elif defined(__ICCARM__) || defined(__GNUC__) || defined(__TASKING__)
    main();
#endif
}

后面,rt_thread_idle_init()函数会创建idle线程。

最后,调用rt_system_scheduler_start()启动调度器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RT-Thread的启动流程 的相关文章

  • kubernetes自动补全命令

    root 64 master01 apt y install bash completion root 64 master01 source usr share bash completion bash completion root 64
  • ubuntu server 20.04使用kubeadm安装k8s v1.23.5

    这篇文章也不错 xff1a https blog csdn net hefashion0190 article details 122635188 两台服务器配置hosts vim etc hosts 192 168 199 116 mas
  • 使用kubeadm 在Centos7.9 上安装k8s集群

    停止并禁用firewalld systemctl stop firewalld amp amp systemctl disable firewalld 关闭selinux sed i s 34 SELINUX 61 enforcing 34
  • Linux bash命令根据历史记录补全

    比如 xff0c 想找 docker run 开头的历史命令 xff0c 只需要键入 docker run 然后按 进行选择 但是在用服务器的bash时没有这个功能 xff0c 每次按 都会把敲入一半的命令清除掉 ctrl r 也不是很好用
  • Docker优化参数

    cat gt etc docker daemon json lt lt EOF 34 oom score adjust 34 1000 34 log driver 34 34 json file 34 34 log opts 34 34 m
  • Rancher 监控组件 Grafana 数据持久化

    以下配置是基于在 Rancher Cluster Manager 中启用监控 xff0c 而非在 Cluster Explorer 应用程序和市场中启用的新版监控 场景描述 xff1a 首先确保你的pv 回收策略是Retain 可以参照此文
  • MATLAB设置使用语言为中文

    因为每次自己都会忘记如何操作 xff0c 所以记录在自己的博客里 xff0c 避免忘记 在MATLAB主页 预设 帮助 右侧选取语言为简体中文 xff0c 具体操作可以见图片
  • kubernetes cordon原理

    cordon 节点可以使节点不接受调度pod 那么原理是什么呢 其实很简单 xff0c 就是给节点增加了一个污点 kubectl describe node NODE NAME 能看到这个污点配置 xff1a Taints node kub
  • 解决win10 win11 蓝牙音箱可以连接无法播放声音/蓝牙音箱无法选择使用

    这个靠谱 xff0c 记录一下 1 快捷键win 43 r xff0c 输入regedit xff0c 打开注册表 2 进入目录 xff1a 计算机 HKEY LOCAL MACHINE SYSTEM ControlSet001 Contr
  • journalctl 日志保留时间及持久化存储日志

    Systemd Journald基础 默认情况下 xff0c Systemd将系统日志存储在 run log journal目录中 xff0c 正如我们在了解Linux文件系统层次结构中所说的 参考 xff1a 介绍Red Hat Ente
  • Linux之/etc/fstab文件详解及实践

    转 https blog csdn net carefree2005 article details 125632867
  • Jenkins 上传文件到工作目录

    使用插件 xff1a File Parameter Plugin 之前写过一篇关于Jenkins 用户上传文件到工作目录的文章 xff0c 那时候还需要使用sharedlibraries 现在使用这个插件可以非常简单的上传文件 话不多说 x
  • Jenkins 在不同的agent之间传递文件/上传文件

    有时jenkins pipeline需要在不同的agent上执行不同的操作 xff0c 同时需要在不同的agent之间传递文件 方法如下 xff1a stage 39 上传文件 39 agent 39 label A 39 steps sc
  • 解决vscode编写go代码时提示过慢

    vscode的自动代码提示 xff0c 发现太慢了 xff0c 隔3 xff0c 4秒才会出提示 xff0c 所以换为Google推荐的 gopls来代替 下载过程 方案一 打开 VS Code 的setting 搜索 go useLang
  • windows server安装OpenSSH server

    右键powershell 选择以管理员运行 powershell 查看可安装的OpenSSH server版本 xff0c 在PowerShell中执行命令如下所示 Get WindowsCapability Online Name Ope
  • 表白密码:I Love you的42种密码表白方式

    字母表白数字密码 xff1a 9121522521 表白解密 xff1a 从1开始到26 xff0c 分别表示从A到Z xff0c 即 xff1a A xff08 1 xff09 B xff08 2 xff09 C xff08 3 xff0
  • C语言字符串结束标志

    为了测定字符串的实际长度 xff0c C语言规定了一个字符串结束标志 0 作为标志 xff0c 如果一个字符串为9个 xff0c 前面九个都不为空字符 xff0c 那么第十个字符为 0 xff0c 也就是说在遇到字符 0 时 xff0c 表
  • 用体光栅作角度滤波器

    体光栅由于其高光谱灵敏性和角度灵敏度 xff0c 可以设计成光谱滤波器或角度滤波器 根据K Bang等人的工作 xff0c 我们在VirtualLab Fusion中构造了这样的体光栅 xff0c 并分析了它们的角度响应 与传统的采用4 f
  • linux网络编程(完整版)

    之间在网上看到很多网络编程都是一个一个demo xff0c 今天我把之前学到的汇总起来 xff0c 希望大家可以进行补充 我理解的网络通信分为4种 1 xff0c udp客户端 2 xff0c udp服务端 3 xff0c tcp客户端 4
  • 一阶线性微分方程

    1 一阶线性微分方程概念 2 一阶线性齐次微分方程解法 例题 xff1a 例题 xff1a 3 一阶线性非齐次微分方程解法 例题 xff1a 4 伯努利方程 例题 xff1a

随机推荐

  • 集成学习(Bagging和Boosting)

    一 概念 集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型 xff0c 集成学习潜在的思想是即便某一个弱分类器得到了错误的预测 xff0c 其他的弱分类器也可以将错误纠正回来 Baggging 和Boosting都是模
  • 传感器数据异常预测-实战篇

    好久没更新了 xff0c 记录一下近两年研究的一套算法吧 xff0c 只讲讲方法部分 xff0c 细节再更新吧 时序数据的异常检测我一般分成两类 xff0c 单信号和多信号 单信号 对于一条数据的异常检测 xff0c 我划分成两类 xff0
  • 天线基础知识(四)接收灵敏度

    1 接收灵敏度 接收灵敏度是指无线设备正常工作所需的天线口最小信号接收功率 系统间的干扰会导致无线设备灵敏度的下降 xff0c 影响信号的正常接收 xff0c 因此通常以无线设备灵敏度准则作为被干扰系统的保护准则 无线传输的接收灵敏度类似于
  • px4讲解(一)历史起源

    第一节 对于初次接触无人机行业的人来说一些无人机行业课外知识还是需要了解的 xff0c ardupilot和px4是目前无人机行业最受欢迎 也是最为先进的飞控软件 xff0c 他们又是如何诞生并一路走来的呢 xff0c 他们跟Droneco
  • px4讲解(二)软件硬件

    无人机 xff08 飞控 xff09 软硬件介绍 无人机 xff08 简称 飞控 xff09 的软件和硬件都是开源的 xff0c 飞控的硬件也是是 开源的 xff0c 硬件 xff1a PIXHAWK 其硬件可以根据自己的需要修改硬件 xf
  • PX4官方examples 发布与订阅 分析

    功能 xff1a 实现 订阅 sensor combined 消息 xff0c 将订阅的消息数据 通过发布主题 xff08 vehicle attitude xff09 发布出去 Copyright 2012 2019 PX4 Develo
  • FreeRTOS详解

    FreeRTOS 1 任务切换 xff1a 使用vTaskDelayUntil vTaskDelay xQueueSend函数可以引起任务切换从中断函数中退出后 xff0c 执行高优先级任务 xff1a span class token c
  • 通讯协议制定之常用校验的实现

    1 异或校验 span class token macro property span class token directive hash span span class token directive keyword include s
  • Linux终端下显示全部make信息的方法

    博主新开了个人站点 xff0c 你也可以在这看到这篇文章 xff0c 点击打开链接 我们编译较大的工程项目时 xff0c 总会遇到以下情况 xff1a 输入make命令后 xff0c 显示了很长的一段信息 xff0c 但是只能显示下面的一部
  • RTOS之Freertos的操作系统原理

    任务调度机制的实现 任务调度机制是嵌入式实时操作系统的一个重要概念 xff0c 也是其核心技术 对于可剥夺型内核 xff0c 优先级高的任务一旦就绪就能剥夺优先级较低任务的CPU使用权 xff0c 提高了系统的实时响应能力 FreeRTOS
  • CAN通信标准帧和扩展帧介绍

    简介 CAN接口兼容规范2 0A和2 0B 主动 xff0c 位速率高达1兆位 秒 它可以接收和发送11位标识符的标准帧 xff0c 也可以接收和发送29位标识符的扩展帧 标准帧和扩展帧的区别在于 xff1a 一 扩展帧的仲裁域有29位 x
  • 解决VNC连接安了Ubuntu MATE系统的树莓派3b时出现灰屏的问题

    1 xff09 首先安装vncserver服务 xff08 这一步有没有用我也不知道 xff0c 一般人都是装的tightvncserver 当然 xff0c 我也装了 xff09 sudo apt get install vnc4serv
  • 树莓派3b连接并调试华为ME-909s-821 4G模块

    目的 xff1a 实现树莓派连接4G模块提供网络 材料 xff1a 树莓派3b 华为4G模块 xff1a HUAWEI ME909s 821 PCIE转USB开发板 10 15cm天线转接线 xff0c SMA公头外螺内孔 吸盘天线全向高增
  • 华为LTE 模块AT 命令拨号上网流程

    一 xff0e 模块初始化 1 AT 命令解释 xff1a 检测 Module 与串口是否连通 xff0c 能否接收 AT 命令 xff1b 命令返回 xff1a OK 与串口通信正常 xff08 无返回 xff0c 与串口通信未连通 xf
  • 树莓派3b连接GPS+BD模块并用python获取数据(USB版)

    目的 xff1a 树莓派连接GPS模块获取位置信息 材料 xff1a 树莓派3b xff08 Ubuntu MATE系统 xff09 xff0c GPS 43 BD模块 xff0c USB转TTL模块 xff0c GPS有源天线 步骤 xf
  • 树莓派3b连接GPS+BD模块并用python获取数据(串口版)

    目的 xff1a 树莓派用串口连接GPS 43 BD模块获取位置信息 材料 xff1a 树莓派3b xff08 Ubuntu MATE系统 xff09 xff0c GPS 43 BD模块 xff0c GPS有源天线 xff0c 杜邦线 步骤
  • 树莓派3b连接摄像头模块并用python编程拍照和录像

    原文 xff1a https www raspberrypi org learning getting started with picamera worksheet 本文不知道为什么就乱掉了 xff0c 又用markdown的格式写了一个
  • 解决 SimpleITK 无法调用Fiji的问题

    问题描述 xff1a 执行 xff1a sitk Show img 39 sample image 39 debugOn 61 True 报错 xff1a Traceback most recent call last File 34 34
  • Android解决app:compileDebugJavaWithJavac>Compilation failed; see the compiler error output for details

    Build gt Clean ProjectBuild gt Rebuild Project 解决 xff01 找不到 R xff0c 也可以用这个方法
  • RT-Thread的启动流程

    笔记 xff1a 其中 xff0c rtthread startup 函数如下 xff1a 64 brief This function will call all levels of initialization functions to