rtt相关问题总结

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文件分别是什么样的,请画下来。

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 符号段,将需要在启动时进行初始化的函数指针放到了该段中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的。

初始化顺序参考rttread启动流程。