我目前正在Arduino平台上实施一个基于FreeRTOS的程序。
我想在这个项目中使用Arduino MEGA 2560 Rev3(基于ATmega2560),但我找不到工作的port.c文件。
有人可以分享一个有效的port.c吗?
我正在使用Eclipse IDE,WinAVR,AVR Plugin,Arduino 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
修改
我找到了解决链接问题的方法
答案 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的使用体验。