題:
帶有Java API的微控制器
sterz
2010-12-15 21:58:20 UTC
view on stackexchange narkive permalink

我的硬件團隊計劃在將來的項目中使用Atmel AVR 8位微控制器。

據我所知,它必須使用C語言進行編程。我發現了 JVM用於AVR,儘管它比Atmel的本地C庫更受限制。

您能建議我一個支持Java的8位微控制器嗎?

PS。我不懂C,而且我對微處理器編程沒有經驗。

假設有人在賣一條大飄浮的裙子和一些長桿,他們說您可以和汽車一起在湖上釣魚。經過三天的艱苦努力,您將車駛入湖中約15英尺,然後您的汽車翻倒並下沉。你會很生氣的。您帶著漂亮的獨木舟走過當地的船屋。獨木舟是Micro的C編譯器,而帶有棍棒的漂浮汽車是8位微控制器上的Java。幸運的是,這沒有發生……您是在問我們哪裡可以找到花車。因此,作為您的父親,讓我說:“您在想什麼?!乘獨木舟!”
我無法用棍棒想像漂浮的裙子車。你有照片嗎?
@darron-不應該是在org.buoyant包中實現boat接口和pole對象的big_floating_skirt對象,這些對象與java.net具有某種奇怪的繼承模式現在不記得了(但是在UML中有清楚的描述)?
@sterz:我認為,在沒有微處理器背景的情況下,您可能沒有意識到Java在8位微型計算機上的實際位置是多麼地不合理。抱歉,如果我的第一句話聽起來很刺耳,...一個簡單的“不要那樣做”似乎太弱了。
@darron:感謝“用大砲射擊鳥”的類比
儘管我對嵌入式Java持懷疑態度,但我只是發現AVR32具有部分基於硬件的JVM,因此不得不將其添加到此問題中-請參閱他們的[Java技術參考](http://www.atmel.com /dyn/resources/prod_documents/doc32049.pdf)
您想做什麼? MCU用C(可能是C ++)編程。至少在業餘愛好者社區中有例外,但是基本上人們是用C語言編寫MCU的。如果嘗試查找並重新引導理論上可用的JVM比學習C和構建產品要花費更多的時間和麻煩,我不會感到驚訝。根據您的需求,它可能很容易學習,甚至不需要分配micros,這樣您就可以在內存管理方面有所作為-從GC語言進入C語言的最大幽靈之一。
我想知道是否有可能將Java卡(tm)刻錄到AVR
十 答案:
Kevin Vermeer
2010-12-16 00:45:28 UTC
view on stackexchange narkive permalink

如果您對微處理器/微控制器編程領域沒有經驗,那麼您可能應該首先學習C,以便您了解何時以及為什麼Java對大多數微控制器項目來說是一個糟糕的選擇。

您是否閱讀了對鏈接的JVM的限制?它包括以下問題:

  • 少至512字節的程序存儲器(不是KB,並且絕對不是MB)
  • 少至768字節的RAM(其中
  • 在8 Mhz AVR上,每秒大約20k Java操作碼。
  • 僅包含java.lang.Object,java.lang.System,java.io.PrintStream,java.lang.StringBuffer,JVM控件類和本機IO類。您將無法導入java.util。*;並獲取不在此列表中的所有類。

如果您不熟悉這些限制的含義,請確定您有計劃B,如果事實證明您不能由於篇幅和速度的限制,實際上使用Java進行項目。

如果您仍然想使用Java,也許是因為您希望該設備由許多只懂Java的人編程,所以我強烈建議您購買更大的硬件,可能是運行嵌入式Linux的硬件。 。請參閱 Oracle的此頁面以獲取運行嵌入式JVM所需的一些規格,在他們討論的FAQ中,他們建議至少32MB的RAM和32MB的Flash。大約是您要查看的AVR的RAM的32,000倍和Flash的1,000倍。 Oracle的 Java Embedded Intro頁面詳細介紹了JVM的限制。您可能會猜到,他們的語氣比我的Java更友好。請注意,這種硬件比8位AVR更加難以設計。

我是一名計算機工程專業的學生,計算機科學專業的未成年人。我大學的CS系喝醉了Java Kool-aid,因此工程程序中的許多學生都只知道Java(這對程序員來說是一種可悲的狀況,如果您不這樣做,至少要學習一些Python或C ++)想學習C ...),所以我的一位教授為擁有一年Java經驗的學生髮布了 C作弊表。只有75頁;我建議您在決定之前先閱讀或略讀。在我看來,C是開發嵌入式項目的最有效,持久和專業的語言。

另一個值得考慮的替代方法是 Arduino框架。它使用 Wiring語言的精簡版本,就像沒有對像或標頭的C ++。它可以在許多AVR芯片上運行,絕對不限於它們的硬件。

總而言之,
XKCD Golden Hammer
替代文本:我花了五次嘗試找到合適的方法,但我設法最後挽救我們的夜晚-甚至不是船。

我曾經喜歡過的最喜歡的漫畫之一。
嗯,很酷的助手。 +1
我想知道JVM與幾十年前可用的“ Java iButton”相比如何嗎?
@kevin“ C備忘單”鏈接不起作用!請更新!
Toby Jaffey
2010-12-16 02:22:31 UTC
view on stackexchange narkive permalink

Atmel AVR最受歡迎的編程環境是 Arduino。 Arduino語言是C ++的子集。

Arduino“草圖” /程序在語法上看起來與Java非常相似。 Arduino衍生的接線語言具有C ++( Arduino),Java( Processing)和Javascript( processing.js)。

這兩種語言都具有相同的聲明樣式,循環結構和算術運算符,這是由於它們在Algol68中具有相同的血統。通常,Arduino中的所有對像都在全局或堆棧上聲明,因此像Java一樣,成員函數使用運算符(例如, LED.flash())調用。

Java程序員會非常熟悉該語言-但是,重要的是,Arduino草圖被編譯成本機代碼,可以在全硬件訪問下全速運行。這對於從微控制器中獲得最大收益至關重要。

這裡是 API

Arduino提供了開發所需的一切:低成本硬件,免費的集成開發環境和引導加載程序(因此您可以通過USB /串行加載代碼)。

更準確地說,它是(最有可能)是最受業餘愛好者歡迎的編程環境,但不一定適用於所有AVR開發人員。
我斷言Arduino在用戶數量上是最受歡迎的,但不是包含Arduino固件的產品單元數量。那裡有很多Arduino用戶
儘管編譯了“草圖”,但使用C或彙編語言可以大大提高IO訪問速度。
C ++和Java在我看來非常不同。 (“ Arduino”是* just * C ++,帶有一些怪異的include結構來隱藏一些技術知識。)
@Nick在某種意義上類似,類似於Algol http://en.wikipedia.org/wiki/Comparison_of_ALGOL_68_and_C%2B%2B#Comparison_of_the_assignment_and_equality_operators Java和C ++彼此之間的距離非常接近,而不是彼此接近的BASIC或彙編語言。
但我為缺少指針而哭泣。
-1。 C ++與Java幾乎沒有區別。這是一個很小但很重要的要點,如果您可以以聽起來不太容易引起誤解的方式進行澄清,那麼我很高興刪除我的反對意見。
@Jason S“ Arduino“草圖” /程序看起來與Java非常相似”
這是我的反對意見。 C ++和Java和Javascript以及其他幾種語言在語法上都非常相似:foobar.functioncall(argument)是它們之間的通用方法調用,正如您所正確提到的,共享運算符,循環結構和`{}`用於語句定界符。但是語法和這些基礎知識可能只是使用某種語言所需知識的10%。然後有一些成語:C ++中的諸如#include文件和內存分配以及運算符重載之類的事物;或Java之類的軟件包,接口和註釋。其他90%的精通程度則大不相同...
...還包括庫差異,工具差異和其他細微差別(Java中不存在C的“無符號”和C ++的多重繼承; C中不存在Java的內置字符串處理功能)所以如果您說的是C ++和Java的語法相似,我可以購買(對比Java和Haskell或Python或Scheme),但是實際上的“語言”非常不同。入門並不難,但是一種語言的特定語言體驗不會使您走另一種語言那麼遠。
“ Arduino的“草圖” /程序在語法上與Java非常相似“
啟發的真正途徑是鼓勵男孩學習C,而不是為遇到的每種螺母找出類型稍有不同的大錘。
Dave
2010-12-15 22:19:52 UTC
view on stackexchange narkive permalink

我想明確地說,我以前從未使用過標槍,但一年前曾經有一個標槍。視差可能已經獲得了它們或某些東西,因為現在出現的唯一一個是“標槍印章”。幾年前,曾經有一家名為Velocity Semiconductor的公司,該公司(據說)直接替代了Rabbit Semiconductor的核心模塊,並且它具有硬件上的JVM,但該公司顯然已經消失了。祝您搜索順利!

vicatcu
2010-12-16 03:03:17 UTC
view on stackexchange narkive permalink

Sun Microsystems曾經製造過一個稱為Sun Spot的平台,該平台基本上是嵌入式Java平台。現在顯然Sun Microsystems已經不在了(Oracle購買了它們),但是看來您仍然可以購買Sun Spots- http://www.sunspotworld.com/products/。我對在嵌入式環境中使用Java的想法並不抱有太大的想法(工作恕我直言的抽象級別錯誤),但這似乎是Java最自然的嵌入式平台。請注意這些東西的規格-它們是重型180MHz / 512k RAM,並且對於入門工具包來說價格不便宜,為400美元。

所以我將成為Arduino倡導者的第二或第三名這個問題。如果您需要幫助,有一個社區的地獄可以為您提供支持。而且,如果您需要外圍硬件,請在Google上查找“ Arduino Shields”,並感到驚訝-您可以執行任何操作,從控制伺服電機到使用正確的屏蔽組合跳至802.11無線網絡。沒有一些練習時間來學習C(指針說什麼!?)是不切實際的,但是您可以在很短的時間內開始編寫Arduino草圖。您還可以在30美元左右獲得“真正的” Arduino平台並進行克隆(例如RBBB或DorkBoard)的價格不到15美元。

啊,是的,我兩年前在Maker Faire上看到了!很酷的設備。
SunSpots的殺手級功能不是Java,而是內置的無線功能,允許它們彼此通信。如果您想彼此了解或與家庭進行輕鬆的無線通信,那將非常非常好。
Connor Wolf
2010-12-18 15:12:12 UTC
view on stackexchange narkive permalink

Parallax製作 Javelin Stamp,這是一種運行JVM的CoM(模塊計算機)。

它的價格為60美元,並執行約8500條Java指令/秒。

另外,PCB是粉紅色的(真的!)

Tim Williscroft
2010-12-16 04:58:30 UTC
view on stackexchange narkive permalink

Ajile系統製造各種本地嵌入式,實時Jav​​a芯片和評估板。

它們運行裸機Java。

www.ajile.com製造芯片和評估板。

www.systronix.com銷售各種嵌入式Java硬件。

我使用ajile的AJ-100進行苛刻的工作,它們非常好用。不,它們不像avr便宜,但它們像低端奔騰處理器一樣處理數據。 > Ajiles的芯片可在1微秒內響應中斷(中斷等待時間)。

“永遠不要在嵌入式C系統上這樣做”做什麼? 1個延遲?高速?幾乎不。我認為您會忘記1GHz + DSP,許多ARM和許多其他產品。很多人只使用裸機C(沒有OS等)來編寫這些代碼。我將為您提供這種類型的東西是在嵌入式(在完整的Linux規模的OS之外)中使用Java的一種半途而廢的方式……儘管快速瀏覽了Systronix之後,我會說您似乎正在付出如此高的溢價帶來了一點便利。我肯定會去嵌入式ARM。而且,到Systronix的那些項目的許多鏈接都已失效。
哦,TINI發瘋了。在8051上的ROM中的JVM。當我想要簡單的以太網時,我愚蠢地嘗試了一種方法,甚至在C語言中,這種情況也被普通公司LAN的廣播流量所淹沒。如果他們像Parallax的Basic Stamps一樣銷售產品,那將是一個很好的產品,但事實並非如此。它不適合任何非愛好者目的。
這些芯片的運行頻率為幾百兆赫茲。在比這些設備慢100倍的處理器上以C語言編程時,可能會產生1uS的延遲。您可以使用等效的處理器來做一些很酷的事情(例如iPad和Droid手機),但是在問題中將其發佈為8位AVR的替代品並不是一個蘋果對蘋果的比較。
@reemrevnivek:鑑於OP需要Java,我認為Ajile部分是合適的,因為它是運行嵌入式Java(在完整的Linux OS或類似系統之外)的唯一合理方法之一。如果最後一段和TSTIK位不存在,我什至會投票贊成。
webclimber
2010-12-20 01:39:48 UTC
view on stackexchange narkive permalink

我的個人經驗是,使用AVR進行編程和入門非常容易,我也是來自Java的多年開發者。在使用arduino草圖大約2個月之後,我放棄了環境並開始使用avr-在gcc中,像avrfreaks這樣的網站可以輕鬆找到常見問題的答案。 (我仍然在值得信賴的Arduino Duemillenove上完成所有工作)

使用eclipse進行編譯和“部署”(即寫入芯片),這也很好,因為我不必處理另一個IDE

與編程語言本身相比,我認為實際上更難理解寄存器,16位寄存器並以適當的順序(中斷,計時器,硬件PWM)讀取它們。

Chris Stratton
2010-12-16 11:08:55 UTC
view on stackexchange narkive permalink

雖然我通常屬於“學習C語言並了解處理器實際做什麼”的陣營,而這與嵌入式工作有關,但值得指出的是,小型手臂芯片並不比AVR貴那麼多,而且在在jvm上處理簡單任務的合理位置。

Toby Jaffey
2011-11-10 16:05:39 UTC
view on stackexchange narkive permalink

NanoVM是一種Java虛擬機,旨在在8位AVR上運行

(從主頁開始)

它不是功能齊全的Java VM,而且永遠不會。它將始終限於Java語言和標準Java庫的一小部分,以及一些特定於應用程序的方法。此外,這並不意味著取代C作為對微控制器進行編程的標準方法。與C或彙編程序相比,它的靈活性較差且性能較低。

NanoVM是一種為基於微控制器的設備提供有限但可控制的編程接口的方法。由於大多數特定於硬件的代碼都是NanoVM本身的一部分,因此用戶可以專注於應用程序本身。如果為用戶提供了配備NanoVM的設備,則無需考慮硬件本身。此外,他不需要任何特定於目標的編譯器等。他只需要一個標準的Java編譯器和NanoVMTool,它本身就是用Java編寫的。因此,整個開發鏈可以在具有Java編譯器並可以運行Java代碼的任何設備上工作。通過NanoVM提供的硬件抽象,用戶甚至不必關心目標所基於的微控制器類型。相同的java編譯器和相同的NanoVMTool可以與在任何類型的microontroller上運行的任何基於NanoVM的系統一起使用。

Gordon Williams
2013-03-05 19:24:42 UTC
view on stackexchange narkive permalink

它不是完全Java或8位,但是有一個Java解釋器可用於低功耗ARM微控制器,稱為 Espruino



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...