Java APIを備えたマイクロコントローラー


10

私のハードウェアチームは、Atmel AVR 8ビットマイクロコントローラーを将来のプロジェクトで使用することを計画しています。

私の知る限り、Cでプログラムする必要があります。AVR用のネイティブCライブラリよりも制限がありますが、AVR用のJVMを見つけました。

Javaをサポートする8ビットマイクロコントローラーを提案していただけますか?

PS。私はCを知りませんし、マイクロプロセッサプログラミングの経験がありません。


28
誰かが大きなフローティングスカートといくつかの長いポールを販売していて、車で湖で釣りに行くことができると言ったとしましょう。それを置くために3日間奮闘した後、あなたの車がひっくり返って沈む前にあなたは湖におよそ15フィートを得る。お父さんは本当に腹を立てるでしょう。素敵なカヌーで地元のボートショップを通り過ぎました。カヌーはマイクロのCコンパイラであり、スティック付きの浮遊車は8ビットマイクロコントローラー上のJavaです。幸いなことに、これは起こりませんでした...あなたはフロートをどこで見つけることができるか私たちに尋ねています。それで、あなたのお父さんとして、私は「あなたは何を考えているのですか!カヌーを手に入れよう!」と言いましょう。
darron

6
フロートスカートの車を棒で視覚化できません。写真はありますか?
endolith

8
@darron- big_floating_skirtこれboatは、org.buoyantパッケージ内のインターフェースを実装するオブジェクト、および私が今は覚えていない(UMLに明確に記述されている)pole何らかの変な継承パターンを持つオブジェクトでjava.netはないでしょうか?
ケビンフェルメール

2
@sterz:マイクロプロセッサの背景がないので、8ビットマイクロ上のJavaが実際にどれほど場違いであるかを理解していなかったかもしれません。私の最初のコメントが厳しいように聞こえた場合は申し訳ありません...単純な「それをしないでください」はあまりにも弱そうに見えました。
ダロン

1
@darron:「大砲で鳥を撃つ」類推に
感謝

回答:


32

マイクロプロセッサ/マイクロコントローラプログラミングの分野に慣れていない場合は、Cを最初に学習して、Javaがほとんどのマイクロコントローラプロジェクトに適さない場合とその理由を理解できるようにしてください。

リンクしたJVMの制限を読みましたか?次の問題が含まれます。

  • わずか512バイトのプログラムメモリ(KBではなく、MBではありません)
  • わずか768バイトのRAM(変数が移動する場所。この制限により、文字列は768文字に制限されます。)
  • 8 Mhz AVRで毎秒約20kのJavaオペコード。
  • java.lang.Object、java.lang.System、java.io.PrintStream、java.lang.StringBuffer、JVMコントロールクラス、およびネイティブIOクラスのみが含まれます。java.util。*をインポートすることはできません。このリストにないすべてのクラスを取得します。

これらの制限の意味をよく理解していない場合は、スペースと速度の制限のために実際にJavaでプロジェクトを実行できないことが判明した場合は、プランBがあることを確認してください。

それでもJavaを使いたい場合は、おそらくJavaしか知らない多くの人がデバイスをプログラムすることを期待しているため、組み込みLinuxを実行する可能性がある、より大きなハードウェアを入手することを強くお勧めします。組み込みJVMを実行するために撮影するいくつかの仕様については、Oracleのこのページを参照してください。彼らの議論のFAQで、最低32MBのRAMと32MBのフラッシュを推奨しています。それはあなたが見ているRAMの約32,000倍とAVRのフラッシュの1,0000倍です。OracleのJava Embedded Introページでは、JVMの制限について詳しく説明しています。彼らの声のトーンは、ご想像のとおり、私のものよりもはるかにJavaフレンドリーです。この種のハードウェアは、8ビットAVRよりも設計がはるかに難しいことに注意してください。

私はコンピュータサイエンスの未成年のコンピュータエンジニアリング学生です。私の大学のCS部門はJava Kool-aidを飲んでいるので、エンジニアリングプログラムの多くの学生はJavaしか知りません(これはプログラマにとって悲しい状況です。少なくとも、PythonまたはC ++を習得しなければCを学びたい...)なので、私の教授の1人が、Javaの1年の経験を持つ学生向けのCチートシートを公開しました。わずか75ページです。決定する前に、それを読むか、読み飛ばすことをお勧めします。私の意見では、Cは組み込みプロジェクトを開発するための最も効率的で耐久性のある専門的な言語です。

考慮すべきもう1つの代替策は、Arduinoフレームワークです。これはオブジェクトやヘッダーのないC ++のような、Wiring言語の簡略を使用しています。多くのAVRチップで実行でき、ハードウェアに限定されません。Cに直接ジャンプするよりも簡単に習得できます。

結論として、
XKCDゴールデンハンマー
Altテキスト:適切なものを見つけるために5回試行しましたが、最終的には、ボートではないにしても、私たちはなんとか夜を救出しました。


5
私が今まで楽しんだ私のお気に入りの漫画の1つ。
Kortuk

1
うーん、クールエイド。+1
tyblu

そのJVMが数十年前に利用可能だった「Java iButtons」とどのように比較されるのでしょうか。
スーパーキャット2013年

@kevin "Cチートシート"リンクが機能しない!更新してください!
charansai

6

Atmel AVRの最も人気のあるプログラミング環境はArduinoです。Arduino言語はC ++のサブセットです。

Arduinoの「スケッチ」/プログラムは、Javaと構文的に非常によく似ています。配線言語 Arduinoの派生からは、C ++(での実装を持っているアルドゥイーノ)、ジャワ(処理)とJavascript(processing.js)。

両方の言語は、Algol68で共通の祖先があるため、同じ宣言スタイル、ループ構造、算術演算子を共有します。通常、Arduinoのすべてのオブジェクトはグローバルまたはスタックで宣言されるため、Javaのように、メンバー関数は.演算子(例:)で呼び出されLED.flash()ます。

言語はJavaプログラマーにとっては非常に使い慣れていますが、重要なことに、Arduinoのスケッチは、完全なハードウェアアクセスでフルスピードで実行されるネイティブコードにコンパイルされます。これは、マイクロコントローラーを最大限に活用するために重要です。

こちらがAPIです。

Arduinoは、低コストのハードウェア、無料の統合開発環境、ブートローダー(USB /シリアル経由でコードをロードできるようにするため)に必要なすべてを提供します。


3
より正確に言うと、それは(おそらく)愛好家に最も人気のあるプログラミング環境ですが、必ずしもすべてのAVR開発者を網羅しているわけではありません。
pfyon

2
Arduinoはユーザーの数で最も人気があるが、Arduinoファームウェアを含む出荷された製品ユニットの数ではないことを私は断言します。Arduinoユーザーはたくさんいます
Toby Jaffey

1
「スケッチ」はコンパイルされますが、IOアクセス速度は、Cまたはアセンブリを使用して大幅に改善できます。
tyblu 2010

1
C ++とJavaは私には非常に異なって見えます。(「Arduino」は単なる C ++であり、いくつかの奇妙なインクルード構造があり、いくつかの技術的なビットを隠しています。)
Nick T

2
@Jason S "Arduino"スケッチ "/プログラムはJavaに非常によく似ています"
Toby Jaffey

4

以前に使用したことがないことを明確にしたいのですが、1年前にはJavelinと呼ばれていました。「Javelin Stamp」だけが登場するので、Parallaxがそれらを取得した可能性があります。数年前には、Rabbit Semiconductorのコアモジュールを(おそらく)ドロップインで置き換えたVelocity Semiconductorという会社もあり、ハードウェアにJVMがありましたが、その会社は消滅したようです。検索で頑張ってください!


4

Sun Microsystemsは、基本的には組み込みJavaプラットフォームであるSun Spotと呼ばれるプラットフォームを作成するために使用していました。現在、Sun Microsystemsはもはや存在しません(Oracleが購入しました)が、Sun Spots- http: //www.sunspotworld.com/products/を購入できるようです。私は組み込み環境でJavaを使用するという考えに大したことはありませんが(ジョブimhoの抽象化のレベルが間違っています)、これはJavaの最も自然な組み込みプラットフォームのように思えます。これらのものの仕様に注意してください-それらは頑丈な180MHz / 512k RAMであり、スターターキットとして400ドルと安くはありません。

したがって、私はこの質問に対するArduino擁護活動家の2番目または3番目になります。あなたが助けを必要とするなら、あなたをサポートするために、コミュニティの地獄がそこにあります。周辺機器が必要な場合は、Googleで「Arduinoシールド」を検索して驚かせてください。制御サーボモーターからシールドの適切な組み合わせで802.11ワイヤレスネットワークにホップするまで、何でもできます。練習時間なしにC(ポインタが何を言うか!?)を学ぶのは現実的ではありませんが、すぐにArduinoのスケッチを書き始めることができます。 DorkBoard)は$ 15未満です。


ああそう、2年前のMaker Faireで見たよ!かなりクールなデバイス。
Dave

SunSpotsのキラー機能はJavaではなく、相互に通信できるようにする組み込みのワイヤレス機能です。あなたがお互いの意識やホームベースとの簡単な無線通信を望むなら、それはとても、とても素晴らしいです。
するThorbjörnRavnアンデルセン

3

パララックスは、JVMを実行するCoM(Computer-on-Module)であるJavelin Stampを作成しています。

これは60ドルで、1秒あたり最大〜8,500のJava命令を実行します。

また、PCBはピンクです(本当に!)


2

Ajileシステムは、さまざまなネイティブ組み込みリアルタイムJavaチップと評価ボードを作成します。

彼らはベアメタルJavaを実行しています。とても楽しいです。

www.ajile.comがチップと評価ボードを作成します。

www.systronix.comは、さまざまな組み込みJavaハードウェアを販売しています。

私はajileのAJ-100を要求の厳しい作業に使用しました。いいえ、それらはAVRほど安価ではありませんが、ローエンドのペンティアムのようにデータを処理します。

Ajilesのチップは、1マイクロ秒未満で割り込み(割り込み待ち時間)に応答します。


「組み込みCシステムでは決して実行しないでください」??? 何をするって?1μSのレイテンシ?高速?ほとんどありません。1GHz以上のDSP、たくさんのARM、その他かなりの数を忘れていると思います。多くの人がベアメタルC(OSなしなど)だけでこれらを作成します。この種のことは、組み込み(完全なLinuxスケールのOSの外で)でJavaを使用する中途半端な合理的な方法であることを認めます... Systronixをざっと見てみると、その少しの利便性のための良いプレミアム。確かに組み込みARMに行きます。また、Systronix以外のこれらのプロジェクトへのリンクの多くは機能していません。
ダロン、

ああ、そしてTINIはめちゃくちゃ馬鹿げている。8051のROM内のJVM。簡単なイーサネットが必要なとき、私は愚かにも一方通行を試みましたが、Cでさえ、通常の企業LANのブロードキャストトラフィックに圧倒されました。パララックスのベーシックスタンプのように販売されていれば、すばらしい製品ですが、そうではありません。趣味以外の目的には適していません。
ダロン、

1
これらのチップは数百メガヘルツで動作しています。1uSのレイテンシは、これらのデバイスよりも100倍遅いプロセッサでCにプログラムされた場合に可能です。あなたは同等のプロセッサーでいくつかのかなりクールなこと(iPadやDroid電話のような)を行うことができますが、これを質問の8ビットAVRの代替として投稿することは、ほとんど完全な比較ではありません。
ケビンフェルメール2010

@reemrevnivek:OPがJavaを望んでいることを考えると、組み込みのJava(完全なLinux OSなど)を実行するための唯一の合理的な方法の1つであるという点で、Ajileの部分は適切だと思います。最後の段落とTSTIKビットがなかったら、私はそれを賛成することさえしました。
ダロン、

2

私の個人的な経験では、AVRをプログラミングして開始するためのCコードは非常に簡単です。私は長年のJavaの経験もあり、Arduinoのスケッチを使用して約2か月後、環境を削除してavr-gccのサイトに行きました。 avrfreakのように、一般的な問題に対する答えを簡単に見つけることができます。(私はまだ信頼できるArduino Duemillenoveですべてを行います)

Eclipseを使用してコンパイルおよび「デプロイ」、つまりチップに書き込むことも、別のIDEを扱う必要がないので便利です。

プログラミング言語自体よりも、レジスター、16ビットレジスター、および割り込み、タイマー、ハードウェアPWMを適切な順序で読み取るのは実際には難しいと思います。


1

私は一般に、組み込み作業が関係する「Cを学び、プロセッサが実際に何をするか」を理解しますが、小さなアームチップはAVRよりもそれほど高価ではなく、ほぼもっともらしいことを指摘する価値があります。 jvmの上で単純なタスクを処理する位置。


1

NanoVMは、8ビットAVRマイクロコントローラーで実行するように設計されたJava仮想マシンです。

(ホームページより)

これは完全な機能を備えたJava VMではありません。これは常に、Java言語の小さなサブセットと標準のJavaライブラリ、およびいくつかのアプリケーション固有のメソッドに制限されます。さらに、マイクロコントローラをプログラミングする標準的な方法としてCを置き換えることを意図していません。Cまたはアセンブラプログラムよりも柔軟性が低く、パフォーマンスが低くなります。

NanoVMは、制限されているが制御可能なプログラミングインターフェイスをマイクロコントローラーベースのデバイスに提供する方法です。ほとんどのハードウェア固有のコードのほとんどがNanoVM自体の一部であるため、ユーザーはアプリケーション自体に集中できます。NanoVMを搭載したデバイスをユーザーに提供する場合、ユーザーはハードウェア自体について考える必要はありません。さらに、ターゲット固有のコンパイラーなどは必要ありません。彼が必要とするのは、標準のJavaコンパイラーと、それ自体がJavaで書かれたNanoVMToolだけです。したがって、開発チェーン全体は、Javaコンパイラーがあり、Javaコードを実行できる任意のデバイスで機能します。NanoVMが提供するハードウェアの抽象化により、ユーザーはターゲットのベースとなるマイクロコントローラーのタイプを気にする必要さえありません。


1

これはJavaや8ビットではありませんが、Espruinoと呼ばれる低消費電力のARMマイクロコントローラーで利用できるJavascriptインタープリターがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.