2011-10-25 34 views
8

哪些RTOS可以做Ada有開源/免費的交叉編譯器可用,支持多任務/多線程?Ada多任務實時操作系統支持開源交叉編譯器

我有一個Atmel AT90USB162芯片,我想用Ada編程。我的第一個選擇是使用AVR-Ada進行編程,但由於它沒有任務支持,所以沒有選擇(現在我對如何支持它的任務沒有任何線索)。所以我需要一個更強大的方法。我想過使用QNX,但它比我的芯片架要複雜得多。

我得到了AVR芯片支持uC/OS-II和FreeRTOS的信息。 FreeRTOS或uC/OS-II有免費的Ada交叉編譯器嗎?

謝謝。

回答

6

RTEMS至少支持某些體系結構的GNAT。但是,自從您提到Atmel AVR架構以來,由於架構限制(主要是可用內存),可能不支持這種架構。 RTEMS非常成熟(它在Linux發明之前就是開源的),並且在許多項目中被證明是非常有用的。

另一個選項是MarteOS,它支持Ada。但是,架構的支持一直非常有限(最初只有x86)。

所以,這取決於你的項目的限制,你最有可能有三種選擇:

  1. 陪着AVR,寫你自己的運行時支持任務的阿達;
  2. 重新考慮您是否真的需要運行時支持任務;或
  3. 將您的架構升級到支持Ada的RTOS支持的架構。

(我第一次使用GNAT Ada的RTEMS基於ARM9TDMI核心在2004 - 2005年左右的專利項目。)

+1

Hi Schedler。我檢查了RTEMS的README.configure文檔,也支持AVR。所以我現在要更詳細地閱讀文檔,但我想這對我的項目使用非常有利。謝謝。 – Rego

+0

開發RTEMS,OAR公司的公司所在的辦公套件與我現在正在工作的建築物相鄰。我每天午餐時在公園散步,並穿過大OAR標誌。 –

+0

@MarcC - 你不想在沒有它們的情況下成爲小溪! ;-) –

6

那麼,我知道唯一的Ada編譯器就是Free Software就是Gnat。這樣可以將您的問題簡化爲「Gnat支持分配任務的RTOS」?

ACT保留一列supported platforms here。右側的列大部分看起來像RTOSes或僞RTOSes。 FreeRTOS和uC/OS-II似乎不在名單上。

我注意到他們的名單底部的「裸板」下的一個條目閱讀「AVR微控制器ELF格式(託管在Windows)」下。這可能是你正在尋找的。不過,我認爲他們的裸板端口不支持任務也很有可能。實際上,考慮一下,這可能是ACT對AVR-Ada的名稱。你必須檢查ACT。

此外,應該指出的是,很難找到許多更深奧的海灣合作委員會目標的「免費」二進制文件。這意味着你可能會被迫從源代碼中自己構建編譯器(甚至不願意爲心中暗藏),或者實際上從ACT購買支持包來獲得它。

5

我原來RTEMS開發商之一,一直是RTEMS項目引自它從陸軍研究項目過渡到傳統的自由軟件項目。 我們非常努力地將RTEMS作爲一個高質量的產品與一個偉大的社區保持一致。

AVR是一個非常小的目標,RTEMS端口不完整。即使RTEMS端口已經完成,我也不認爲有足夠的地址空間支持GNAT/RTEMS的AVR。 GNAT將每個Ada任務映射到POSIX線程,就像在GNU/Linux上一樣,「真正的Ada」環境的運行時間佔用空間很大。我記得PowerPC上400K代碼範圍內的最小可執行文件。相比之下,RTEMS最小的C可執行文件可能在同一個目標上的32-40k範圍內。

我對AVR-Ada並不熟悉,但我會同意,它不太可能爲您提供完整的Ada環境。

該RTEMS項目有我們用來構建GNU工具和測試它們的腳本。如果你有興趣爲自己奇怪的目標構建工具,他們可以成爲一個很好的指導。對於嵌入式目標,這個過程並沒有太多變化。

馬克C ..因爲你在亨茨維爾,我們將不得不聚在一起午餐有時。我們的辦公室與橋街大致相對。我真的不會遇到很多RTEMS用戶。 :(

+0

非常明確您的迴應,@,謝謝。當@Schedler談論它時(我之前並不知道RTEMS),我曾瀏覽過RTEMS文檔。儘管沒有完整的端口,但我發現使用AVR非常有趣,即使有所有限制。至少出於學習的目的。如果您將它們與某些Power PC或SPARC架構進行比較,則大多數AVR芯片非常有限。我在VxWorks上的Power PC上開發了一些應用程序,並且他們的編程範例完全不同。 – Rego

+0

但AVR用戶通常習慣於這些限制,而使用它的應用程序通常不需要深入的實時約束。在RTEMS文檔「RTEMS CPU體系結構補充」中,我發現可用於AVR的功能非常有趣,因此我建議一些MSc學生使用RTEMS作爲一項挑戰來研究在AVR中實現某些功能的可能性。 – Rego

+0

AVR-Ada是一個夢幻般的開源項目,但現在它並不完整。如果可以的話,我會選擇使用它,因爲它是以非常直觀的方式實現的。其目的是爲某些微控制器實現一個8位窗口交叉編譯器,但它缺少幾個很好的Ada功能,這些功能都是使用Ada的良好口味。例如,它不支持任務,既不例外。它看起來今年還會有新的發佈,但不幸的是,目前的技術水平不可能用於搶先式應用。我希望下一個版本解決這個問題 – Rego

3

我們很樂意看到的AVR口變得更加完整!鼓勵您的學生加入我們的開發郵件列表,並提出問題。

RTEMS是同一類RTOS作爲VxWorks的。這給了它一個這些特性集必須進行修剪,以適應較小的8位和(某些)16位CPU。我們面臨的挑戰是確定一個「Tiny/RTEMS」功能配置文件,RTEMS具有非常高的可擴展性,但是當您知道哪些功能集對該類CPU有意義,它沒有具體的目標。請幫助定義用戶需求和目標。

另外,我們真的很想擁有一個運行在免費模擬器上的BSP,每個目標架構。 SimulAVR是我在港口積極工作時所使用的。 AdaCore使用了一種叫做avrtest的東西,但它更受限制 - 有用但有限。

+0

謝謝。我會建議他們加入清單。我想這是他們學習的好機會。 – Rego