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

2.6.3 MQX初始化结构体常数MQX_init_struct

“.. \Sources\ main.c”文件中的main函数只执行了一个_mqx函数,其功能为启动MQX,传入参数是MQX初始化结构体常数MQX_init_struct。

MQX_INITIALIZATION_STRUCT称为MQX初始化结构体类型,其声明位于“...\MQX\include\mqx.h”文件中。

初始化结构体常量MQX_init_struct包含了启动MQX所需的所有参数的预设值,是在“..\MQX\bsp\mqx_init.c”文件中给出的,结构体内各成员的数值及含义如下。

各成员数值的宏定义常量除MQX_template_list以外,其他均以BSP为前缀命名,说明来自板级支持包BSP,下面做简要说明。

1.BSP默认处理器编号BSP_DEFAULT_PROCESSOR_NUMBER

其宏定义在“..\MQX\bsp\sd_k60_c.h”文件中:

其中,__DEFAULT_PROCESSOR_NUMBER定义在链接命令文件intflash.ld文件中。对K60-C板,在intflash.ld文件中,__DEFAULT_PROCESSOR_NUMBER = 1。因此,BSP默认处理器编号BSP_DEFAULT_PROCESSOR_NUMBER为1。MQX本身是支持多处理器的,在MQX的应用过程中,读者将会发现,很多系统服务API中也包含一个处理器内核编号的参数,在单核(绝大多数情况)的应用中,设定该参数为1即可。

2.BSP默认内核数据区的存储范围

上节已经简要阐述过内核数据区的作用,其大小在编译时自动完成。若内核数据区空间过小,系统运行过程中需要申请系统空间但未成功时,将退出MQX。在应用程序中从内核数据区动态申请内存空间时,若未成功只会给出失败标志,由用户决定处理方式,而不一定直接退出MQX。

MQX启动时,需要给出BSP默认内核数据区的开始地址和结束地址。其宏定义在“..\mqx\bsp\bsp_config.h”文件中。

__KERNEL_DATA_START和__KERNEL_DATA_END可在“intflash.ld”文件中搜索查看,并计算,也可编译完成后在.xMAP文件下搜索查看。对于SD-FSL-K60-C评估板,从.xMAP文件下搜索查看,可以得出本样例工程内核数据区范围是(0x1FFF_0330~0x2000_FFF0),共127 KB,SD-FSL-K60-C评估板采用MK60DN512ZVLQ10作为主控芯片,芯片RAM的地址为0x1FFF_0000~0x2000_FFFF,共128 KB,也就是大部分RAM被用于内核数据区。

3.BSP默认中断栈大小BSP_DEFAULT_INTERRUPT_STACK_SIZE

MQX的每个任务都有自己的栈空间,MQX的中断处理程序也有自己独立的栈空间,这个栈就称为 中断栈 。Linux操作系统从2.6版开始,也为中断处理程序使用中断栈。中断栈空间大小是根据具体需要安排的,其默认值是在intflash.ld文件中设定的,通常设为1KB。例如,对于本书例程,intflash.ld文件中设其为1024B,也可编译完成后,在xMAP文件下搜索查看,中断是在mqx启动时动态申请的一块内存,申请完之后将这块内存的起始地址赋值给kerneldata中的INTERRUPT_STACKPTR成员变量

4.默认的MQX任务模板列表MQXtemplate_list简述

默认的任务模板列表MQX templatelist在mqxapptasktemplates.c”文件中,它记录了应用任务的属性。在应用工程中,开发人员编写好任务函数后,需要在任务模板列表中登记任务模板,用以描述对应任务的属性,包括8个字段,鉴于任务模板列内容较多,专门在2.6.4节进行阐述。可以使用自己的初始化任务模板列表,也可以使用默认列表MQX_template_list.

5.默认硬件中断最高优先级

其宏定义在“MQXbspbsp_config.h”文件中

在MQX系统中,越小的数值表示的优先级等级越高,BSP默认硬件中断最高优先级决定了MQX能够控制的最高中断优先级等级,2表示int disable(MQX中关中断的函数)能够关闭的最高优先级等级2,即数值大于等于2的优先级中断都将被关闭,其中后缀L表示long类型。

6.默认最大的消息池数量及消息队列数量

其宏定义在“MQXbspbsp_config.h”文件中

消息是MQX系统中任务间通信的基础,系统为消息维护提供若干数据结构(数组),如系统消息池和消息队列。在系统初始化时需要指定消息池数和消息队列的数量,为它们预留存储空间。默认最大的消息池数量及消息队列数量分别为2和16

在创建消息组件时,会根据最大消息池个数(BSP DEFAULT MAX MSGPOOLS)乘以消息池消息结构体的大小(MSGPOOL STRUCT)来创建申请内存,理论上来说,只要内存足够大,就可以申请足够多的消息池,但是至少申请一个。消息在消息池中并不是存储在消息池结构体中,在消息池结构体中只存储了若干消息块的链表的头,还存储了消息的数目,消息池中消息的数目可以自己指定最大消息数目或者没有限制(只要内存充裕)。同样地,消息队列创建最大数目为MAX UINT16-1(0OxFFFF)个,最少创建一个,具体数目视实际需要而定。

7.BSP默认O通道及打开模式

其宏定义在“MQXbspbsp_config.h”文件中

MQX系统与外界交互,一般会指定一个串行通信接口作为通信通道。在默认情况下,MQX在初始化外设的时候会初始化一个串口,供任务中调用printf等标准输入输出函数使用。MQX对标准I/O通道指定为“ttye :”,即使用串口4作为系统默认的通信端口。与PC程序调试使用屏幕不同,嵌入式设备调试方法的一个很重要的手段就是使用串口打印调试信息。这里将BSPDEFAULTIOCHANNEL设置为串口4是由硬件决定的,本书采用的硬件开发___平台为SD-FSL-K60-C评估板,该评估板将串口4引出作为默认的调试口,如果采用硬件平台与本书不一致,建议查询对应开发平台的默认IO通道并进行修改。 u5fihNRJC0kMnDnqR73C8/bHYDsRWKXy1zttN3M/IXeHAvXno1bUS/0TATr1WwEM

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