1、总结RT-Thread的启动流程。(启动文件部分跳过)
/* 关中断 */
rt_hw_interrupt_disable();
/* 板级初始化:需在该函数内部进行系统堆的初始化 */
rt_hw_board_init();
/* 打印 RT-Thread 版本信息 */
rt_show_version();
/* 定时器初始化 */
rt_system_timer_init();
/* 调度器初始化 */
rt_system_scheduler_init();
#ifdef RT_USING_SIGNALS
/* 信号初始化 */
rt_system_signal_init();
#endif
/* 由此创建一个用户 main() 线程 */
rt_application_init();
/* 定时器线程初始化 */
rt_system_timer_thread_init();
/* 空闲线程初始化 */
rt_thread_idle_init();
/* 启动调度器 */
rt_system_scheduler_start();
2、非运行时与运行时的image文件分别是什么样的,请画下来。
![](https://img-blog.csdnimg.cn/20190415155025589.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k2NzM1MzM1MTE=,size_16,color_FFFFFF,t_70)
3、MDK环境下各种数据段存储的什么数据?
有data 段 ZI段 RO RW
1)Code:代码段,存放程序的代码部分;
2)RO-data:只读数据段,存放程序中定义的常量;
3)RW-data:读写数据段,存放初始化为非 0 值的全局变量;
4)ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量;
4、在RT-Thread启动时,关了中断,那么在什么时候开启的中断?
在启动调度器后进行任务调度的时候会先禁止中断,然后再开启中断
5、总结自动初始化原理。
RT-Thread 的自动初始化机制使用了自定义 RTI 符号段,将需要在启动时进行初始化的函数指针放到了该段中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的。
![](https://img-blog.csdnimg.cn/20190415155511283.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k2NzM1MzM1MTE=,size_16,color_FFFFFF,t_70)
初始化顺序参考rttread启动流程。
6.总结bsp制作
bsp制作总结(以stm32f103ze为例)rt-thread\bsp\stm32\stm32f103-atk-nano\board
1.进入rtthread官网下载rtthread源码
2.进入rt-thread\bsp\stm32\libraries\templates拷贝stm32f10x文件
到rt-thread\bsp\stm32\文件夹下
3.重命名stm32f10x为my_bsp
4.进入my_bsp\board\CubeMX_Config\倒开CubeMX工程进行配置,生成工程
5.拷贝my_bsp\board\CubeMX_Config\src\main.c中的SystemClock_Config();函数
到my_bsp\board\borad.c 中替换borad.c 中的SystemClock_Config()函数。
6.根据芯片的flash和ram修改borad.h linker_scripts文件夹。
7.修改Kconfig文件
8.使用env 配置生成工程
9.修改工程,修改错误,更改led灯引脚,下载到硬件。
10.使用scons --dist 生成发布工程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)