下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

Renesas RZ/A1 (ARM Cortex-A9) RTOS 演示
包括 FreeRTOS-Plus-CLI 和 FreeRTOS-Plus-FAT SL
使用 ARM (DS-5) 和 IAR 嵌入式编译器
[RTOS 移植]


Renesas 芯片

简介

此页面记录了一个 FreeRTOS 演示应用程序, 适用于 Renesas RZ/A1嵌入式处理器,该处理器配备 ARM Cortex-A9 核心。 提供了 2 个项目, 允许使用 IAR Embedded Workbench 和 ARM DS-5 嵌入式开发工具构建演示。 演示的目标为 Renesas RZA1 RSK。

此演示使用:

  • 用于 ARM 或 IAR 编译器的 FreeRTOS Cortex-A9 内核移植(取决于 所使用的项目文件)

  • IAR 嵌入式工作台或 ARM DS-5 IDE (取决于所使用的项目文件)

  • FreeRTOS-Plus-CLI 命令行接口。

  • FreeRTOS-Plus-FAT SL (超精益)兼容 DOS 的 FAT 文件系统。 [注意 FreeRTOS-Plus-FAT SL 许可证 与 FreeRTOS 内核许可不同]


重要提示!使用 FreeRTOS Renesas RZ/A1 演示项目的注意事项

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

  1. 源代码组织
  2. 演示应用程序功能
  3. 构建说明(适用于嵌入式工作台和 DS-5)
  4. RTOS 配置和使用详情
另请参阅常见问题:我的应用程序未运行,可能出什么问题? 以及 在 ARM Cortex-A 嵌入式处理器上使用 FreeRTOS 的说明的相关页面。

源代码组织

FreeRTOS zip 文件包含所有 RTOS 移植和所有 RTOS 演示应用程序的源代码。 这些文件中只有一小部分要用于 Renesas RZ/A1 演示。 源代码组织页面描述了 FreeRTOS zip 文件下载的结构,并提供 关于如何创建新 RTOS 项目的信息。

ARM DS-5 Eclipse 项目文件位于 FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5 目录下。

IAR Embedded Workbench 项目文件位于 FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5/IAR" 目录下。

DS-5 和 IAR 项目会构建相同的 RTOS 演示应用程序,并且都会包含 /FreeRTOS-Plus 目录下的文件 (所以如果删除了 /FreeRTOS-Plus 目录,则无法构建项目)。



Renesas RZ/A1 ARM Cortex-A9 演示应用程序

硬件和软件设置

此页面上展示的演示在 Renesas RZA1 RSK上运行,但可以轻松改编后 在任何开发板上运行, 只要开发板提供了 UART 和数字输出的访问权限(有已连接的 LED 更好)。
  • UART

    UART 用于控制台 IO,或串口环回演示(取决于 构建,请参阅下文)。 此下载将 UART 2 用于此目的。 若确实有必要 使用 UART 2 以外的 UART,则:

    • siochar.c 中包含的 UART 初始化代码修改为 初始化要使用的任何 UART。
    • 修改 UART 中断配置、中断处理以及 位于 serial.c 中的字符输出代码,以管理 要使用的任何 UART。

  • LED 数字输出

    数字输出用于切换 LED。 此下载使用 10 位的 端口 4 以达成此目的。 如果需要使用不同的数字输出,则:

    • 编辑 LEDs.c 中包含的数字输出的初始化和管理代码, 改为使用任何要使用的数字输出。


功能

演示的行为由以下两个常量定义:
  • mainCREATE_SIMPLE_BLINKY_DEMO_ONLY

    mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 在 main.c 中定义。

    mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 用于非常基本的 "blinky" 演示与全面测试和演示应用程序之间的切换。

  • mainINCLUDE_FAT_SL_DEMO

    mainINCLUDE_FAT_SL_DEMO 在 main_full.c 中定义。

    如果 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0,则 mainINCLUDE_FAT_SL_DEMO 无效。

    如果 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 和 mainINCLUDE_FAT_SL_DEMO 都设置为 1,则 FreeRTOS-Plus-FAT SL 用于创建 RAM 磁盘, 并且 FreeRTOS-Plus-CLI 用于通过 UART 提供 命令行接口。 CLI 提供对文件系统的访问权限。

    如果 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1, 且 mainINCLUDE_FAT_SL_DEMO 设置为 0,则 UART 用于 运行 COM 测试标准演示任务——并且,UART 端口必须配备一个环回连接器 (连接引脚 2 和 3)。


mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1 时的功能

如果 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 1,则 main() 将 调用 main_blinky 函数。

main_blinky() 函数创建一个简单的演示,其中包括两个 任务和一个队列。 一个任务通过队列将值 100 反复 发送到另一个任务。 每次接收消息时,接收任务都会切换一次 LED。 消息每 200 毫秒发送一次,因此 LED 的状态将 每 200 毫秒切换一次。


mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 时的功能

如果 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 设置为 0 ,则 main() 将 调用 main_full()。

main_full() 会创建一个全面测试和演示应用程序 当 mainINCLUDE_FAT_SL_DEMO 也设置为 1 时,将演示:

使用 RTOS CLI 访问 FAT FS 使用 115200 baud 的传输频率通过 UART 连接到 FreeRTOS-Plus-CLI。 在 CLI 中键入 "help" 以查看已注册命令的列表。 有些命令是通用演示, 而其他演示则允许查看和操纵文件系统。 演示的这一部分(在写入时)与 FreeRTOS-Plus-FAT SL Win32 模拟器演示页面中所描述的完全一样 ——可在其中观看显示正在使用的 CLI 的视频。

演示创建的其他大多数任务来自标准演示任务 集。 这些任务由所有 FreeRTOS 演示应用程序使用, 且它们除了演示如何使用 FreeRTOS API 函数并测试 RTOS 内核移植之外,没有特定的功能或目的。

演示项目还创建了一个“检查” 任务。 检查任务可定期查询标准演示任务, 确保其按预期运行。 此外,检查任务还会 切换 LED,以给出系统状态的视觉指示。 如果 LED 每三秒钟切换一次,则表示其尚未发现 执行中演示的任何问题。 如果 LED 每 200 毫秒切换一次, 则表示检查任务在至少一个任务中发现了问题。



构建说明

构建和执行演示应用程序 - IAR Embedded Workbench

请注意,IAR 项目会引用位于 /FreeRTOS-Plus/FreeRTOS/Demo/Common 目录中均引用了通用文件,因此 如果 /FreeRTOS-Plus 被删除,项目将无法编译。
  1. 在 Embedded Workbench IDE 中打开 FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5/IAR/RTOSDemo.eww

  2. 打开项目的 main.c 文件,设置 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY,以根据需求生成 简单的 blinky 演示或完整的测试和演示应用程序 。

  3. 在 IDE 的 "Project" 菜单中选择 "Build All"。

  4. 确保已使用合适的调试接口(J-Link、I-Jet 等) 将目标硬件连接至主机。

  5. 在 IDE 的 "Project" 菜单中选择 "Options" , 将出现选项窗口 。 在选项窗口中,首先选择 "Debugger" 类别, 然后确保 "driver" 设置对于您的调试器连接(J-Link,I-Jet 等)是正确的, 设置正确后关闭 Options 窗口。

  6. 在 IDE 的 "Project" 窗口中选择 "Download and Debug", 将已构建的可执行文件下载到 ARM Cortex-A9,并启动调试会话。


构建和执行演示应用程序 - DS-5

请注意, ARM DS-5 Eclipse 项目 同时使用虚拟文件夹和链接,这些虚拟文件夹和链接引用了 /FreeRTOS-Plus/FreeRTOS/Demo/Common 。 因此,在 Eclipse 项目浏览器中查看的[虚拟]文件结构体与 磁盘上查看的[实际]文件结构体不一致。
  1. 打开 DS-5,并在出现提示时创建新工作区或 选择现有工作区。

  2. 在 IDE 的 "File" 菜单中选择 "Import", 打开导入对话框。

  3. 在 "Import" 对话框中,选择 "General->Existing Projects Into Workspace", 然后浏览并选择 FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5 目录。 您将看到一个名为 "FreeRTOSDemo" 的项目。

  4. 确保已勾选 FreeRTOS_Demo,并确保 在单击 “Finish” 之前勾选 Copy Projects Into Workspace。

    将 RTOS 项目导入 ARM DS-5 Eclipse 工作区
    将 FreeRTOS_Demo 导入到 Eclipse 工作区,而无需 将其复制到工作区。

  5. 打开 main.c,设置 mainCREATE_SIMPLE_BLINKY_DEMO_ONLY,以根据需求生成 简单的 blinky 演示或完整的测试和演示应用程序 。

  6. 确保已使用合适的调试接口(D-Stream、U-Link 等) 将目标硬件连接至主机。

  7. 在 IDE 的 "Project" 菜单中选择 "Build All"。

  8. 构建完成后, 从 IDE 的 "Debug" 菜单中选择 "Debug Configurations...", 配置和运行适合您所选连接方法(如 D-Stream、U-Link 等)的调试配置。 下方可点击的屏幕截图显示了使用 D-Stream 调试器的 配置。

    D-stream Cortex-A 调试配置 D-stream Renesas RZ 调试配置 使用 ARM DS-5 进行 Renesas 调试
    点击图像放大



RTOS 配置和使用详情


FreeRTOS ARM Cortex-A 移植特定配置

请注意!请参阅 在 ARM Cortex-A 嵌入式处理器上使用 FreeRTOS 的用户指南页面, 请特别注意 configMAX_API_CALL_INTERRUPT_PRIORITY 设置的值和含义。

此演示的特定配置项目位于 FreeRTOS/Demo/CORTEX_A9_RZ_R7S72100_IAR_DS-5/Source/FreeRTOSConfig.h您可以编辑此文件中定义的常量,使其适合您的应用程序


[应用程序定义的]中断服务程序

此演示使用 Renesas 提供的驱动器来配置中断控制器, 以及安装应用程序定义的中断。 Renesas 驱动程序需要中断 服务程序 (ISR) 来接受 uint32_t 参数,尽管该参数 未实际使用且可以忽略。 因此,所需的 ISR 原型为:

    void Interrupt_Handler( uint32_t ulUnusedParameter );
如果 ISR 使得一个比当前执行的任务具有相等或更高优先级的任务 离开阻塞状态,则 ISR 必须在退出之前请求 上下文切换。 此时,中断服务程序会中断一个 RTOS 任务, 但会返回到另一个 RTOS 任务。

宏 portYIELD_FROM_ISR()(或 portEND_SWITCHING_ISR())可用于 从 ISR 内请求上下文切换。 请参阅以下源代码片段示例。 ISR 示例 使用信号量与任务(未显示)同步,并调用 portYIELD_FROM_ISR() 以确保中断直接返回到任务。 (文件 serial.c 中的 prvRXI_Handler() 函数提供了另一个示例。)

void Dummy_IRQHandler( uint32_t ulUnused )
{
long lHigherPriorityTaskWoken = pdFALSE;

    /* The parameter is not used. */
    ( void ) ulUnused;

    /* Clear the interrupt if necessary. */
    Dummy_ClearITPendingBit();

    /* This interrupt does nothing more than demonstrate how to synchronise a
    task with an interrupt.  A semaphore is used for this purpose.  Note
    lHigherPriorityTaskWoken is initialised to pdFALSE. */
    xSemaphoreGiveFromISR( xTestSemaphore, &lHigherPriorityTaskWoken );

    /* If there was a task that was blocked on the semaphore, and giving the
    semaphore caused the task to unblock, and the unblocked task has a priority
    higher than or equal to the currently Running task (the task that this
    interrupt interrupted), then lHigherPriorityTaskWoken will have been set to
    pdTRUE internally within xSemaphoreGiveFromISR().  Passing pdTRUE into the
    portYIELD_FROM_ISR() macro will result in a context switch being pended to
    ensure this interrupt returns directly to the unblocked, higher priority,
    task.  Passing pdFALSE into portYIELD_FROM_ISR() has no effect. */
    portYIELD_FROM_ISR( lHigherPriorityTaskWoken );
}

只有以 "FromISR" 结尾的 FreeRTOS API 函数可以从 中断服务程序中调用,而且相应中断的优先级必须 小于或等于 configMAX_API_CALL_INTERRUPT_PRIORITY 配置常量设置的 优先级(即数值较高的值)。


FreeRTOS 使用的资源

相关信息请参阅在 ARM Cortex-A 嵌入式处理器上使用 FreeRTOS 页面。 本演示项目配置为从 OSTM0 外围设备生成 tick 中断。


内存分配

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


其他事项

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




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