下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

Microsemi(原 Actel )SmartFusion A2F200M3F 演示
使用 GCC 和基于 SoftConsole Eclipse 的 IDE
包括带有 CGI 脚本的小型嵌入式 Web 服务器
[嵌入式以太网示例]


Microsemi SmartFusion A2F200M3 A2F-EVAL-KIT FPGA and ARM Cortex-M3 microcontroller kit
SmartFusion A2F-EVAL-KIT 评估套件



本页记录的 FreeRTOS ARM Cortex-M3 演示应用程序面向 Microsemi(原 Actel) SmartFusion 混合信号 FPGA(集成了 ARM Cortex-M3 微控制器)

FreeRTOS 包括用于 IAR、Keil 和 GCC 编译器的 ARM Cortex-M3 移植。 以下为 SoftConsole (Eclipse)、IAR Embedded Workbench 和 Keil MDK IDE 提供的针对 A2F200M3 SmartFusion 的演示应用程序项目。本页提供的说明仅适用于 GCC / SoftConsole IDE 的使用。 如需了解如何使用 IAR 和 Keil IDE,请参阅单独的页面

SoftConsole 项目配置为在 A2F-EVAL-KIT SmartFusion 评估板上运行。

本页还举例说明如何实现嵌入式 Web 服务器。 这需要用到改良版 微型 uIP TCP/IP 堆栈。 TCP/IP 堆栈代码名为 FreeTCPIP,对其修改之后,可实现 比使用原始代码更高的吞吐量。 动态网页会显示 RTOS、TCP/IP 和任务运行时间统计信息, 此类网页使用标准 uIP CGI 脚本工具创建和提供。

uIP 最初由 Adam Dunkels 编写。 uIP 为开源代码, 但已与 FreeRTOS 分开获得许可。 用户必须熟悉 uIP 许可,详见各 uIP 源文件的顶部。


重要!关于使用 FreeRTOSSoftConsole/Eclipse/GCC SmartFusion 演示项目的说明

使用此 RTOS 移植之前,请阅读以下所有要点。

  1. 源代码组织
  2. 演示应用程序
  3. RTOS 配置和使用详情
另请参阅常见问题:我的应用程序未运行,问题可能出在哪里?

源代码组织

FreeRTOS zip 下载文件中包含所有 FreeRTOS 移植 以及每个演示应用程序项目的源代码。 因此,该文件所包含的文件远多于构建和运行 SmartFusion 演示所需的文件。请参阅 源代码组织部分, 查阅已下载文件的描述以及关于创建新项目的信息。

用于 SmartFusion A2F200M 演示的 SoftConsole 项目文件位于 FreeRTOS/Demo/CORTEX_A2F200_SoftConsole 目录中。 此项目 应导入 SoftConsole 工作区。 准备 Eclipse 项目 部分包含有关设置演示项目目录 并将演示项目导入 SoftConsole。


准备 SoftConsole (Eclipse) 项目目录

Eclipse 项目既可以是标准 makefile 项目,也可以是托管 make 项目。 SmartFusion SoftConsole 项目使用托管 make 项目。 因此意味着 以下两种情况:
  1. 构建项目所需的所有源文件必须位于 包含项目文件本身的文件夹/目录下,或
  2. 需要配置 Eclipse 工作区(注意是工作区,而非项目) 来定位硬盘上其他位置的文件。
本示例采用第一种。 为此,目录 FreeRTOS/Demo/CORTEX_A2F200_SoftConsole 包含一个名为 CreateProjectDirectoryStructure.bat 的批处理文件, 该文件会将所有必需的 FreeRTOS 源文件复制到 演示项目目录内的子目录中。

CreateProjectDirectoryStructure.bat 必须在 项目导入到 Eclipse 工作区之前执行

CreateProjectDirectoryStructure.bat 不能 在 SoftConsole Eclipse IDE 内部执行。


SmartFusion A2F 演示应用程序

功能

SoftConsole 项目包含三项构建配置:

构建配置 描述
Blinky 此示例非常简单。 本例中会创建两项任务, 一项为创建软件定时器,另一项为使用按钮中断。

这两项任务 通过队列进行通信,包括队列发送任务和 队列接收任务。 队列接收任务 每次接收到值时都会切换一次 LED。

按下用户按钮 SW1 会产生中断, 中断的 ISR 会在打开 LED 之前重置软件定时器。 软件定时器有五秒的周期,五秒过后, 软件定时器回调函数会再次关闭 LED。 因此,按下 SW1 会打开 LED, 而且如果没有再次按下按钮,整个 5 秒钟内, LED 一直保持亮起状态。

Blinky 构建配置使用 main-blinky.c 源文件。 另外两个构建配置则使用 main-full.c 源文件。


Full 这是一个全面的演示,会创建许多任务、 队列、(各种类型的)信号量和软件定时器。

Full 构建配置创建的任务和定时器 与 Blinky 构建配置创建的相同。 除此之外, Full 构建配置还会根据 标准演示 。 标准演示任务并不执行任何特定函数。 其目的首先是测试 FreeRTOS 移植,其次是 举例说明如何使用 FreeRTOS API 函数。

此外,Full 构建配置还会创建一些任务, 这些任务既不属于 Blinky 配置,也不属于标准演示任务集。 本表下方简要介绍了这些额外任务。


Full_with_optimisation Full_with_optimisation 构建配置的函数 与 Full 构建配置的函数相同。 Full_with_optimisation 将编译器优化设置为高。 Full 将编译器优化 关闭。 这是两者之间唯一的区别。



Full 和 Full_with_optimisation 构建配置可创建如下任务和定时器 (既不属于 Blinky 演示,也不属于标准演示任务) :

  • “检查”软件定时器和回调

    每次检查定时器过期时,其关联的回调函数 都会查询所有正在运行的标准演示任务的状态。 如有任何查询状态 返回为“失败”,则检查定时器的周期 会从其原始设置的 3 秒缩短到 500 毫秒。

    检查定时器回调在每次执行时都会切换为 LED D8。 因此, 如果 LED D8 每三秒切换一次,则表示未报错。 如果 LED D8 每 500 毫秒切换一次,则表示至少有一个标准演示任务 报错。 可以使用嵌入式 Web 服务器查看 报错的标准演示任务的名称,该名称显示在 “任务统计”网页底部的任务统计表下方。

  • uIP 任务

    所有与 TCP/IP 相关的处理都包含在 uIP 任务中。 闪存和 RAM 占用空间(TCP/IP 堆栈)非常小 (与其他嵌入式 TCP/IP 实现相比)。

  • OLED 任务

    OLED 任务可在 两行 OLED 之间滚动消息。


Web 服务器配置

演示应用程序包括嵌入式 Web 服务器。 Web 服务器使用固定 IP 地址, 该地址设置为常量 configIP_ADDR0 到 configIP_ADDR3。 有关这些常量的定义,请参阅 FreeRTOSConfig.h 头文件底部附近,该文件 与 SoftConsole 项目文件位于同一目录下。 定义 MAC 地址和网络掩码的常量位于同一 头文件中。

SmartFusion 设备上运行的 Web 服务器所使用的 IP 地址 与用于连接 Web 服务器的 Web 浏览器必须 彼此兼容。 为实现兼容性,请确保 两个 IP 地址的前三个八位字节相同。 例如,如果运行 Web 浏览器的计算机的 IP 地址是 192.168.0.1,则可为 SmartFusion 设备提供 192.168.0.2 至 192.168.0.254 范围内的任何 IP 地址 (同一网络中已经存在的 IP 地址除外)。

分配给 SmartFusion 设备的 MAC 地址 在设备所连接的网络上必须具有唯一性。


硬件设置

本节将介绍 将应用程序编程到 ARM Cortex-M3 闪存所需的硬件设置。 假设 SmartFusion FPGA 架构和 ACE 已正确配置, 如果 A2F-EVAL-KIT 出厂配置未发生更改, 则会出现这种情况。 但是,如果 FPGA 架构 或 ACE 配置已更改,并且您发现 演示应用程序无法正确执行,则建议使用 A2F-EVAL-KIT 提供的 .pdb 文件 恢复 FPGA 架构和 ACE 配置。
  1. 确保跳线 JP7 设置到 "USB PROG" 位置。

  2. 确保跳线 JP10 设置到 "M3" 位置。

  3. 将 USB 电缆从 A2F-EVAL-KIT 开发板上 标有 "J13" 和 "USB PROG" 的端口(即同一个连接器)连接到 运行 SoftConsole IDE 的计算机。 这是 对 ARM Cortex-M3 进行编程的移植。

  4. 使用以太网电缆将 A2F-EVAL-KIT 硬件连接到 运行标准 Web 浏览器的计算机。 这需要 通过使用交叉(点对点)以太网电缆直接完成, 或者通过集线器/交换机使用标准以太网电缆完成。 在演示开发过程中 只测试了直接连接选项,但两种方法 应该都奏效。

  5. 将 USB 电缆从标有 "J14 USB/UART" 的端口连接到 任何能够供电的 USB 端口。 在本演示中,J14 仅 用作电源。


将演示应用程序项目导入 CCS Eclipse 工作区

要将 SmartFusion SoftConsole 项目导入现有或新的 Eclipse 工作区,请执行以下操作:
  1. 从 SoftConsole 的 "File" 菜单中选择 "Import"。 系统将显示 如下对话框。

    SoftConsole Eclipse IDE 中出现的第一个导入对话框
    首次单击 "Import" 时显示的对话框


  2. 在下一个对话框中,选择 FreeRTOS/Demo/CORTEX_A2F200_SoftConsole 作为根目录。 然后,确保在 "Projects" 区域中已勾选 RTOSDemo 项目 并确保 "Copy Projects Into 勾选 "Copy Projects Into Workspace box", "Finish" 按钮(请参阅下图查看正确的复选框状态, 图片中不包含完成按钮)。

    SoftConsole Actel Microsemi 编译器导入项目
    确保已勾选 RTOSDemo 且未勾选 "Copy projects into workspace"


使用 SoftConsole 工具构建和执行演示应用程序

  1. 确保 CreateProjectDirectoryStructure.bat 已执行, 并确保项目已正确导入到 Eclipse 工作区。

  2. 选择所需的构建配置

  3. 从 IDE 的 "Project" 菜单中选择 "Rebuild All"。

  4. 从 IDE "Run" 菜单中选择 "Debug Configurations..."。

  5. 在出现的对话框中,突出显示窗口左侧“树”目录的 "Microsemi ARM Cortex-M3 eNVM Target", 然后单击 "New Launch Configuration" 速度按钮(下图以红色突出显示)。

  6. 此时将创建一个新的调试配置,该配置的名称 应与正在使用的构建配置相匹配。 在下图中, 使用了 "Blinky" 构建配置。

  7. 确保使用的应用程序文件正确 (下图以绿色突出显示)。 在本示例中,使用了“Blinky”构建配置, 所以正确的应用程序文件为 "BlinkyRTOSDemo"。

  8. 单击 "Debug" 按钮开始调试。
    SoftConsole GCC GUI 调试配置


    创建调试配置



如果演示应用程序正确执行,其表现如下:

  • 标记为 D1、D2 和 D3 的 LED 处于标准演示 “闪烁”任务的控制之下。 每个 LED 都将以固定频率切换,其中 LED D1 使用 最快频率,LED D3 使用最慢频率。

  • 标记为 D4 和 D5 的 LED 可以使用 Web 浏览器 以交互方式打开和关闭。 由嵌入式 Web 服务器提供服务的 "IO" 页面 提供了执行此操作的功能。

    "IO" 页面还会显示 连接到标有 50K_POT 的电位器(安装在开发板上 OLED 的旁边)的 模拟输入端口原始读数。

  • 标记为 D6 的 LED 处于队列接收任务的控制之下。 每次队列接收任务收到一个值时 队列接收任务收到一个值,它都将按照 此 LED 将切换一次。

  • 按下按钮 SW1 时,标记为 D7 的 LED 将亮起(假设 其尚未亮起)。 上次按下 SW1 5 秒后, LED 软件定时器将再次关闭 LED D7。

  • 标记为 D8 的 LED 处于“检查”软件定时器的控制之下。 如果没有报错,D8 将每 3 秒切换一次, 如果标准演示任务报错,则每 500 毫秒切换一次。

  • "www.FreeRTOS.org" 将在两行 OLED 之间滚动, 下面一行文字超出上面一行文字五个字符。

  • 集成 Web 服务器可为标准 Web 浏览器 提供下述网页。 要连接到目标,请执行下列操作:

    1. 在连接的计算机上打开浏览器。
    2. 先在浏览器地址栏中输入 "HTTP://",再输入目标 IP 地址。


      在浏览器中输入 IP 地址
      (当然,根据您的系统,使用正确的 IP 地址)


服务的网页

每个提供的页面顶部都包含一个菜单,其中含有指向其他各页面的链接。

显示 RTOS 统计信息的 FreeRTOS SmartFusion Web 服务器

SmartFusion Web 服务器提供的 RTOS 统计信息页面
显示了系统中各任务的状态信息。

显示 RTOS 运行时间的 FreeRTOS SmartFusion Web 服务器


SmartFusion Web 服务器提供的运行时间统计信息页面
显示了各任务的处理器利用率。


提供的 IO 页面

可利用 IO 页面提供的简单界面,通过 Web 浏览器打开和关闭两个 LED。 该页面还显示评估板上 OLED 旁边的 50K 电位器的 当前原始模拟输入读数。 点击 "Update IO" 按钮可将变更发送到目标板。 每次点击 "Update IO" 按钮或刷新所提供的网页时, 都会更新 IO 页面上显示的值。

提供的其他页面包括 TCP/IP 统计信息和大型 JPG 图像。 所有网页都包含在下载的 二进制图像中,这会使得二进制图像看起来相当大(jpg 文件本身超过 36K)。



RTOS 配置和使用详情


Cortex-M3 FreeRTOS 移植特定配置

此演示的特定配置项位于 FreeRTOS/Demo/CORTEX_A2F200_SoftConsole/FreeRTOSConfig.h您可以编辑此文件中定义的常量,使其适合您的应用程序。 特别是:
  • configTICK_RATE_HZ

    此常量设置了 RTOS tick 中断的频率。 提供的数值 1000 Hz 可用于 测试 RTOS 内核功能,但这超过了大部分应用程序的频率要求。 降低此值可提高效率。

  • configKERNEL_INTERRUPT_PRIORITY 和 configMAX_SYSCALL_INTERRUPT_PRIORITY

    请 参阅 RTOS 内核配置文档,获取这些配置常量完整信息。

注意!请务必牢记 ARM Cortex-M3 核心使用的 数字越小表示中断优先级越高。 这一点 可能有悖直觉,容易混淆! 如果要将 中断设置为低优先级,请不要将其优先级指定为 0(或其他低数值), 因为这会导致该中断在系统中具有 最高优先级,并且如果这个优先级 高于 configMAX_SYSCALL_INTERRUPT_PRIORITY,可能会导致系统崩溃。 另外,请勿忘记 分配中断优先级,因为默认情况下,中断优先级为 0, 这可能导致其处于最高优先级。

ARM Cortex-M3 核心的最低优先级实际上是 255,但是不同的 Cortex-M3 供应商实现了不同数量的优先级, 并提供了期望以不同方式指定优先级的库函数。 例如, A2F 上可以指定的最低优先级实际上为 15,由 FreeRTOSConfig.h 中的常量 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 定义。 可指定的最高优先级 始终为零。

我们还建议确保将所有四个优先级位分配为 抢占式优先级位,不要将任何优先级位分配为子优先级位。

每个移植都将 "BaseType_t" 定义为 数据类型。 此移植将 BaseType_t 定义为长类型。


中断服务程序

与大多数移植不同,引发上下文切换的中断服务程序 无特殊要求,可根据编译器文档编写。 宏 portEND_SWITCHING_ISR() 可用于在 中断服务程序内请求上下文切换。

请注意,portEND_SWITCHING_ISR() 将启用中断。

此演示项目提供了 FreeRTOS 中断服务程序示例, 即在 main-full.c 和 main-blinky.c 中定义的 GPIO8_IRQHandler() 以及 以太网 MAC 中断处理程序。

只有以 "FromISR" 结尾的 FreeRTOS API 函数可以从 中断服务例程中调用 - 而且中断的优先级须 小于或等于 configMAX_SYSCALL_INTERRUPT_PRIORITY 配置常量设置的 优先级。


FreeRTOS 使用的资源

FreeRTOS 需要独占 SysTick 和 PendSV 中断。 其也使用 SVC 编号 #0。


在抢占式和协同式 RTOS 内核之间切换

RTOSDemo/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1,可使用抢占式调度; 设置为 0 以使用协作式调度。 选择协作式 RTOS 调度器时,完整的演示应用程序可能 无法正确执行。


编译器选项

与所有的端口一样,使用正确的编译器选项至关重要。 若要确保这一点, 最佳方法是基于提供的演示应用程序文件构建您的应用程序。


内存分配

Source/Portable/MemMang/heap_2.c 位于 SmartFusion A2F 演示应用程序项目中,以提供 RTOS 内核所需的内存分配。 请参阅 API 文档的内存管理部分, 以获取完整信息。


其他事项

请注意,vPortEndScheduler() 尚未实现。




Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.