选择设备后,Manage Run
-time
environment 窗口
显示此设备的相关软件组件
描述列中的链接提供对文档的访问每个软件组件。
Click Resolve
这解决了所有依赖关系并启用了其他所需的软件组件
(这里是 ARM
::CMSIS:Core 和 ::Device:Startup)
CMSIS-CORE:定义 Cortex-M 处理器内核的 API 和
外围设备,并包括一致的系统启动代码。该软件
组件 ::CMSIS:CORE 和 ::Device:Startup 是您所需要的全部
在使用异常的本机处理器上创建和运行应用程序,
中断和设备外设。
CMSIS-RTOS2:提供标准化的实时操作系统 API 和启用软件模板、中间件、库和其他组件可以跨受支持的 RTOS 系统工作。这里解释使用Keil RTX5 实现。
CMSIS-DSP:是一个用于数字信号处理 (DSP) 的库集合,具有超过 60 种适用于各种数据类型的函数:定点(小数 q7、q15、q31)和单精度浮点(32 位)。
CMSIS-Driver:是描述外围驱动接口的软件API用于中间件堆栈和用户应用程序。 CMSIS 驱动程序 API 是设计为通用且独立于特定的 RTOS,使其可在各种受支持的微控制器设备中重复使用。
软件的设计基本概念:
无限循环设计:涉及将程序作为无限循环运行。 从循环中调用程序函数(线程),而中断服务例程 (ISR) 执行时间关键的工作,包括一些数据处理。
--
在无限循环中运行嵌入式程序是
简单嵌入式应用程序的适当解决
方案。 通常由硬件中断触发的时间关键型功能在 ISR 中执行,该 ISR 还执行任何所需的数据处理。 主循环仅包含对时间要求不严格且
在后台运行的基本操作。
RTOS 设计:涉及使用实时操作系统 (RTOS) 运行多个线程。 RTOS 提供线程间通信和时间管理功能。 抢先式 RTOS 降低了中断功能的复杂性,因为高优先级线程可以执行时间关键的数据处理。
--
RTOS 内核,如 Keil RTX5,基于并行执行线程(
任务)的思想。与现实世界一样,您的应用程序必须完成多个不同的任务。基于 RTOS 的应用程序可在您的软件中重新创建此模型,并具有多种优势:
线程优先级和运行
时调度由 RTOS 内核使用经过验证的代码库处理。
RTOS 为线程之间的通信提供了一个定义良好的接口。
抢先式多任务概念简化了应用程序的
逐步增强,即使在更大的开发
团队中也是如此。可以添加新功能而不会冒更关键线程的响应时间的
风险。
无限循环软件概念经常轮询发生的中断。相比之下,RTOS 内核本身是中断驱动的,可以在很大程度上消除轮询。
这允许 CPU 更频繁地休眠或处理线程。
现代 RTOS 内核对中断系统是透明的,即对于具有硬实时要求的系统是强制性的。通信设施可用于 IRQ 到任务的通信,并允许对中断进行上
半部/下半部处理。
使用 Keil RTX5
Keil RTX 5 将 CMSIS-RTOS API v2 实现为原生 RTOS
基于 Cortex-M 处理器的设备的接口。
一旦执行到 m
ain(),推荐的顺序是初始化硬件并启动内核。 您的应用程序的 main() 应至少按给定顺序实现以下内容:
硬件的初始化和配置,包括外设、内存、引脚、时钟和中断系统。
使用相应的 CMSIS-CORE 函数更新
SystemCore
clock。
使用 osKernelInitialize 初始化 CMSIS-RTOS 内核。
可选地,创建一个新线程 app_main,它被用作使用 osT
hreadNew 的主线程。
或者,可以直接在 main 中创建线程。
使用 osKernelStart 启动 RTOS 调度程序。 osKernelStart 在成功执行的情况下不会返回。 osKernelStart 之后的任何应用程序代码都不会被执行,除非 osKernelStart 失败。
软件组件 ::CMSIS:RTOS2 (API):Keil RTX5 必须使用
组件 ::CMSIS:CORE 和 ::Device:Startup。 选择
这些组件提供以下中央 Keil RTX5 文件:
文件 cmsis_os2.h 是一个标准
头文件,它连接到每个
CMSIS-RTOS API v2 兼容 RTOS。 每个实现都提供了相同的 cmsis_os2.h,它定义了 CMSIS-RTOS2 的接口。
使用 cmsis_os2.h 以及动态对象分配允许创建在不同 CMSIS-RTOS v2 实现上使用时不需要修改的
源代码或库。
头文件中的所有定义都以 os 为前缀,以便为 CMSIS-RTOS 函数提供唯一的
名称空间。 属于一个模块的所有定义和函数都被分组并有一个共同的前缀,例如,osThread 表示线程。
Keil RTX5 配置
文件 RTX_
config.h 包含 Keil RTX5 的配置参数。 复印件
此文件的一部分是使用 RTX 组件的每个项目的一部分。
抢占式线程切换Preemptive Thread Switching
每个任务都有不同的优先级,任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数
时间片调度器 a round robin timeout
每个任务都有相同的优先级,任务会运行固定的时间片个数直到遇到系统阻塞式的 API 函数
CMSIS-DSP
CMSIS-DSP 库是一套通用的数字信号处理 (DSP)
职能。 该库有多种针对不同情况进行优化的变体ARM Cortex-M 处理器。
CMSIS-Driver
特定于设备的 CMSIS-Drivers 提供中间件之间的接口和微控制器外围设备。 这些驱动程序不限于 MDK中间件,可用于各种其他中间件堆栈以
利用这些外围设备。
特定于设备的驱动程序通常是支持微控制器设备并符合 CMSIS-Driver 标准。
中间件组件通常具有连接到这些驱动程序的各种配置文件。 对于大多数设备,RTE_Device.h 文件将驱动程序配置为微控制器设备的实际引脚连接。
中间件/应用程序代码通过控制结构连接到驱动程序实例。 此控制结构的名称反映了设备的外围接口。 大多数通信外围设备的驱动程序是提供设备支持的
软件包的一部分。
Compiler:I/O
软件组件 Compiler:I/O 允许您重新定位标准 C 运行时库的 I/O 函数。 应用程序代码经常使用标准 I/O 库函数,例如 printf()、
scanf() 或 fgetc() 来执行输入/输出操作。
标准 ARM Compiler C 运行时库中这些函数的结构是:
在user中设置生成hex
Fromelf.exe --vhx --8x1 --output=.output@L.hex !L
若要生成bin则: f
romelf.exe --bin --output=@L.bin !L