3

我目前正在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

编辑:

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

4

1 回答 1

3

如您所见,更改为 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 库,可以包含在 Arduino 中,以便在任何 AVR 设备上体验 freeRTOS。

于 2014-01-26T01:00:55.880 回答