logo资料库

使用STM32Cube开发freertos官方中文.pdf

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
1 Free RTOS
1.1 概述
1.2 授权
图 1. FreeRTOS许可
1.3 Free RTOS源代码组织
图 2. Free RTOS架构
1.4 将FreeRTOS移植到STM32
图 3. Free RTOS移植
1.5 FreeRTOS API
表 1. Free RTOS API
1.6 FreeRTOS存储器管理
1.7 FreeRTOS低功耗
1.8 FreeRTOS配置
图 4. FreeRTOS配置
2 CMSIS-RTOS模块
2.1 概述
图 5. CMSIS-RTOS架构
2.2 CMSIS-RTOS API
表 2. CMSIS-RTOS API
3 FreeRTOS应用
表 3. Free RTOS应用类别
3.1 线程创建示例
图 6. 线程示例
3.2 信号量示例
3.2.1 线程间信号量
图 7. 信号量示例
3.2.2 从ISR得到信号量
图 8. 从ISR得到信号量
3.3 互斥量示例
3.4 队列示例
图 9. 队列过程
3.5 定时器示例
图 10. 周期性定时器
3.6 低功耗示例
表 4. 功耗比较
4 结论
5 FAQ
6 修订历史
表 5. 文档修订历史
UM1722 用户手册 在具有 RTOS 的 STM32Cube 上开发应用 前言 STMCubeTM 计划源自意法半导体,旨在通过减少开发的工作量、时间与成本,使开发者受 益。 STM32Cube 涵盖 STM32 产品系列。 STM32Cube 1.x 版包括: • 图形软件配置工具 STM32CubeMX,可通过图形化的生成初始化 C 代码。 • 针对每个系列提供综合的嵌入式软件平台 (即 STM32CubeF4 用于 STM32F4 系列) STM32 抽象层嵌入式软件 STM32Cube HAL,确保在 STM32 各个产品之间实现 最大限度的可移植性 – – 一套一致的中间件,比如 RTOS、 USB、 TCP/IP、图形 – 所有嵌入式软件实用工具均配备一套完整的示例。 实时操作系统是为在嵌入式 / 实时应用中使用而优化的操作系统。它们的主要目标是确保及 时、确定性地响应事件。使用实时操作系统,应用可写为一组独立的线程,线程间使用消息 队列和信号量通信。 本用户手册的目标读者为在 STM32 微控制器上使用 STM32Cube 固件的开发者。它完整描述 了如何使用具有实时操作系统 (RTOS)的 STM32Cube 固件组件;本用户手册还提供了一 组示例说明,它们基于 FreeRTOS,使用 CMSIS-OS 封装层提供的通用 API。 在 STM32Cube 固件中,通过 ARM 提供的通用 CMSIS-OS 封装层,将 FreeRTOS 用作实时 操作系统。使用 FreeRTOS 的样例和应用可直接移植到其它任何 RTOS 而不需要修改高层 API,在此情况下仅需更改 CMSIS-OS 封装。 请参考软件包的发布说明,以了解与 STM32CubeTM 共同使用的 FreeRTOS 和 CMSIS-RTOS 固件组件版本。 本文档适用于所有 STM32 器件;然而为了简洁起见,以 STM32F4xx 器件和 STM32CubeF4 作为参考平台。若需了解更多在 STM32 设备上样例实现的信息,请参考相关 STM32Cube 固 件包中提供的自述文件。 2014 年 8 月 6 日 DocID025801 Rev 2 1/26 www.st.com
目录 目录 1 2 3 4 5 6 UM1722 Free RTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 授权 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Free RTOS 源代码组织 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 将 FreeRTOS 移植到 STM32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 FreeRTOS API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 FreeRTOS 存储器管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 1.7 FreeRTOS 低功耗 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 FreeRTOS 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 1.8 CMSIS-RTOS 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 CMSIS-RTOS API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2.1 3.2.2 FreeRTOS 应用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.1 线程创建示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 信号量示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 线程间信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 从 ISR 得到信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 互斥量示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4 队列示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5 定时器示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.6 低功耗示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 结论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 修订历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2/26 DocID025801 Rev 2
UM1722 表格索引 表格索引 表 1. 表 2. 表 3. 表 4. 表 5. Free RTOS API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 CMSIS-RTOS API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Free RTOS 应用类别 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 功耗比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 文档修订历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 DocID025801 Rev 2 3/26 3
图片索引 图片索引 UM1722 图 1. 图 2. 图 3. 图 4. 图 5. 图 6. 图 7. 图 8. 图 9. 图 10. FreeRTOS 许可 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Free RTOS 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Free RTOS 移植 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 FreeRTOS 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 CMSIS-RTOS 架构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 线程示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 信号量示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 从 ISR 得到信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 队列过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 周期性定时器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4/26 DocID025801 Rev 2
UM1722 1 1.1 Free RTOS Free RTOS 概述 FreeRTOS 是 RTOS 的一种,尺寸非常小,可运行于微控制器上,但其使用并不限于微控制 器应用。 微控制器是尺寸小、资源受限的处理器,它在单个芯片上包含了处理器本身、用于保存要执 行的程序的只读存储器 (ROM 或 Flash)、所执行程序需要的随机存取存储器 (RAM)。一 般情况下,程序直接从只读存储器执行。 微控制器用于深度嵌入式应用(对于那些应用,您永远不会看到处理器本身或运行的软件), 它们一般有非常明确、专门的工作。尺寸的限制以及专用的终端应用等性质,令其很少能使 用完整的 RTOS 实现 - 或者说不可能使用完整的 RTOS 实现。因此,FreeRTOS 仅为内核提 供了实时调度功能、任务间通信、时序和同步原语。这意味着更准确地说,它是一个实时内 核,或实时执行器。命令控制台界面、网络栈等额外的功能可作为附加组件。 FreeRTOS 为可调整的实时示例生成器内核,专为小型嵌入式系统设计。其特点包括 Free RTOS 示例生成器内核 —— 优先式、合作式及混合式配置选项。 • • 官方支持 27 种架构 (ARM7 和 ARM Cortex M3 每个算一种架构)。 • • 设计目标为小尺寸、简单和易用。一般来说,示例生成器内核二进制映像大约为 4K 到 FreeRTOS-MPU 支持 Cortex M3 存储器保护单元 (MPU)。 9K 字节。 • 代码结构极易移植,主要用 C 编写。 • 支持任务和协同例程。 • 可通过队列、二进制信号量、计数信号量、递归信号量、互斥量在任务间、任务与中断 间通信和同步。 • 互斥量有优先级继承。 • 支持高效的软件定时器。 • 强大的执行跟踪功能。 • 栈溢出检测选项。 • 预配置的示例应用,用于选定的单板电脑,可直接使用,加快学习曲线。 • 免费论坛支持,或可选择商业支持和授权。 • 可创建的任务数无软件限制。 • 可使用的优先级数无软件限制。 • 优先级指定无限制 - 可为多个任务指定同一优先级。 • 免费的开发工具可用于很多支持的架构。 • 免费的嵌入式软件源代码。 • 免版税。 • 可从标准的 Windows 主机交叉开发。 DocID025801 Rev 2 5/26 25
Free RTOS UM1722 FreeRTOS 的 heap2 方案用于内存分配管理,此方案使用最佳适用算法释放之前分配的块。 然而,它不会将相邻的自由块合并为一个大块。可用的 RAM 总量通过定义 configTOTAL_HEAP_SIZE 设置 - 定义于 FreeRTOSConfig.h 中。 1.2 授权 FreeRTOS 源代码使用修正的 GNU 通用公开许可来授权。该修正使用了除外形式。 GNU 通 用公开许可全文如下: 图 1. FreeRTOS 许可 6/26 DocID025801 Rev 2
UM1722 1.3 Free RTOS 源代码组织 下载的 FreeRTOS 包括每个处理器移植及每个示例应用的源代码。将所有移植放置在一处下 载会极大简化发布,但文件数太多。然而,目录结构非常简单,而且 FreeRTOS 实时内核仅 包含在 4 个文件中 (若需软件定时器或协同例程功能,则需更多文件)。 Free RTOS 图 2. Free RTOS 架构 RTOS内核代码包含在三个文件中,名为tasks.c、queue.c和list.c,它们位于FreeRTOS/Source 目录中。该目录还包含两个可选文件,名为 timers.c 和 croutine.c,它们实现了软件定时器和 协同例程功能。每个所支持的处理器架构都需要一小部分专门针对该架构的 RTOS 代码。这就 是 RTOS 移植层,它位于 FreeRTOS/Source/Portable/[compiler]/[architecture] 子目录中,其 中 [compiler] 和 [architecture] 分别是创建移植所使用的编译器,以及移植所运行的架构。 样例堆分配方案也位于移植层中。不同的样例 heap_x.c 文件位于 FreeRTOS/Source/portable/MemMang 目录中。 1.4 将 FreeRTOS 移植到 STM32 FreeRTOS 支持下列 ST 处理器系列:STM32 (Cortex-M0、 Cortex-M3 和 Cortex-M4F)、 STR7 (ARM7)和 STR9 (ARM9) ,可与下列工具共同使用:IAR、 Atollic TrueStudio、 GCC、 Keil、 Rowley CrossWorks。 图 3. Free RTOS 移植 DocID025801 Rev 2 7/26 25
UM1722 Free RTOS 1.5 FreeRTOS API API 类别 任务创建 任务控制 任务工具 内核控制 队列管理 信号量 表 1. Free RTOS API API – xTaskCreate – vTaskDelete – vTaskDelay – vTaskDelayUntil – uxTaskPriorityGet – vTaskPrioritySet – vTaskSuspend – vTaskResume – xTaskResumeFromISR – vTaskSetApplicationTag – xTaskCallApplicationTaskHook – xTaskGetCurrentTaskHandle – xTaskGetSchedulerState – uxTaskGetNumberOfTasks – vTaskList – vTaskStartTrace – ulTaskEndTrace – vTaskGetRunTimeStats – vTaskStartScheduler – vTaskEndScheduler – vTaskSuspendAll – xTaskResumeAll – xQueueCreate – xQueueSend – xQueueReceive – xQueuePeek – xQueueSendFromISR – xQueueSendToBackFromISR – xQueueSendToFrontFromISR – xQueueReceiveFromISR – vQueueAddToRegistry – vQueueUnregisterQueue – vSemaphoreCreateBinary – vSemaphoreCreateCounting – xSemaphoreCreateMutex – xSemaphoreTake – xSemaphoreGive – xSemaphoreGiveFromISR 8/26 DocID025801 Rev 2
分享到:
收藏