[RTthread] RTthread 启动流程&内存管理

RTthread启动流程

代码中的 msg_ptr 指针指向的 128 字节内存空间位于动态内存堆空间中。 而一些全局变量则是存放于 RW 段和 ZI 段中,RW 段存放的是具有初始值的全局变量(而常量形式 的全局变量则放置在 RO 段中,是只读属性的),ZI 段存放的系统未初始化的全局变量,如下面的例子:

#include <rtthread.h> 
const static rt_uint32_t sensor_enable = 0x000000FE; 
rt_uint32_t sensor_value; 
rt_bool_t sensor_inited = RT_FALSE;
void sensor_init() { /* ... */ } 

自动化机制

int rt_hw_usart_init(void) /* 串 口 初 始 化 函 数 */
{... .../* 注 册 串 口 1 设 备 */
rt_hw_serial_register(&serial1, "uart1",RT_DEVICE_FLAG_RDWR |RT_DEVICE_FLAG_INT_RX,uart);
return 0;
}
INIT_BOARD_EXPORT(rt_hw_usart_init); /* 使 用 组 件 自 动 初 始 化 机 制 */

示例代码最后的 INIT_BOARD_EXPORT(rt_hw_usart_init) 表示使用自动初始化功能,按照这种 方式,rt_hw_usart_init() 函数就会被系统自动调用,那么它是在哪里被调用的呢? 在系统启动流程图中,有两个函数:rt_components_board_init() 与 rt_components_init(),其后的 带底色方框内部的函数表示被自动初始化的函数,其中:

1. “board init functions” 为所有通过 INIT_BOARD_EXPORT(fn) 申明的初始化函数。

2. “pre-initialization functions” 为所有通过 INIT_PREV_EXPORT(fn) 申明的初始化函数。

3. “device init functions” 为所有通过 INIT_DEVICE_EXPORT(fn) 申明的初始化函数。

4. “components init functions” 为所有通过 INIT_COMPONENT_EXPORT(fn) 申明的初始化函数。

5. “enviroment init functions” 为所有通过 INIT_ENV_EXPORT(fn) 申明的初始化函数。

6. “application init functions” 为所有通过 INIT_APP_EXPORT(fn) 申明的初始化函数。

内核对象继承关系