购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6.2 内核数据区剖析

内核数据区在内存中的表现形式为一段指定大小的内存,在代码中的表现形式为结构体,里面的成员变量用来表明MQX的状态和动态变量,该结构体的成员数不是固定的,其中有些变量是根据配置决定是否编译,所以内核数据区的大小不是固定的。在执行MQX初始化函数_mqx()时,向其传递一个名为MQX_ INITIALIZATION_STRUCT结构体作为参数,这个结构体包含了初始化MQX的基本信息,如处理器个数、中断堆栈大小等,成员变量BSP_DEFAULT_START_ OF_KERNEL_MEMORY代表了内核所在内存的起始地址,具体数值在intflash.ld文件中定义,这个起始地址也就是内核数据区kerneldatastruct的起始地址。__执行_mqx()函数的过程中,程序会对这块内存区域赋值,也就是对kerneldatastruct__其中的成员变量进行赋值。

以轻量级事件为例,当创建一个事件时,首先要调用_GET_KERNEL_DATA(kernel_data)函数获取内核信息,找到KERNEL_DATA_STRUCT结构中LWEVENTS成员,它代表了存储轻量级事件队列的头。可通过遍历队列来查看当前创建的轻量级事件是否在这个队列中,如果已经存在的话就返回错误,如果没有就将它压入内核数据的轻量级事件队列中。

kernel_data_struct 结构体类型被包含在“..\mqx\source\include\mqx_prv.h”文件中,声明如下。 4qpZ7VfBmwI5wbleGzxXDCE3iUDXahwRaSQg0RDpDCcW8vC8Ju1x+oXimJybzT6l

点击中间区域
呼出菜单
上一章
目录
下一章
×