代码中的 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) 申明的初始化函数。