趣味にやさしいマイクロコントローラーでRAMから命令を実行する


12

私のプロジェクトの1つは、マイクロコントローラーに保存されていない(代わりにSDカードに保存されている)プログラムを実行できることから大きな恩恵を受けます。

そのため、SDカードからRAMにコードをロードし、RAMからコードを実行できるデバイスを探しています。現在、私はPicKit2に付属しているプログラマーしかいないので、PICを使い続けたいと思っています。

誰がこれを行うことができるかを知っていますか?これに対応できるPICがない場合、これに対応するマイクロコントローラーは何ですか?できればブレッドボード互換パッケージで利用できるもの。


2
え?...ラムから何を正確に実行する必要がありますか?「静的」とはどういう意味ですか?あなたは実際に自己修正コードを書こうとしているのではありませんか?動的メモリ割り当ての不足について話しているのですか?別名no malloc?
マーク

2
@Mark SDカードなどの外部デバイスからプログラムをロードして実行できるようにしたい。私は私の投稿でより良い説明をしようとします。
ポンカドゥードル

2
私が知っている唯一のPICはPIC32です。SDカードからフラッシュにコピーするようなクレイジーなことをしない限り、プログラムを頻繁に切り替えるとフラッシュサイクルがかなり速くなります。ほとんどの小さな8/16ビットuCは、データ(RAM)とプログラム(フラッシュ)スペースの間で大きくセグメント化されており、プログラムカウンターがRAMをアドレス指定できません(ハーバードアーキテクチャ、メモリ保護なしなど)。
マーク

回答:


5

外部プログラムメモリを追加できるいくつかのPICがあります。これを行ったことはありませんが、アプリケーションノートAN869およびAN778には、外部メモリの実装方法に関する詳細情報があります。


11

考慮すべきもう1つのオプションは、SDカードに保存されているプログラムにインタープリター言語を使用することです。このように、プロセッサはカードから読み取られたマシンコードを実行せず、単にデータとして処理します。

このアプローチは、速度を犠牲にして柔軟性をもたらします。

選択できるオプションは多数あります。 マイクロコントローラー用の高レベル言語インタープリター/コンパイラーの調査


1
独自のDSLを展開します。このオプションは、提案されたすべてのソリューションの中で最も魅力的です。
アモス

6

すでに述べたように、PIC(PIC32以外)はこれを行うことができません。ほとんどのマイクロコントローラのRAMリソースは非常に限られているため、おそらく、どのファミリの大きなプロセッサまたは外部メモリバスを備えたプロセッサにアクセスする必要があります。

MSP430プロセッサは、RAMスペースからコードを実行できますが、16K RAMスペースのF5438のようなものが必要です。128バイトでコードを実行することは、実際にはオプションではありません。

プロセッサに外部バスがある場合、RAMをコードスペースに配置できます。プロセッサアーキテクチャで実行メモリへのデータの書き込みが許可されていない場合、RAMを2つのメモリ領域にマップするためにいくつかの追加ロジックを追加する必要があります。

8051ベースのシステムでRAMからコードを実行しましたが、プログラミングのためにRAMをEXTERNメモリスペースにマップし、実行のためにコードスペースに戻す必要がありました。ローダー/モニタープログラムは、メモリバンクの切り替えと読み込みを処理しました。コードを要求しないでください-私はこれを約30年前に行いましたが、失われてから長い間です(そしてPL / M-51で書かれています)


5

低および中範囲のPICは、メモリアーキテクチャのためにRAMから実行できません。

ARMベースのCPUはすべてRAMから実行する必要があります。それらはsmdパッケージに含まれる傾向がありますが、マイクロコントローラーが既にロードされている「DIP」サイズのモジュールがかなりあります。たとえば、mbedまたはLPCXpressoご覧ください。これらの両方には、ブートローダー、またはLPCXpressoの場合は、無料のコンパイラーと一緒にデバッグインターフェイスが付属しています。

シンプルな8ビットマイクロでの滞在を希望する場合は、おそらくフリースケールHCS08ファミリの製品を検討してください。これらはRAMから実行でき、codewarrior IDEおよびCコンパイラのコード限定バージョンが無料で利用できます。

MPS430もこれを行うことができるはずですが、自分でやったことはありません。


mbedは実際にバイナリを受信し、組み込みのフラッシュドライブにコピーしてからリセットします。コンピューターのUSBポートに接続すると、フラッシュドライブとして表示されます。SDカードの代わりにフラッシュドライブを使用する方法、またはSDカードからのバイナリが自動的にフラッシュドライブにコピーされてリセットが実行されるようにセットアップする方法を考え出すことができれば、幸運かもしれません。mbedはハードウェアプログラマを必要としません。
アモス


3

SDカードからの.hexファイル(おそらく)でチップを再フラッシュするAVRのブートローダーについて読んだことを覚えています。元のソースは見つかりませんが、このGoogle検索では興味深いヒットがいくつか見つかりました。はい、これはPICではなくAVRであることは知っていますが、PICの問題が解決しない場合は便利かもしれません。



3

他のポスターが指摘したように、ハーバードアーキテクチャ(別のコードとデータスペース)を使用するため、8または16ビットPICのRAMから実行することはできません。プログラムをSDカードからロードしてコードメモリにフラッシュすることが実際的かどうかは、これを行う頻度によって異なります。

常にプログラムをオーバーレイしているOSのような動的環境を作成しようとしている場合、いいえ。しかし、私の場合、必要に応じて2 GBのSDカードからドライバーをロードするプログラムがあります。PIC24FJ256GB110の最小消去/書き込みサイクルは10,000です。これが1日に5回行われたとしても、フラッシュは最低5年半続きます。

(注:最小値は10,000です。一般的な消去/書き込みサイクルの耐久性は、その5倍になる可能性があります。したがって、開発を行っている場合は、1日に140回プロセッサを再フラッシュできます-3分半ごと8時間-まだ1年続くかもしれません。)


2

私の学校では、外部RAMを備えたHC11またはHC12プロセッサを使用してプログラムをロードおよび実行していました...しかし、ボード/キットの名前を忘れました:( 、コードをRAMにロードして実行できます。

からキューを取得するblalor最善の解決策は、ブートローダーで挿入したSDカードに保存されているデータからPICを再フラッシュできるボタンをボードに追加することです。どんな種類のコードがより大きなPICに適合しないかは想像できません。静的データ(グラフィック、テキスト、サウンド)がある場合は、外部ストレージに保管してください。


1

おそらくRAMから割り当てることはできませんが、アプリケーションの場合、フラッシュに小さなローダーを配置して、SDカードのデータをフラッシュの残りの部分に読み込むことができる場合があります。SPIで制御されたフラッシュチップでこのアプローチを使用して、ワイヤレスリンクからファームウェアをロードし、完全に受信した後にインストールできるようにしました。SD対応のブートローダーはある程度のスペースを占有する可能性がありますが、SDカードでは動作しないという特別な理由は考えられません。


いくつかのわずかに異なるファームウェアと目的を持つデバイスについても同様のことを行いました:すべてのファイルを外部SPIフラッシュ(ほとんどのマイクロコントローラーよりもはるかに大きいサイズで利用可能)に書き込み、イメージの1つでコントローラーを再フラッシュしますリセット中にボタンが押されている場合、ブートローダーで。
ケビンフェルメール

0

かなりの数のマイクロコントローラーでこれを行うことができますが、写真ではないようです。あなたがしたいことは、spiを使用してSDカードから読み取り、おそらくルートディレクトリにある既知のまたはハードコードされたファイル名にしたいプログラムをコピーし、そのファイルをRAMに解析してから分岐するブートローダーを持っていることですラムのプログラム。ARMベースのコントローラーを使用すると、このようなことができます。

別の方法は、RAMにコピーしてフラッシュの一部に書き込みを書き込む代わりに、spiを介してブートローダーにsdカードを読み取らせることです。おそらく、起動またはリセット時にボタンが押された場合にボタンを持ち、SDカードから新しいプログラムをロードするか、フラッシュのロード可能な部分で署名またはチェックサムが適切である場合、フラッシュのその部分へのブートブランチでボタンが必要です。または、おそらくsdカードが存在する場合、それからロードし、そうでない場合はフラッシュのロード可能な部分に分岐します。この方法は、腕ベースおよびavrベース、おそらく写真ベースでも使用できますが、私の写真の経験は古くなっています。msp430私もそう思います。基本的に、マイクロコントローラプロセッサ自体から実行するフラッシュの一部を再プログラムできる場合、


うーん、実際にはavrからavrをプログラムしていません。申し訳ありませんが、それはホストからのシリアルオーバーでした。多くの安価な趣味ボードが実行している3つのソリューションを提供します... 2つのマイクロコントローラーを使用します。この場合、一方をリセットで保持し、SDカードを読み取り、シリアルなどを介して他方のマイクロをプログラムし、他方のマイクロでリセットを解除します。趣味/評価用ボードには、USBインターフェイス用のマイクロが1つあり、通常はもう1つにマイクロタグが付いています。
-old_timer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.