将FreeRTOS移植到Arduino MEGA 2560 Rev3(ATmega2560)

时间:2014-01-23 14:44:46

标签: c++ c arduino atmega freertos

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

修改

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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