下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

Spansion(原 Fujitsu)MB91460 演示
[RTOS 移植]

此页面显示了适用于 32 位 Spansion MB91460 系列 RTOS 移植的 FreeRTOS 演示应用程序。

此演示经过预配置可在 Spansion 的 SK-91F467-FLEXRAY 入门套件上运行, 并使用套件 CD 上携带的 Softune 编译器、调试器和 IDE。 入门套件 配备 MB91467D MCU。


重要提示!Spansion MB91460 演示使用说明

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

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

源代码组织

MB91460 演示的 Softune 工作区称为 91467d_FreeRTOS.wsp,位于 Demo/MB91460_Softune 目录下。

FreeRTOS zip 文件下载包含所有移植和演示应用程序项目的文件。 因此其包含的文件 远多于此演示使用的文件。 请参阅源代码组织部分,获取 下载文件的描述和有关创建新项目的信息。


演示应用程序

演示应用程序设置

必须正确设置入门套件跳线,以便与 Softune IDE 成功进行 RS232 通信。 所需的确切跳线设置取决于 您个人的设置。 请参阅入门套件手册,获取更多信息。

演示应用程序包含受中断驱动的 UART 测试,其中一个任务传输字符,该字符随后由另一个任务接收。 对于此功能的正确操作, 必须将环回连接器安装到 SK-91F467-FLEXRAY 板的 UART 2 (X1) 连接器上 (9 路连接器上的引脚 2 和 3 必须连接在一起)。

演示使用内置在入门套件上的 LED ,因此不需要进一步的特定硬件设置。


构建演示应用程序

  1. 在 Softune IDE 中打开 Demo/MB91460_Softune/91467d_FreeRTOS.wsp 工作区。

  2. 在 IDE 的 Project 菜单中选择 "Build",编译演示应用程序时不应含有错误或警告。


启动调试会话

本页提供的说明使用了 Spansion 调试监视器,该监视器应已编程到入门套件外部的闪存中。 如果已擦除或覆盖闪存,则首先需要还原调试监视器。 此操作的说明 在入门套件手册中已提供。

要启动调试监视器:

  1. 在入门套件板上找到 S5,这是一组 5 个微型开关。 确保开关 1 处于开启位置,其余 4 个开关处于关闭位置。

  2. 启动或重置入门套件。 如果LED D2、D4 和 D8 亮起,则调试监视器已准备好接收演示应用程序下载。
下载演示应用程序:
  1. 确保调试监视器如上所述运行。

  2. 用入门套件所需的 RS232 电缆将入门套件上的端口 UART 4 (X4) 连接到主机计算机。

  3. 在 Softune “Project” 菜单中选择 “Setup Project” 以打开项目设置对话框。

  4. 在项目设置对话框中,选择 “Debug” 选项卡、“Setup” 类别,并确保所选设置名称对于主机计算机正确无误。 下图演示了使用在 57K6 baud 的 COM1 与调试监视器进行通信的设置。


    设置与 Spansion 调试监视器进行通信的方法。

  5. 在 Softune 的 “Debug” 菜单中选择 “Start Debug”。 RTOS 演示应用程序将被下载到入门套件 RAM 中,并在 main() 函数的开始之前执行。
控制调试会话:
  1. Softune提供了预期的单步执行、单步跳过、条件断点、断点等调试器功能。

  2. 不能使用 Softune IDE 暂停在启动工具包硬件上自由运行的程序。 自由运行的应用程序 可以通过按下入门套件板上的 INT 0 (SW2) 按钮来中断——这将暂停程序执行,并将控制权返回给 Spansion 调试监视器。


演示应用程序功能

演示应用程序可创建 8 个协程,44 个持久性任务,并定期动态创建和销毁另外 2 个任务。 这些任务主要包含标准 演示应用程序任务(有关个别任务的详细信息,请参阅演示应用程序部分)。

除了标准演示任务外,应用程序还创建了以下任务和测试:

  • 寄存器测试任务

    这是一组两项任务,每项任务都用已知值填充 MCU 寄存器,然后立即检查寄存器 是否包含预期(写入)值——意外值表示 RTOS 上下文切换机制中出现错误。 每个任务使用不同的值,因为优先级较低的任务将经常被中断。

  • Check 任务

    “检查”任务负责确保所有标准演示任务 都按预期执行。检查任务通常每 3 秒执行一次,但 其在系统内具有最高优先级,因此保证能够获得执行时间。检查任务发现的任何错误 都会被锁定,直到处理器重置。在 每个周期结束时,检查任务会切换 LED。 如果所有任务执行时都不出错,LED 将每 3 秒钟切换一次; 无论何时只要有任务报错,则切换速率会增加到 500 毫秒 [可在执行演示时移除回环连接器来测试该机制, 这样做是故意在 "com test" 任务中生成一个错误]。

  • 跟踪任务

    跟踪任务是将执行跟踪和任务状态信息写入 UART 5 的用户交互式任务。 要查看菜单和提供的信息,请将 UART 5 (X8) 连接到 主机上的终端程序(例如超级终端)。 其传输速率为 9600 baud。

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

  • “检查”函数将每 3 秒钟切换一次 LED D8。

  • 跟踪任务会通过 UART 5 向终端程序发送菜单选项。

  • LED D1、D2 和 D3 由标准 "flash" 任务控制。 每个 LED 将以不同的固定频率切换, 频率不同, 其中 LED D1 频率最高,LED D3 频率最低。。

  • LED D9 至 D16 由 "flash" 协程控制。 同样,每个都将以不同的固定频率切换。

  • LED D5 由 'ComTest' Tx 任务控制。 它将在每次传输字符时进行切换。

  • LED D6 由 'ComTest' Rx 任务控制。 它将在每次收到字符时进行切换。



RTOS 配置和使用详情


RTOS 使用的资源

重新加载定时器 0 会生成 RTOS tick。

RTOS yield 函数会使用软件中断 64 (0x40)。

ISR 功能的 RTOS yield 会利用延迟中断。


看门狗 (Watchdog)

演示应用程序演示了为看门狗提供服务的三种方法:
  1. 从 tick 中断内清除看门狗。
  2. 从专用看门狗任务内清除看门狗。
  3. 正在闲置任务中清除看门狗。
可在 Demo/MB91460_Softune/SRC/watchdog/watchdog.h 的设置中选择要使用的方法。

注意:这三种方法仅用于演示目的,因为这三种实现都过于简单,无法提供安全的看门狗机制。 如果需要安全的看门狗机制,则需要在看门狗定时器重置之前执行多种系统检查。


RTOS 移植特定配置

此演示的特定配置项位于 Demo/MB91460_Softune/Src/FreeRTOSConfig.h 中。 此文件中定义的常量 在本文件中定义的常量,以适配您的应用程序。 特别是-
  • configTICK_RATE_HZ

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

  • configKERNEL_INTERRUPT_PRIORITY

    此常量设置了 RTOS 内核使用的中断优先级。 RTOS 内核应使用低中断优先级(高数值),允许更高优先级的中断不受 内核进入临界区的影响。 临界区不是全局禁用中断,而是仅禁用 低于 RTOS 内核中断优先级的中断。

    因此中断处理非常灵活:

    1. 在 RTOS 内核的优先级上,中断处理的“任务” 可以像系统中的任何其他任务一样被编写和优先处理。 这些是被中断唤醒的任务。 中断服务例程 (ISR) 本身应写得 尽可能短,因为它只是抓取数据,然后唤醒高优先级处理程序任务。 接着,ISR 会直接返回到 唤醒的处理程序任务,因此中断处理在时间上是连续的,就像所有处理都是在 ISR 本身中完成的一样。 这样的好处是 处理程序任务中的所有中断都保持启用状态。 启用以太网的演示中的以太网驱动器使用处理程序任务演示该机制。

    2. 运行在 RTOS 内核优先级以上的 ISR 不会被 RTOS 内核本身屏蔽,因此其响应性不会受到 RTOS 内核功能的影响。 但是,此类 ISR 无法使用 FreeRTOS API 函数。 快速定时器中断测试演示了这种行为。

每个移植会定义 (#define) 'BaseType_t' 为该处理器的最有效数据类型。 本移植将 BaseType_t 定义为长整型(32 位)。

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


中断服务程序

与大多数移植不同,导致上下文切换的中断服务程序没有特殊要求,可以根据编译器文档进行编写。 宏 portYIELD_FROM_ISR() 可用于从 ISR 内请求上下文切换。 请参阅 Demo/MB91460_Softune/Src/serial/serial.c, 查看示例。


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

Demo/MB91460_Softune/Src/FreeRTOSConfig.h 内的定义 configUSE_PREEMPTION 设置为 1,可使用抢占式调度; 设置为 0,则可使用协作式。


编译器选项

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


内存分配

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


串行驱动程序

请注意,提供的串行驱动器示例旨在演示 RTOS 内核的某些功能,并非表示最佳解决方案。




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