2

イベントが発生したときに電子メールを送信するマイクロコントローラーがあります。Java で電子メールを使用する方法は知っていますが、その Java コードをマイクロコントローラーの C コードの途中に配置するにはどうすればよいでしょうか?

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB |= 1 << PINB0; // = 0b00000001
DDRB &= ~(1 << PINB1);
PORTB |= 1 << PINB1;
DDRB |= 1 << PINB2;

while(1)
{
    PORTB ^= 1 << PINB0;
    if(bit_is_clear(PINB, 1)){
        PORTB &= ~(1 << PINB2);
        _delay_ms(100); //SLOW
    }           
    else{
        _delay_ms(10); //FAST
        /////I want the Java code in here/////

        PORTB ^= 1 << PINB2;
    }
}
}   

編集

Atmel Atmega8A マイクロコントローラーを使用しています。ピン B1 のワイヤが切断された場合に、電子メールまたはテキスト通知を受け取りたいという単純な警報システムを作成しています。

そして、私はただの高校生の初心者なので、あまり頭を悩ませないでください...

ああ、もし誰かが私のために C のマルチスレッドを骨抜きにしてくれるなら、それは素晴らしいことです。私は高校で Java を教えているので、Java のバックグラウンドを持っています。

4

6 に答える 6

1

Java と C は非常に異なる言語です。

Java をサポートするマイクロコントローラー用のコンパイラーを見つける必要があります。

ただし、コントローラーが GCC 経由で C コンパイルされる場合、GCJ を使用すると、ターゲット プラットフォームで特定のメモリ制約が適用される場合があります。正しいアーキテクチャのオブジェクト ファイルを生成し、マイクロコントローラと互換性のある gcc を使用してリンクする必要があります。

これは時間の無駄です。代わりに C で実装することをお勧めします。

さらに、マイクロコントローラは通常、ハードウェア アクセスの特定の側面を超えてカーネル ルーチンを提供しないため、ファイルやソケットを開くことができない場合があります。libcまた、存在しないか最小限になる可能性があります。

また、ネットワーク ハードウェアがない場合もあります。どのマイクロコントローラか教えていただければ助かります。

于 2013-07-02T01:31:26.843 に答える
1

他の人が言ったように、この方法で電子メールを送信することは、マイクロからはほど遠いものです (Java VM を実行するのではなく、メールを送信することが主な目的であると思います)。メールを送信するには、TCP/IP を使用してインターネットに接続する必要があります。次に、たとえば SMTP プロトコルを使用すると、これを実現できる場合があります。

問題の部分はインターネットへの接続です。このためには、通常はイーサネットである「適切なワイヤ」でデバイスを取得する必要がありますが、無線ベースのソリューションも存在する場合があります。次に、そのワイヤで通信するために必要なすべてを実装する必要があります (TCP/IP までのネットワーク スタック全体)。これは、すべて自分で合理的に行うことはできません。1 つの方法は、組み込みのイーサネット接続を備えたマイクロを使用し、好みに応じてlwipまたはContikiを使用して魔法を行うことです。もう 1 つの方法は、この Moxa 製品のような追加のハードウェアを使用することですが、これを介して SMTP を実装できない場合があります。

次に、メールを適切に送信するために適切なSMTP (Simple Mail Transfer Protocol)レイヤーを実装する必要があるのは "だけ" です(上記で提示したソリューションのいずれかで既にこれが提供されている場合があります)。

于 2013-07-07T19:15:01.987 に答える
1

質問に対するより直接的な回答は Alvin Wong によってすでに与えられていますが、あなたの質問は焦点が合っていないので、焦点を合わせ直すのに役立つと思います.

Java プログラムからメールを送信するときに実際に何が起こっているのかを理解し始め、マイクロコントローラーで実際に実行できる部分とその方法を理解する必要があります。

では、メール送信用の Java プログラムを実行するとどうなるでしょうか。

  1. プログラムを Java 言語で作成し、Java バイトコードにコンパイルし、Java 仮想マシンによって解釈され、Java ランタイムによって提供されるライブラリを呼び出します。
  2. (おそらく間接的に)「ネットワーク通信」を開始し、オペレーティングシステムのネットワーク機能を利用します...
  3. ネットワーク ハードウェアを使用し、
  4. メールプロトコルを使用してメールサーバーと通信し、特定のバイトシーケンスを送信して、メールメッセージが誰かに送信されていることを理解させる.

( 1)の部分は、Java プラットフォームのすべてのレイヤーによって仲介されます。(覚えておいてください: Java は単なる言語ではありません)。
( 2)は Java プラットフォームの下のレイヤー (またはそれらのカップル) であり、すべてのオペレーティング システム (Windows、Linux、Mac OS X など) が含まれます。
3)はハードウェアで構成されるレイヤーであり、ネットワークカードのファームウェアなどの他のサブレイヤーが含まれます。これは、イーサネット/ Wifiプロトコルの詳細などを管理するソフトウェアです。
( 4)レイヤーは、何らかの通信チャネル (イーサネット、WiFi など) でオンとオフを切り替えるビットとバイトです。

では、マイクロコントローラーでどの部分を実行できるのでしょうか? マイクロコントローラは(3)
の下部にあります。あなたの場合、Atmega にはネットワーク ハードウェアのサポートすらありません。そのため、どのようにネットワークに接続するつもりなのかわかりません。とにかく、持っていたとしても、(1)に上がろうとするのはむしろ狂っているほど(4)に近いです。(1)はゾウの場合、(4)はアリの場合、マイクロコントローラはてんとう虫くらいの大きさで、Atmel のマスコット:P.

だから:象のように考えるのをやめなさい。現状では、目標を達成するために努力する必要がありますが、象の道を歩むと、おそらく大量の不要な作業を行うことになります。

(とにかく象のやり方、つまり AVR で Java を使用する必要がある場合は、GCJ または LLVM のオプションを検討することから始めます。ミニマリストの JVM を 8 ビット マイクロコントローラーに移植する作業が 10 年以上前に行われたことは知っています。 、しかしそれがどのように進化したかはわかりません)

于 2013-07-05T09:58:09.230 に答える
0

マイクロコントローラーは、JDK または Java ME (おそらく Sun SPOT) をサポートする必要があります。 http://www.inonit.com/cygwin/jni/invocationApi/c.htmlには、JNI を使用して JVM を開始し、クラスを呼び出す例があります。

于 2013-07-02T01:34:52.440 に答える
0

マイクロコントローラでは、ハードウェアの能力に関してリソースが限られているため、マイクロコントローラは非常に一般的に C 環境で開発されます。マイクロコントローラ環境ではリアルタイムコンピュータが非常に重要であるため、最も柔軟性が高く、微調整が可能であるため、C が使用されます。とは言っても、マイクロコントローラの世界では Java が使われています。非常に複雑ですが、android は、可能な限りローエンドで ARM プロセッサを使用する Java で実行されます (本当にマイクロコントローラと呼ぶかどうかはあなた次第です)。全体として、C を学ぶことをお勧めします。本当に Java を使いたいのであれば、AVR マイクロコントローラーで Java を使用できるようにする多くのリソースに個人的に出くわしたことはありません。可能かもしれませんが、パフォーマンスへの影響が予想されます。

マイクロコントローラーの経験がない場合は、Arduino (arduino.cc) を調べることをお勧めします。

頑張ってください!

于 2013-07-02T03:15:45.290 に答える