FreeRTOS Spansion(前 Fujitsu)16FX 演示
[RTOS 移植]
此页面显示了适用于 Spansion MB96340 系列 RTOS 移植的 FreeRTOS 演示应用程序。
演示已预配置为可在 Spansion 的 SK-16FX-EUROScope starterkit 上运行。 演示使用
Softune 编译器和 IDE
以及 EUROScope Lite 调试器,两者都包含在 starterkit 中。
重要提示!使用 Spansion(前 Fujitsu)16FX 演示的注意事项
使用此 RTOS 移植之前,请阅读以下所有要点。
- 源代码组织
- 演示应用程序
- RTOS 配置和使用详情
另请参阅常见问题:我的应用程序未运行,问题可能出在哪里?
源代码组织
16FX 演示的 Softune工作区名为 96340_FreeRTOS_96348hs.wsp,应位于 Demo/MB96340_Softune 目录。
下载的 FreeRTOS zip 文件包含所有移植文件和演示应用程序项目文件。 因此其包含的文件
远多于此演示使用的文件。 请参阅源代码组织部分,获取
下载文件的描述和有关创建新项目的信息。
演示应用程序
演示应用程序设置
演示应用程序包括中断驱动的 UART 测试,其中一个任务传输字符,然后由另一个任务接收。 为使该功能正确运行,
必须将环回连接器连接到 SK-16FX-EUROScope 板的 X4 连接器上
(9 路连接器上的引脚 2 和 3 必须连接在一起)。
您可以通过其 USB 端口为入门套件供电,并使用同一个 USB 端口作为虚拟 COM 端口。 通过 USB 线首次连接入门套件时,
系统会提示您安装 USB 驱动程序。 入门套件 CD 上提供了所需的驱动程序。
无需其他特定的硬件设置。
构建应用程序、编程闪存和调试都是通过单独的程序执行的——这些程序分别是 Softune 本身、Spansion Flash MCU 编程器
和 EUROScope lite。 三个程序的安装可执行文件都提供在入门套件 CD 上。 Softune 和 EUROScope 都需要您注册软件
并获取许可文件,不过此过程快速且免费。
构建演示应用程序
- 在 Softune IDE 中打开 Demo/MB96340_Softune/96340_FreeRTOS_96348hs.wsp 工作区。
- 在 IDE 的 Project 菜单中选择 "Build",编译演示应用程序时不应含有错误或警告,不过链接阶段将输出警告,
这是因为在 Softune 库中缺乏调试信息。 链接器警告无法避免,但可被忽略。
对微控制器闪存进行编程
- 使用 USB 线将入门套件连接到您的主机。
- 启动 Spansion Flash MCU 编程实用程序。
- 确保选择正确的 MCU 和晶体频率——下图中红色突出显示部分。
Spansion Flash MCU 编程实用程序
- 使用 "Open" 按钮(上图蓝色突出显示部分)选择内置文件 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/STANDALONE/ABS/
FreeRTOS_96348hs_SK16FX100PMC.mhx
- 在 Flash 编程实用程序上,单击 "Set Environment",并确保分配给 USB 连接的(虚拟)COM 端口被选中。 Windows 设备管理器可用于
检查分配给 USB 连接的端口:
- 在 Windows 控制面板中选择 "System"。 系统属性 (System Properties) 对话框将打开。
- 选择系统属性对话框的 "Hardware"(硬件)选项卡,然后单击 "Device Manager"(设备管理器)按钮(下图中红色突出显示部分)。 Device Manager 窗口将打开。
打开设备管理器
- 展开设备管理器中的 "Ports (Com and LPT)" 节点,显示分配给 Spansion 连接的端口(下述情况下为 COM4)。
查看分配给 Spansion USB 连接的端口
- 确保入门套件板上的开关 S1 处于编程位置(朝向 D 连接器),然后按蓝色按钮重置 MCU。
- 最后,单击 Flash 编程实用程序中的 "Full Operation" 按钮(上图中黄色突出显示部分)。 对闪存进行编程不应超过大约
20 秒。
- 要开始执行程序,请将 S1 移回到 "Run" 位置,然后再次按下入门套件上的蓝色按钮。 确保
环回连接器位于 X4 上(如上文“演示应用程序设置”中所述),然后重置主板。
启动调试会话
- 按照说明对 MCU 闪存进行编程,将 RS232(或 USB 虚拟 COM 端口)线放置到位,并将开关 SW1 置于运行 ("run") 位置。
- 确保 Flash 编程实用程序不再运行,因为它会阻止调试器访问 COM 端口。
- 启动 EUROScope 调试软件。
- 从 EUROScope 的文件菜单中选择 "Open Application",然后导航至 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/STANDALONE/ABS/
FreeRTOS _96348hs_SK16FX100PMC.abs 文件,并将其打开
。 请注意,这次我们打开了.abs 文件,而在 Flash 编程实用程序中,我们打开了.mhx 文件。
- 在 Euroscope 的 "Preferences" 菜单中选择 "Select Target Connection",然后确保 “Fujitsu 16FXBootROM (RS232)” 被选中,如下所示。
确保选中 “Fujitsu 16FXBootROM (RS232)”
- 在同一弹出窗口(如上所示)中,单击 "Configure",打开 RS232 配置选项。 [注意: 该操作会锁定计算机一两分钟,无需惊慌,只需等待
下一个对话框出现]。
- 设置如下所示的通信选项——显然,要使用适合您的主计算机的 COM 端口,这可能不是如下所示的 COM1!
配置通信参数
- 在 EUROScope 的 "Communications" 菜单中选择 "Open"。 如果一切正常,您应该可看到源代码和汇编代码,准备进行调试。 如果没看到,
请单击 "Initialise target and run until main" 速度按钮。 如果您仍然看不到源代码,请使用 EUROScope 的 "Preference" 菜单中的 “Source Paths” 选项,
确保 EUROScope 正在尝试在正确的位置查找源文件。
- 一旦建立了调试连接,就可按照预期那样使用 EUROScope 浏览代码、查看内存、设置断点等。
演示应用程序功能
演示应用程序创建了 8 个协程,31 个持久性任务,并定期动态创建和销毁另外 2 个任务。 这些任务主要包含标准
演示应用程序任务(有关个别任务的详细信息,请参阅演示应用程序部分)。
除了标准演示任务外,应用程序还创建了以下任务和测试:
- 检查任务
“检查”任务负责确保所有标准演示任务
都按预期执行。检查任务通常每 3 秒执行一次,但
其在系统内具有最高优先级,因此保证能够获得执行时间。检查任务发现的任何错误
都会被锁定,直到处理器重置。在
每个周期结束时,检查任务会切换 LED。 如果所有任务执行时都不出错,LED 将每 3 秒钟切换一次;
无论何时只要有任务报错,则切换速率会增加到 500 毫秒
[可在执行演示时移除回环连接器来测试该机制,
这样做是故意在
"com test" 任务中生成一个错误]。
- 跟踪任务
此任务仅当 INCLUDE_TraceListTasks 在 FreeRTOSConfig.h 内设置为 1 时才包含在构建中,并且仅可在独立执行(而不是通过调试器)时使用。
跟踪任务是将执行跟踪和任务状态信息写入 UART 1 的用户交互式任务。 要查看菜单和提供的信息,请将 UART 1 连接到
主机上的终端程序(例如超级终端)。 其传输速率为 9600 baud。
SK-16FX-EUROScope 硬件包含一个 2 * 7 段的数值显示器,每个段都可以单独控制。 除了这些段之外,显示器还包含两个 “.”
字符,也可以单独控制。 这些段和 "." 字符为演示任务提供了便捷的输出,演示任务通常会使用常规的 LED。
如果演示应用程序正确执行,其表现如下:
- “检查”函数会每 3 秒钟切换 2 * 7 段显示器上的 “.” 字符。
- 如果构建中含有跟踪任务,则跟踪任务会通过 UART 1 向终端程序发送菜单选项。
- LED 闪烁任务会使用显示器上第一个字符的段——闪烁任务控制的段会
以恒定速率切换,但各任务使用的频率不同。 会创建 3 个闪烁任务。
- LED 闪烁协程会使用显示器的第二个字符。 同样,每个协例程将以恒定速率切换段,
但各协程使用的频率不同。 会创建 8 个协程。
优化
请注意,如果优化级别设置为 0,移植将无法正常运行。 这是因为 0 级优化会导致编译器
将
序言和尾声指令插入到 RTOS 内核使用的中断服务程序中以用于任务切换(即便是使用了 _nosavereg 函数限定符)。
如果需要 0 级优化,则
这些中断服务程序(包含在 RTOS 内核本身的可移植层中,并非应用程序代码中)将需要
用纯汇编代码重新编写。
寄存器库
16FX 移植不使用寄存器库。 仅使用库 0。
内存模型
16FX 移植可使用小型、中型、紧凑型或大型内存模型。 定义 configMEMMODEL
位于 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/FreeRTOSConfig.h,必须设置为 portSMALL、
portMEDIUM、 portCOMPACT 或 portLARGE 以匹配项目设置。
在 Softune IDE 中选择内存模型,configMEMMODEL 设置必须
与所选项相匹配
看门狗 (Watchdog)
演示应用程序演示了为看门狗提供服务的三种方法:
- 从 tick 中断内清除看门狗。
- 从专用看门狗任务内清除看门狗。
- 从闲置任务内清除看门狗。
可在 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/SRC/watchdog/watchdog.h 的设置中选择要使用的方法。
注意:这三种方法仅用于演示目的,因为这三种实现都过于简单,无法提供安全的看门狗机制。
如果需要安全的看门狗机制,则需要在看门狗定时器重置之前执行多种系统检查。
RTOS 使用的资源
重新加载定时器 0 会生成 RTOS tick。
RTOS yield 函数会使用软件中断 122。
ISR 功能的 RTOS yield 会利用延迟中断。
RTOS 移植特定配置
此演示的特定配置项位于 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/FreeRTOSConfig.h 中。 您可以
在本文件中定义的常量,以适配您的应用程序。 特别是-
每个移植会定义 (#define) 'BaseType_t' 为该处理器的最有效数据类型。 本移植将
BaseType_t 定义为 short (16 位) 类型。
请注意,vPortEndScheduler() 尚未实现。
中断服务程序
与大多数移植不同,导致上下文切换的中断服务程序没有特殊要求,可以根据编译器文档进行编写。
宏 portYIELD_FROM_ISR() 可用于从 ISR 内请求上下文切换。 请参阅 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/Src/serial/serial.c,
查看示例。
在抢占式和协同式 RTOS 内核之间切换
将 Demo/MB96340_Softune/FreeRTOS_96348hs_SK16FX100PMC/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.