【问题标题】:Porting FreeRTOS to Arduino MEGA 2560 Rev3 (ATmega2560)将 FreeRTOS 移植到 Arduino MEGA 2560 Rev3 (ATmega2560)
【发布时间】:2025-09-11 20:25:03
【问题描述】:

我目前正在 Arduino 平台上实现一个基于 FreeRTOS 的程序。

我想在这个项目中使用Arduino MEGA 2560 Rev3(基于ATmega2560),但我找不到工作的port.c 文件。

有人可以分享一个工作的port.c吗?

我正在使用 Eclipse IDE、WinAVRAVR PluginArduino Lib、FreeRTOS 7.6.0(我最终将切换到 v8.0.0)和 C++ 作为主要编程语言。

谢谢。

编辑:

我遇到了avrfreertos,它为 ATmega2560 生成了一个 FreeRTOS 静态库,但是当我将我的项目链接到它时,我收到以下错误:

c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/bin/ld.exe: section .task [00003282 -> 0000328f] overlaps section .data [00003282 -> 0000339d]
make: *** [MY_PROJECT_NAME.elf] Error 1

编辑:

我找到了解决链接问题的方法

【问题讨论】:

    标签: c++ c arduino atmega freertos


    【解决方案1】:

    如您所见,更改为 avr6.x 解决了您的问题。 portmacro.h 文件中包含一个 .task 属性,用于将您定义的 freeRTOS 任务保存在 flash 的下部。

    好消息。最新的 avrbinutils 和 avrlibc 1.8.0 中有一些更新,其中包含一个 .lowtext 属性,该属性与我添加到 avr6.x 文件中的 .task 属性具有相似的功能。

    在 freeRTOS800 的端口中,我将 portmacro.h 中定义的属性更改为指向 .lowtext。这意味着不再需要更改 avr6.x 文件。

    要么更改为使用 freeRTOS800 端口 AVRfreeRTOS,要么自己在 portmacro.h 中进行更改。

    为了进一步参考,我制作了一个Arduino Library,可以包含在 Arduino 中,以便在任何 AVR 设备上体验 freeRTOS。

    【讨论】:

    • 感谢 feilipu 的回复 :) 我想使用 freeRTOS800 端口,但在 freeRTOS800_All_Files/freeRTOS800 中似乎找不到 eclipse 项目文件。另外,由于我使用的是 WinAVR,我无法访问最新的 avrbinutils 或 avrlibc(我没有在 windows 或 ubuntu 上找到任何最近的 AVR 工具链)所以我现在必须坚持使用 7.5.0 .
    • 如果你没问题,我想问你最后两个问题: 1. 编译 AVRfreeRTOS 时是否需要包含所有 lib_* 部分(我想要一个“最小”我的项目中的 freeRTOS,只有任务、时间/延迟函数、队列和 sem/互斥体)? 2. 是否可以仅提取特定于端口的文件(即port.cportmacro.h)并将它们与官方 FreeRTOS 版本一起使用?如果是这样,我将如何进行? (我已经尝试使用您提供的文件,但它们依赖于“time.h”)
    • 是的,可以删除 lib_* 文件中的所有内容。它们是附加值。 time.h 内容与尚未发布的 avrlibc 的上游版本相关。我把它吸进了 port.c,因为我想要一个可以计算秒数的系统时钟(滴答声),因此可以为计时器等做一些基于酷时间的计算。
    • 如果你想回到过去并从 sourceforge 获得 freeRTOS730_All_Files.zip,我认为这早于 time.h 的东西。只需对剩余的文件进行比较,即可查看从 port.c 和 portmacro.h 中删除的内容。 freeRTOS 实际上只是您记下的几个文件。我添加的只是让我的生活更轻松地处理不同硬件的扩展。您只需要您提到的文件、文件的包含、它们的标题、内存管理(每次只有一个文件应该处于活动状态)以及可移植文件 port.c 和 portmacro.h。
    • 到工具链。如果您使用 Ubuntu 作为开发平台,那么可以在 debian Sid 存储库中搜索好东西。 gcc-avr avr-libc binutils-avr 目前在 Ubuntu LTS 上运行良好。