~4kBクラスの小規模コントローラ向けにJVMを実装しました。Javaを使いたい場合Linuxを搭載した組み込み機器にJavaを載せるのが通常ですがそれが困難な容量の少ないデバイス向けです。ここではCortex-M0+のLPC812にJVMの移植を試みました。GitHub解釈できるニーモニックは限られてます。上記のリンクからダウンロードできるのはMDK-ARMプロジェクト一式です。開発環境はMDK-ARMです。Liteが使用できます。LPC812ボード単体だと書き込み、デバッグが出来ません。LPC-Link2をCMSIS-DAPにして使う必要があります。Keil〜Javaの中間言語生成にはjavac-1.6.0_51を使用しています。(なにか特殊なコードを吐く様にコンパイラを細工したりはしていません)SDカードなどからバイトコードをブートしても良いですが、始めてやる作業なので不確定要素が多いと困ります。力弱くバイトコードを配列にしてソースコードに貼付け、まるごとMDK-ARMでコンパイルます。char配列にするのでcsv形式で出力ができるバイナリエディタで、コンパイルした*.classファイルをリードすると良いでしょう。LPC812に書き込みという流れです。こんなJavaコードを書きました。UARTから1文字受信して、それを表示します。}}上記をhoge1.javaとして保存。hoge1.java生成されたhoge1.classは下に示すバイトコードが保存されています。0x00上記バイトコードを、MDK-ARMプロジェクトの中のravem.cにvm_array[]という配列名で記述し、コンパイル。USB-UARTとLPC812を接続します。UART0_RXD無事動作すれば、下の様になります。開発風景(笑おまけ:マルチスレッドっぽい何かを実装してみたノンプリエンプティブ型でマルチスレッドを実装してみました。このご時世にノンプリエンプティブとか何考えてるんですかwと言われかねませんが、、そもそも、すでにCortex-M0+にとってJVMが高負荷であり、メモリが限られていて、かつ10も20もスレッドを持つ意義が感じられない・持つことができない*1デバイスに複雑なTCBを持つプリエンプティブ型を採用するのは利点がないように思えたからです。このデバイスでマルチスレッドを持つとしてもメソッドの負荷によりますが2ないし3個が現実的でしょう。それならばノンプリエンプティブ型のほうが、トータルで見た開発時間が少なくてすみます。getName());と記述した方が処理が高速になるよね?と考えた方、正解です。StringBuilderを実装していないので、Stringの連結ができないんですよ。(ぉぃそのうちしますよそのうちバイトコードは以下のようになります。0x00コンパイルして実行すると、UARTでマルチスレッドっぽくなっているところが確認できると思います。Frameworkを使ったMAKE:でもウワ...2010-06-24AitendoさんのOLEDをPSoCで制御しましたよ※今日のブログ大変長いのでご注意を...。Blogマイコン風雲録マルチチャネルDAC製作記nabeの雑記帳なんでも作っちゃう、かも。blog月別アーカイブはてなブログをはじめよう!Lynx-EyEDさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。