逐步学习 MQX 实时操作系统 (2)
准备工作
安装SDK软件Freescale_KSDK1.1.0_KV4xF_1.0.0.exe
可在飞思卡尔网站免费下载,这个版本的SDK已经集成支持了MQX。
安装编译环境IAR7.3(Code Warrior/Kds/Keil) 本笔记以IAR为例说明,其他开发环境类似,配置会有不同。
SDK+MQX目录结构
还是那句话,其实移植修改任何的源码包,第一件事情就是熟悉源码包目录结构,下图就是SDK安装完的源码目录结构。
boards文件夹 是管脚定义,配置。
platform文件夹是链接文件,启动代码,和SDK的源码。
Lib文件夹包含编译好的库文件。
demos文件夹是一些基于SDK的软件例程。
Filesystem文件夹是跟文件系统相关的
rtos文件夹是几个实时操作系统(MQX,uCOSII,uCOSIII等)相关的文件 这些在用到操作系统时候才会用到,如果你是基于裸机的程序可以不用考虑这个文件夹
打开rtos文件夹进入MQX文件夹就是MQX系统的源码目录结构,
Build: 所有支持的板子的不同工具的build工程
Config:配置文件
Doc: 说明文档
Lib: 库文件
Mqx:mqx源码包和例程
Mqx_nshell:shell 命令解析器文件
Mqx_stdlib:mqx标准库文件
像之前我们讲到过的基于SDK的裸机程序开发一样,在弄懂SDK结构的基础上,在来弄懂MQX源码目录结构,分析例程,在建立自己的第一个基于MQX的应用程序。
例程分析
以timer例程为例来做说明:
- 打开timer例程工程
- batch build 编译 采用batch build 编译(如何进入batch build在《基于飞思卡尔SDK的应用软件开发指南》中已经讲过,步骤类似,可参考那篇文章)。
- 下载程序
编译完成后如没有错误下载可执行文件到硬件飞思卡尔公司的塔式系 统板件中,打开串口调试助手,并设置为:
波特率: 115200bps
校验位:无
数据位: 8
停止位: 1
运行程序,在串口调试助手中可观察到下图
如果编译不过,要将MQX_USE_TIMER在small_ram_config.h和mqx_sdk_config.h文件中宏定义为1,因为timer是MQX的可选组件,默认是禁止的,需要用户自己配置打开,在重新编译内核文件和工程,直至编译通过。
结构分析
从工程目录结构就可以分析出,一个MQX+SDK工程需要包含哪些内容,如下图所示:
MQX库子工程,SDK库子工程和,mqx 塔式系统kv46f150workspace,以及用户自己的应用软件工程,
其中自己的应用软件工程应该包括:
BSP(boardsupport package) 板载支持包组件
配置文件群组
调试平台文件群组
SDK系统启动文件群组
用户自己的源码群组
分析完工程的构成,就得看看工程主要的几个配置:
以上的配置项都是非常重要的,关乎程序正常运行和编译。大部分配置跟在《基于飞思卡尔SDK平台的应用软件开发指南》中讲的基本类似。
今天先讲到这里,下次将以例程为模板搭建我们自己的工程,并添加外设驱动,开发应用程序。更多精彩内容,请继续关注嵌入式程序猿。
推荐阅读
-
逐步学习 MQX 实时操作系统
-
逐步学习 MQX 实时操作系统 (2)
-
30 天自制操作系统 - 第 2 天 学习汇编语言并开始使用 Makefile
-
创新报告:伯克利大学研发新分布式框架Ray - 推动实时动态AI学习新时代:强调系统需求四大关键点 - (1) 混合型并行计算能力, (2) 灵活动态的任务流程图设计, (3) 高效能与低延迟的调度, (4) 自动故障修复的透明特性
-
创新报告:伯克利大学研发新分布式框架Ray - 推动实时动态AI学习新时代:强调系统需求四大关键点 - (1) 混合型并行计算能力, (2) 灵活动态的任务流程图设计, (3) 高效能与低延迟的调度, (4) 自动故障修复的透明特性
-
简单易懂版 - 什么是粒子群算法(PSO)?" - PSO 是这样工作的: 想象一群小鸟寻找食物,它们会互相学习、竞争并跟随最优秀的伙伴。这就是模仿群体智慧(Swarm Intelligence,SI)的粒子群优化算法,由 Eberhart 博士和 Kennedy 博士创造,属于多智能体优化系统(MAOS)的一员。 - 数学背后的逻辑: - 每只“鸟”(粒子)依据邻居过去的发现来飞得更好: 1. 受到激励的好位置(Pbest) 2. 与附近伙伴的成绩对比 3. 阿婆姨领先者的模仿 - 模型简化来说,每个粒子像 D 维空间的理想点,按特定速度飞行,速度随自身经验和同伴表现实时调整。我们用 Xi 表示 D 个粒子的集合,其中 Pi 存储过最佳位置,Pg 是群体中最优的位置,Vi 是粒子的速度。 - 更新规则: - **速度更新**:有点像梯度下降法中的导数概念,但因鸟群数量大,能有效跳出局部最优区域,引导群体朝全局最优方向前进。 - **位置更新**:在固定的时间内,新移动的距离就是 Vi(即速度向量在单位时间内的累积效果)。 - 参数简述:粒子群算法涉及多个参数,如粒子数量、学习因子(影响对过去经验的重视程度)、加速常数(控制探索与利用之间的平衡),这些参数的选择会影响算法的实际性能和收敛速度。
-
计算机视觉中,究竟有哪些好用的目标跟踪算法(下)-快速变形主要因为CF是模板类方法。容易跟丢这个比较好理解,前面分析了相关滤波是模板类方法,如果目标快速变形,那基于HOG的梯度模板肯定就跟不上了,如果快速变色,那基于CN的颜色模板肯定也就跟不上了。这个还和模型更新策略与更新速度有关,固定学习率的线性加权更新,如果学习率太大,部分或短暂遮挡和任何检测不准确,模型就会学习到背景信息,积累到一定程度模型跟着背景私奔了,一去不复返。如果学习率太小,目标已经变形了而模板还是那个模板,就会变得不认识目标。(举个例子,多年不见的同学,你很可能就认不出了,而经常见面的同学,即使变化很大你也认识,因为常见的同学在你大脑里面的模型在持续更新,而多年不见就是很久不更新) 快速运动主要是边界效应(Boundary Effets),而且边界效应产生的错误样本会造成分类器判别力不够强,下面分训练阶段和检测阶段分别讨论。 训练阶段,合成样本降低了判别能力。如果不加余弦窗,那么移位样本是长这样的: 除了那个最原始样本,其他样本都是“合成”的,100*100的图像块,只有1/10000的样本是真实的,这样的样本集根本不能拿来训练。如果加了余弦窗,由于图像边缘像素值都是0,循环移位过程中只要目标保持完整那这个样本就是合理的,只有目标中心接近边缘时,目标跨越边界的那些样本是错误的,这样虽不真实但合理的样本数量增加到了大约2/3(padding= 1),即使这样仍然有1/3(3000/10000)的样本是不合理的,这些样本会降低分类器的判别能力。再者,加余弦窗也不是“免费的”,余弦窗将图像块的边缘区域像素全部变成0,大量过滤掉分类器本来非常需要学习的背景信息,原本训练时判别器能看到的背景信息就非常有限,我们还加了个余弦窗挡住了背景,这样进一步降低了分类器的判别力(是不是上帝在我前遮住了帘。不是上帝,是余弦窗)。 检测阶段,相关滤波对快速运动的目标检测比较乏力。相关滤波训练的图像块和检测的图像块大小必须是一样的,这就是说你训练了一个100*100的滤波器,那你也只能检测100*100的区域,如果打算通过加更大的padding来扩展检测区域,那样除了扩展了复杂度,并不会有什么好处。目标运动可能是目标自身移动,或摄像机移动,按照目标在检测区域的位置分四种情况来看: 如果目标在中心附近,检测准确且成功。 如果目标移动到了边界附近但还没有出边界,加了余弦窗以后,部分目标像素会被过滤掉,这时候就没法保证这里的响应是全局最大的,而且,这时候的检测样本和训练过程中的那些不合理样本很像,所以很可能会失败。 如果目标的一部分已经移出了这个区域,而我们还要加余弦窗,很可能就过滤掉了仅存的目标像素,检测失败。 如果整个目标已经位移出了这个区域,那肯定就检测失败了。 以上就是边界效应(Boundary Effets),推荐两个主流的解决边界效应的方法,但速度比较慢,并不推荐用于实时场合。