2014-01-23 340 views
2

我目前在Arduino平臺上實現了一個基於FreeRTOS的程序。將FreeRTOS移植到Arduino MEGA 2560 Rev3(ATmega2560)

我想使用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 

編輯:

我發現鏈接問題

修復

回答

3

你的問題是由變化解析爲avr6.x爲你找到。 portmacro.h文件中包含一個.task屬性,該屬性需要在Flash的下半部分保留您定義的freeRTOS任務。

好消息。最新的avrbinutils和avrlibc 1.8.0包含一個.lowtext屬性,它具有與添加到avr6.x文件中的.task屬性類似的功能。

在freeRTOS800的端口中,我將portmacro.h中定義的屬性更改爲指向.lowtext。這意味着不再需要更改avr6.x文件。

要麼更改爲使用freeRTOS800端口​​,要麼自己修改portmacro.h。

爲了進一步參考,我製作了一個Arduino Library,它可以包含在Arduino中,以便在任何AVR設備上獲得有關freeRTOS的體驗。

+0

感謝您回覆feilipu :) 我想使用freeRTOS800端口,但我似乎無法在'freeRTOS800_All_Files/freeRTOS800'中找到eclipse項目文件。另外,由於我使用的是WinAVR,因此我無法訪問最新的avrbinutils和avrlibc(我在windows或ubuntu上沒有找到任何最新的AVR工具鏈),所以現在我必須堅持使用7.5.0 。 – 865719

+0

如果可以的話,我想問你2個最後的問題: 1.編譯AVRfreeRTOS時是否需要包含所有'lib_ *'部分(我想在我的項目中有一個「minimal」freeRTOS ,只有任務,時間/延遲功能,隊列和sem/mutex)? 2.是否可以只提取端口特定的文件(即'port.c'和'portmacro.h')並將它們與官方FreeRTOS版本一起使用?如果是這樣,我將如何繼續? (我已經嘗試使用您提供的文件,但它們對「time.h」有依賴關係) – 865719

+0

是的,可以刪除lib_ *文件中的所有內容。它們增加了價值。 time.h的東西與尚未發佈的avrlibc的上游版本相關。我把它吸入到port.c中,因爲我想要一個計時秒數的系統時鐘(tick),因此可以爲定時器等做一些很酷的基於時間的計算。 – feilipu