1、自动初始化宏 2、自动运行 3、启动顺序 4、ld文件中的KEEP 在使用 RT-Thread 过程中会遇到很多INIT_开头的宏,如驱动中的INIT_BOARD_EXPORT(rt_hw_wifi_init);,wlan 框架中的INIT_PREV_EXPORT(rt_wlan_lwip_init);。这些函数看到不到代码里面显式调用,但是在运行中又会运行了,那么它是在哪里被调用的呢?
id=rt-thread-自动初始化机制),根据官方文档的讲述在 RTT 源码中一共使用了 6 中顺序的初始化,本文以其中的一个 INIT_APP_EXPORT(fn) 为例进行自动初始化的原理分析,其他顺序的初始化的原理与之一致。
1、rt_components_board_init() 完成了第 1 段,也就是初始化了由INIT_BOARD_EXPORT(fn) 的初始化的所有函数,也就是__rt_init_rti_board_start 到 __rt_init_rti_board_end 之间的函数指针。 2、rt_components_init() 完成了第2 到第6 段,也就是按顺序初始化了由 INIT_PREV_EXPORT(fn) 到 INIT_D...
RT-Thread 的自动初始化机制在小的系统开发时,比较的简单易用,但当系统比较复杂时,需要关注初始化的次序 目的 RT-Thread 开机初始化时,默认不显示初始化的次序,如果某个初始化造成了死机,很能排查到底是哪个初始化引起的 开启打印功能,这样方便查看开机的自动初始化函数的执行次序 开启前 开启方法 查看rtde...
一、系统初始化 1. RT-Thread 的启动流程 (1)初始化与系统相关的硬件; (2)初始化系统内核对象,例如定时器、调度器、信号; (3)创建main线程,在main...
既然是初始化,我们这里中的重点关注初始化过程,重新整理RT-Thread初始化如下图所示: 在系统启动流程图中,有两个函数:rt_components_board_init() 与 rt_components_init(),其后的带底色方框内部的函数表示被自动初始化的函数,其中: “board init functions”为所有通过 INIT_BOARD_EXPORT(fn)申明的初始化函数。
存储设备初始化开启 SPI 设备驱动 DFS 框架的文件系统实现层需要存储设备驱动层提供驱动接口用于对接,本次使用的存储设备为 SPI Flash,底层设备初始化过程可以参考 《SPI 设备应用笔记》 。 重新打开 menuconfig 配置界面,在 RT-Thread Components → Device Drivers 界面中选中 Using SPI Bus/Device device drivers 以...
RT-Thread自动初始化: intled_init(){ ... } INIT_APP_EXPORT(led_init);intmain(intargc,char*argv[]){ led_on(); rt_kprintf("hello rt thread\r\n");return1; } 1 2 3 4 5 6 7 8 9 10 11 登录后即可复制 自动初始化的中心思想是,在执行函数之前,每个外设的初始化都已完成,所有外设都...
1、 RT-Thread初始化入口 我们可以在 src/components.c 文件中看到#ifdef RT_USING_USER_MAIN宏定义判断,这个宏是定义在 rtconfig.h文 件内的,而且处于开启状态。该宏需要在 BSP 对应的目录下的 Kconfig 文件中通过select RT_USING_USER_MAIN启用。 在该文件中可以看到一下代码 ...
RT-Thread之自动初始化 简介 学习RT-Thread RTOS中的自动初始化原理 参考文章 简书链接 CSDN博客 内容提炼 实现机制 编译后按照section名称在内存中进行排列,只要保证自动初始化的函数所在的section是连续的并且类型一致,那么就可以从起始地址到结束地址挨个执行实现自动初始化。默认情况下这些函数所在section各不相同,所以...