
几乎不可能从头开始编写用于现代嵌入式电子产品内部的固件。 他们只是不为此付出时间。 因此,嵌入式系统的软件基于
现成的软件平台-框架。 框架越发达,开发速度就越快。 在这里,我们将讨论我专门为电机控制模块创建的框架,该框架已经成功使用了一段时间。
框架的架构。
该框架旨在在通用电机控制模块
DMC v2.0的开放平台上工作。
框架的逻辑架构可以描述为框图,如下所示。 在流程图中,省略了框架所有组件的完整列表,因为这会破坏清晰度,但对于一般概念,我认为粒度就足够了。

(点击放大)该框架没有版本,正在不断开发中,在这里我只是试图修复其当前状态,该状态已发布在GitHub上。
从软件模块的角度来看,该框架包含以下关键部分:
-一组应用程序级别支持模块
-实时操作系统
MQX 。
-中间件:
文件系统,命令外壳,通信协议栈等。
-低级板支持包(BSP),其中包括对BLEZ66V1模块板和电源模块
的外围设备的
访问 。
-用于
监视,调试和诊断的软件包
-FreeMaster 。
-调试工具,包括
RTT , ITM工具跟踪
,记录器,VT100终端。
-
生成参数
文件的模块。
-Matlab中基于算法生成的源代码模块。
为什么选择MQX?
实时操作系统(RTOS)MQX早已众所周知,但
几年前出现在公共领域。 该操作系统是Freescale在NXP收购之前上传的。 RTOS最初仅具有用于飞思卡尔微控制器的许可证,现在该许可证还扩展至NXP产品。 RTOS在爆炸性的流行中幸存下来,经历了多次升级到4.2版,此后,飞思卡尔决定再次将其后续版本商业化。 因此,结果得出了两个版本,一个是开放的并冻结在开发中的MQX Classic(又名MQX v4.2),另一个是封闭的商业MQX 5.0。
在描述的框架中,使用了MQX Classic v4.2分支。 这是一个经过测试的稳定版本。 该许可证允许开发人员修改MQX Classic的源代码并在商业产品中使用它,但是,它不允许以源代码形式发布MQX Classic。 但这应该不是问题,因为可以免费下载MQX Classic。
RTOS的总体结构如下:

为什么需要RTOS?
尤其需要电机控制的复杂应用程序非常复杂,由许多异步任务组成,每个任务都有自己的重复周期以及其激活和停止事件。 如果我们在一个超级周期中执行所有这些任务,那么我们不可避免地会遇到一些问题,这些任务会导致其他任务延迟执行。
使用MQOS之类的RTOS,有可能摆脱时间轴上各个任务的相互依赖性,而无需重写它们甚至不查看其源代码。
例如,我们的记录器任务可以尝试在SD卡上等待消息的时间尽可能长,以等待其响应,USB任务都可以将大量数据传输到计算机,但是与此同时,电机算法的PID任务将严格按指定的时间间隔执行,而速度测量任务旋转不会错过单个编码器信号更改事件。
尽管我必须承认,还有另一种越来越流行的摆脱单芯片复杂性的方法-切换到多处理,但是在这种情况下,RTOS将提供良好的服务。
RTOS MQX的主要优点。
-系统的内核附带了各种各样的中间件,包括文件系统,TCP / IP堆栈,USB堆栈,命令外壳等。 源代码中的所有内容。
-适用于不同电路板的现成BSP套件,无需编写自己的外围工作库。
-pdf文件中的详细文档,易于浏览。
-与其他知名的RTOS-uCOS和FreeRTOS相比,IDE IAR嵌入式工作台的插件的存在,其中包含有关RTOS内部结构的非常详细的信息。
-许多RTOS应用示例和测试用例。
在谈论RTOS时,他们总是强调按时完成任务的能力,但通常不会给出或给出一些单独选择的第三方平台的定量估计。 显然这不足以使用RTOS实施硬实时控制。 而要控制引擎,您需要非常严格的实时性。
MQX在这方面有一个很棒的测试用例,它使您能够获得启动测试的平台上所有服务的执行时间的详细表。
下表是电机控制模块微控制器上服务执行时间的表,编译器中包括代码执行速度的最大优化。
该表还给出了RTOS支持哪些服务以及可用的内核选项的想法。 IDE IAR中的测试项目已包含在已发布的框架中。
项目目录组成
框架的根目录如下所示:
APP_SRC-包含所有源的目录,除了那些属于MQX发行版的源。
FreeMaster_apps-在
FreeMaster环境中执行的项目文件。
IAR_proj-用于ARM v7.70.2环境的IAR嵌入式工作台的工作区和项目文件。 在这种环境下,最终的应用程序将被编译和调试。
MQX_SRC是一个目录,其中包含MQX随附的所有MQX源和中间件。 由于许可证不允许从MQX发行版进行开源发布,因此此目录中没有“
.s”和“
.s”文件。 但是,那些同意NXP许可条款的人可能会收到丢失的文件。
ParametersManager-参数管理器程序的目录。 使用此程序,可以创建应用程序参数列表,并生成带有参数声明的“
.s”和“
.h”文件,以嵌入到应用程序中。
TESTS-包含框架测试项目的目录。 这是用于使用MQX时序生成报告的
MQX_benchmark项目。
MQX_LIBRARY_O0.a和
MQX_LIBRARY_O3.a文件是
MQX_SRC目录的内容,分别编译为具有最小优化和最大优化的库。
IAR_proj目录的内容
U3HB_full.eww和
U3HB_MQXLib.eww文件是
IAR工作区文件。
只要MQX目录中没有源,就只能使用
U3HB_MQXLib.eww文件。 该工作空间使用已编译的MQX库。 在
U3HB_full.eww工作空间中,将编译完整的MQX源。
OUT目录用作IAR放置其工作产品(尤其是地图和十六进制文件)的位置。
设置目录由IAR自动创建。 它专门存储调试器设置。 如果在IAR中调试期间无法配置某些内容,则有时值得删除此目录。
INT_FLASH_MK66FX1M0LVQ18.icf文件是IAR链接器配置文件。 它确定链接器放置代码,数据,中断向量,堆栈等的存储区域的地址。
MQX_SRC目录的内容
工作区文件
MQX_LIBRARY.eww用于创建MQX库。 在将“
.s ”和“
.s”文件放置在目录中之前,不会编译该项目。
config-带有MQX配置文件的目录。 MQX服务和驱动程序的组成在
user_config.h配置
文件中指定。
mfs -MQX文件系统,包括FAT32和RAM FS
mqx -MQX核心包括以下子目录:
rtcs -TCP / IP堆栈。 它包括以下子目录:
shell-包含shell文件的目录。
usb-具有USB堆栈文件的目录
制造商已充分记录了每个MQX软件模块的功能。 作为示例,我将提供两个文档的链接:
→
使用MQX的说明 。
→
MQX参考指南。其余的必须在发行版中找到,该发行版
可以在NXP网站上找到 。
框架本身在
此处的存储库中。
在以下文章中可以找到有关使用软件和应用程序示例的进一步说明。