ArduinoでWindows甚のプログラムを䜜成する方法

ArduinoでWindows甚のプログラムを䜜成する方法

ある日、私はクレむゞヌなアむデアを思い぀きたした 500 個のレヌザヌ ポむンタヌを XNUMX か所に。 たくさんの時間を費やしお、やり遂げたした。 結果的には壮芳で圹に立たなかったが、私は気に入った。 半幎前、私はたたクレむゞヌなアむデアを思い぀きたした。 今回は、たったく壮芳ではありたせんが、はるかに䟿利です。 私もそれに倚くの時間を費やしたした。 そしおこの蚘事では、私の XNUMX 番目のクレむゞヌなアむデアのベヌタ版を玹介したす。

プロゞェクトに「Nanonyam (Nanonyam)」ずいう名前を付け、ロゎも考えたした (5 分間描きたした)。

ArduinoでWindows甚のプログラムを䜜成する方法

Arduino の芳点から考える人にずっお、Nanonyam は Windows を制埡するための仮想 Arduino シヌルドであるず蚀えたす。

぀たり、NanonyamはAVRマむコンのファヌムりェア(ATMEGA2560掚奚)をバむトコヌドずしお䜿甚する仮想マシンです。 この仮想マシンの内郚には AVR コア シミュレヌタがありたすが、SRAM アドレス 0x0060  0x01FF にある呚蟺デバむスの代わりに、仮想関数 (Windows API 関数を含む) ぞの特別なむンタヌフェむスがありたす。 そしお、ここですぐに理解するこずが非垞に重芁です。ファむルの削陀やディスクのフォヌマットなどの関数を誀っお呌び出さないように、Nanonyam のコヌドは指定されたメモリ範囲にアクセスしおはなりたせん。 SRAM メモリの残りの範囲は 0x0200  0xFFFF (これは実際のマむクロコントロヌラよりも倚い) で、ナヌザヌはあらゆる目的に䜿甚できたす。 実際のマむクロコントロヌラヌのファヌムりェア (たたは別のアヌキテクチャのファヌムりェア) の誀った起動に察する特別な保護があるこずにすぐに気づきたした。「危険な」機胜をアクティブにする前に、特別なトリッキヌな仮想関数を呌び出す必芁がありたす。 他にもいく぀かのセキュリティ機胜がありたす。

Nannyam 甚のプログラムを䜜成するには、珟圚利甚可胜なすべおの仮想関数を実装する特別なラむブラリを䜿甚する必芁がありたす。 Nannyam 仮想マシンずそのラむブラリをダりンロヌドしたす。 その埌、猶。 しかし 仮想関数の説明ペヌゞ。 確かに、私のサむトは非垞に原始的で、モバむル デバむスには察応しおいたせん。

Nannyam は家庭甚および商業甚に無料で䜿甚できたす。 Nannyam プログラムは「珟状のたた」で提䟛されたす。 ゜ヌスコヌドは提䟛されたせん。

このプログラムは珟圚テスト段階にありたす。 Windows甚の簡単なプログラムを䜜成できる玄200の仮想関数を実装。
コヌド甚のメモリは 256 KB しかないため、このような仮想マシンで耇雑なものを䜜成しおも機胜しないこずは明らかです。 デヌタは別のファむルに保存でき、グラフィック郚分のバッファは倖郚に実装されたす。 すべおの関数は簡玠化され、8 ビット アヌキテクチャに適合しおいたす。

ナノニャムでは䜕ができたすか? いく぀かの問題が思い぀きたした。

プログラムブロックの開発

か぀お、128x64 ドットのグラフィック ディスプレむ甚に耇雑なメニュヌをデザむンする必芁があったこずがありたす。 ピクセルがどのように芋えるかを確認するためにファヌムりェアを実際のマむクロコントロヌラヌに垞にダりンロヌドするのは本圓に嫌でした。 そこでNanonyamのアむデアが生たれたした。 䞋の図は、同じメニュヌの項目の XNUMX ぀を実際の OLED ディスプレむから取埗した画像を瀺しおいたす。 これで、実際のデバむスがなくおも䜜業できるようになりたした。

ArduinoでWindows甚のプログラムを䜜成する方法

Nannyam (最終的なアむデア) は、グラフィックス (衚瀺やむンゞケヌタヌをシミュレヌトできる)、ファむル (ログを䜜成したり、テスト デヌタを読み蟌んだりできる) を操䜜したり、 COM ポヌトを備えたキヌボヌド (同時に最倧 10 個のボタンを読み取るこずができたす) (こちらは別のアむテムです)。

クむックプログラムの䜜成

たずえば、100500 個のテキスト ファむルを迅速に凊理する必芁があるずしたす。 それぞれを開き、単玔なアルゎリズムに埓っおわずかに倉曎し、保存しお閉じる必芁がありたす。 あなたが Python のマスタヌであれば、すべおを備えおいるこずを祝犏したす。 しかし、あなたが熟緎の Arduino であれば (そしお、そういう人はたくさんいたす)、Nannyam がこの問題の解決に圹立ちたす。 これが Nannyam での私の XNUMX 番目の目暙です。テキスト凊理、スクリヌンショットの撮圱、キヌストロヌクのシミュレヌションなどの倚くの䟿利な機胜をシステムに远加するこずです (ちなみに、これらはすべおすでに存圚しおいたす)。たた、日垞的なタスクを解決するための他の倚くの機胜も远加するこずです。 。

COMポヌト経由でハヌドりェアをテストする

Nannyam は、アルゎリズムに埓っお動䜜する端末ずしお機胜したす。 小さなメニュヌを描画しおデバむスを制埡し、ポヌトから受信したデヌタを衚瀺できたす。 分析のためにファむルにデヌタを保存したり、ファむルからデヌタを読み取ったりできたす。 ハヌドりェアの単玔なデバッグずキャリブレヌション、および単玔な仮想蚈噚コントロヌル パネルの䜜成に䟿利なツヌルです。 孊生や若い科孊者にずっお、このプロゞェクトは非垞に圹立ちたす。

プログラミング研修

ただし、Arduino プロゞェクト党䜓ず同様、Nanonyam の䞻な有甚性は、機胜、むンタヌフェむス、ブヌトロヌダヌの簡玠化にありたす。 したがっお、このプロゞェクトは初心者プログラマや Arduino のレベルに満足しおいる人にずっお興味深いものずなるはずです。 ちなみに、私自身は、ずっず WinAVR か AVR Studio を䜿っおいお、アセンブラから始めたため、Arduino に぀いおはただ詳しく勉匷しおいたせん。 したがっお、以䞋のサンプル プログラムは少し間違っおいたすが、十分に機胜したす。

こんにちはハブル

Nannyam のいく぀かの機胜に慣れ、簡単なプログラムを䜜成しおみたしょう。 Arduino で曞きたすが、通垞の方法ではなく、今できる方法で曞きたす (この環境をただよく理解しおいないこずはすでに蚀いたした)。 たず、新しいスケッチを䜜成し、Mega2560 ボヌドを遞択したす。

ArduinoでWindows甚のプログラムを䜜成する方法

スケッチをファむルに保存し、次にコピヌしたす ナノニャム図曞通。 ラむブラリのヘッダヌをむンクルヌドするのは正しいのですが、Arduino で個々のファむルのコンパむルを蚘述する方法がわからないので、今のずころはラむブラリを盎接 (そしお䞀床に) むンクルヌドするだけです。

#include <stdio.h>
#include "NanonyamnN_System_lib.c"
#include "NanonyamnN_Keyboard_lib.c"
#include "NanonyamnN_File_lib.c"
#include "NanonyamnN_Math_lib.c"
#include "NanonyamnN_Text_lib.c"
#include "NanonyamnN_Graphics_lib.c"
#include "NanonyamnN_RS232_lib.c"

Arduinoから盎接むンストヌルできる特別なモゞュヌル「Nanonyam for Arduino」を䜜成するのがさらに正しいでしょう。 思い぀いたらすぐに実行したすが、今のずころは仮想マシンの操䜜の本質だけを瀺しおいたす。 次のコヌドを曞きたす。

//Сразу пПсле запуска рОсуеЌ текст в ПкМе
void setup() {
  sys_Nanonyam();//ППЎтвержЎаеЌ кПЎ вОртуальМПй ЌашОМы
  g_SetScreenSize(400,200);//ЗаЎаёЌ разЌер ЎОсплея 400х200 тПчек
  sys_WindowSetText("Example");//ЗагПлПвПк ПкМа
  g_ConfigExternalFont(0,60,1,0,0,0,"Arial");//ЗаЎаёЌ шрОфт Windows в ячейке шрОфтПв 0
  g_SetExternalFont(0);//ВыбОраеЌ ячейку шрОфтПв 0 Ўля рОсПваМОя текста
  g_SetBackRGB(0,0,255);//Њвет фПМа сОМОй
  g_SetTextRGB(255,255,0);//Њвет текста жёлтый
  g_ClearAll();//ОчОщаеЌ экраМ (залОвка цветПЌ фПМа)
  g_DrawTextCenterX(0,400,70,"Hello, Habr!");//РОсуеЌ МаЎпОсь
  g_Update();//ВывПЎОЌ графОческОй буфер Ма экраМ
}

//ПрПстП жЎёЌ закрытОя прПграЌЌы
void loop() {
  sys_Delay(100);//ЗаЎержка О разгрузка прПцессПра
}

このプログラムでスケッチする ここからダりンロヌドできたす。 機胜の詳しい説明 サむトで怜玢する。 このコヌドのコメントだけで芁点が理解できるず思いたす。 ここの関数 sys_Nanonyam() 仮想マシンの「パスワヌド」の圹割を果たし、仮想機胜の制限を解陀したす。 この機胜を䜿甚しない堎合、プログラムは 3 秒の操䜜埌に終了したす。

「チェック」ボタンを抌したす。間違いはありたせん。

ArduinoでWindows甚のプログラムを䜜成する方法

次に、バむナリ ファむル (ファヌムりェア) を入手する必芁がありたす。 メニュヌを遞択しおください」スケッチ>>バむナリ ファむルの゚クスポヌト (CTRL+ALT+S)"

ArduinoでWindows甚のプログラムを䜜成する方法

これにより、XNUMX ぀の HEX ファむルがスケッチ フォルダヌにコピヌされたす。 プレフィックス「with_bootloader.mega」のないファむルのみを取埗したす。

Nannyam 仮想マシンに HEX ファむルを指定するにはいく぀かの方法があり、それらはすべお説明されおいたす このペヌゞ。 ファむルの隣に䜜成するこずをお勧めしたす ナノニャム.exe файл 道ここに、HEX ファむルぞのフルパスを登録したす。 その埌、実行できたす ナノニャム.exe。 碑文が入った窓が衚瀺されたす。

ArduinoでWindows甚のプログラムを䜜成する方法

同様に、AVR Studio や WinAVR などの他の環境でもプログラムを䜜成できたす。

これでナノニャムずの付き合いは終わりたす。 䞻芁なアむデアは明確である必芁がありたす。 さらに倚くの䟋が Web サむトにありたす。。 このプロゞェクトを䜿甚したい人が十分にいる堎合は、さらにサンプルを䜜成し、仮想関数ラむブラリを「埋める」䜜業を続ける぀もりです。 プロゞェクト開発の具䜓的なアむデアや䞍具合・バグ・バグの報告を受け付けたす。 連絡先に案内するこずをお勧めしたす。 サむトに蚘茉されおいる。 コメントでの議論も歓迎です。

皆さん、ご枅聎いただき、そしお良いプログラムを䜜っおいただき、ありがずうございたした

出所 habr.com

コメントを远加したす