問題タブ [avr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hardware - AVR と Arduino の違い/関係は何ですか?
最近ハードウェアプログラミングに興味がありますが、まだ始めていません。
私はいくつかの検索作業を行いましたが、漠然とした考えがあります:
Arduino は、チップとブレッドボードの両方を組み合わせたものです。
AVR はシングル チップであり、開始するにはブレッドボードを購入する必要があります。
その発言は本当ですか、それとも嘘ですか?
avr - AVRのフラッシュメモリが大きすぎるプログラムで溢れていますか?
ATtiny2313Vが7x5LEDマトリックスを制御して、スクロールするテキストを表示するプロジェクトがあります。テキストを表示するために、プログラムの残りの部分と一緒にフラッシュに保存されるフォントを作成しました。
フォント全体を含むプログラム全体は、1106バイトを使用します。しかし、それをチップにロードすると、実行されていないようです。代わりに、いくつかのLEDを点灯させるだけで、それだけです。
ただし、ほとんどのフォントを削除し、AからJの文字だけでコンパイルすると、プログラムのサイズは878バイトで、問題なく動作します。
これは、AVRフラッシュメモリのある種のオーバーフローが原因ですか?
ATtiny2313Vのデータシートには、2Kバイトのフラッシュがあると書かれています。1106バイトが多すぎるのはどうしてですか?
更新:明確にするために、私が使用しているツールチェーンはAVR Studio(コードをコンパイルするため)であり、次にAVRDudeを使用してマイクロコントローラーにアップロードします。私の知る限り、AVRStudioはavr-gccのバージョンを使用してコードをコンパイルします。
c - Cでの8ビット列挙型
シリアル経由で受信する命令、コマンドを保存する必要があります。コマンドの長さは 8 ビットです。
コマンド名とその値の間の透明性を維持する必要があります。シリアルで受信した 8 ビットの数値を任意の型に変換する必要がないようにします。
コードでそれらを処理するために列挙型を使用したいと思います。このプラットフォームでは、列挙のみが 16 ビット整数に対応します。
プラットフォームは、Butterfly デモ ボード上の AVR ATmega169V マイクロコントローラーです。これは、16 ビット操作のサポートが一部制限された 8 ビット システムです。これは高速なシステムではなく、約 1KB の RAM を備えています。ファイル I/O やオペレーティング システムなどの贅沢はありません。
8ビットコマンドを保存するためにどのタイプを使用する必要があるかについての提案はありますか?
#defines の大量のヘッダーよりも優れたものがあるに違いありません。
list - 組み込みシステムで動的データ構造を使用することはどれほど悪いことですか?
ですから、来年大学で受講する組み込みシステムユニットでは、動的データ構造が組み込みシステムプログラムに含まれるのは悪いことであることがわかります。しかし、講義ノートはその理由には触れていません。
現在、私は中規模の組み込みシステムの「LURC」コントローラーに取り組んでいます。ほとんどの場合、AVR169MEGAの「Butterfly」デモボードの周辺機器を利用しています。サーボとESCを制御するために4つのPWM信号を生成しました。また、9セグメントのLCD画面を提供します。
キューよりも、USARTシリアルを介して受信される命令を保存するためのより良い方法を考えることはできません。特に、不明な量のデータが受信されるまで待つ必要がある場合:たとえば、LCD画面に表示する文字列。
では、組み込みシステムのマイクロコントローラーで動的データ構造を使用してみませんか?メモリが大幅に制限された環境にいて、mallocが成功していることを確認する必要があるというだけですか?
programming-languages - AVR アーキテクチャに移植しますか?
Google の新しい言語 Go について聞いて以来、私はそれをマイクロコントローラーのプログラミングに使用したいと思っていました。特に、Atmega シリーズのような Atmel AVR マイクロコントローラー。このアーキテクチャの Go ポートはありますか?
assembly - AVR用のgnuアセンブラを使用してPCに対してジャンプするにはどうすればよいですか?
avr-objcopyを使用して逆アセンブルしたバイナリファイルがあります。割り込みベクタテーブルは次のようになります。
いくつかの変更を加えて、このファイルを再構築したいと思います。最初の2列を削除して、通常のアセンブリファイルになるように再フォーマットしました。すなわち:
しかし、私が走ると
次に、生成されたファイルを逆アセンブルします。(objcopy -S a.outを使用)出力は次のようになります。
では、PC相対ジャンプを尊重するために、どうすればavrを取得できますか?
usb - USB デバイスで PC の電源を入れる
USB 経由で PC に接続されている IR リモート センサーを使用して、PC の電源をオン/オフできるようにしたいと考えています。センサーは、AVR マイクロプロセッサと V-USB ソフトウェア USB 実装で実装されたカスタム PCB です。
さて、PCの電源を切るのはソフトウェア的には問題ありませんが、USBを使ってPCの電源を入れる方法はありますか?
(注意してください、私はUSBスティックまたはUSB電源からの起動について話しているのではありません...)
linux - µC プログラミングに進みたいのですが、どこから始めればよいかまったくわかりません。
MCUプログラミングに「移行」することについてかなり長い間考えてきましたが、問題は、マイクロコントローラーなどを使用したことがないことです。私が言われたように、AVR と PIC は愛好家の間で最も一般的なマイクロコントローラーであり、明らかにほとんどの人が私のような初心者に AVR を勧めています。愛好家コミュニティ。AVR や PIC などは、私にとってはあまり重要ではありませんが、Linux で優れたコンパイラを使用して C コードを記述でき、最終的には MCU に LCD スクリーンを追加できるようになることを望んでいます (基本的なASCII文字を出力するためだけに、おそらくあちこちに数ピクセルをモノクロで描画し、大きなものは何もありません)。複雑なもの、非常に高速なもの、大量のメモリは必要ありません。私は、目標を達成するために少しの創造性が必要な、限定された (しかし限定されすぎていない) ものが大好きです。私はインターネットを見回しましたが、見つけたページのほとんどは何十年も前のものであり、購入できる良い「パック」を示唆していませんでした (そして、それは上記のことをサポートします)。だからこそ、少しでもお力になれればと思い、お願いしております。:)
ありがとう、ホッファ。
iphone - 無線通信:AVRベースの組み込みシステムとiPhone
組み込みシステム(AVRコントローラーに基づく)とiPhoneの間の無線通信を実現するための最良の方法は何ですか?WiFiまたはBlueToothの2つのオプションしかないと思います。両方のデバイスが同じ部屋にとどまる必要があるため、範囲は実際には問題ではありません。
AVRベースのマイクロコントローラーシステム(または小さなマイクロコントローラー)に接続できる便利なWiFiボードがあれば、ヒントは大歓迎です。
より良い解決策はBlueToothだと思いますが、問題もあります。どのBlueToothボードがAVRシステムへの接続に最適であり、BlueToothを介したAVRデバイスとの(シリアル)通信にiPhoneBlueToothスタックを使用できるかどうかです。 。
誰かがすでにそのようなシステムを実現し、いくつかの役立つヒントを与えることができることを願っています...
c - 関数ポインタの場所が渡されない
AVRをターゲットにしているCコードがいくつかあります。コードはavr-gcc、基本的には適切なバックエンドを備えたgnuコンパイラでコンパイルされています。
私がやろうとしているのは、イベント/割り込み駆動型ライブラリの1つにコールバックメカニズムを作成することですが、関数ポインタの値を維持するのに問題があるようです。
まず、静的ライブラリがあります。twi_master_driver.h
次のようなヘッダーファイル( )があります。
ここで、Cファイル(twi_driver.c
):
次に、これら2つのファイルを静的ライブラリ(.a)にビルドし、メインプログラムを作成します(main.c
)#include #include #include #include #include "twi_master_driver.h"
割り込みを発生させるイベントを注意深くトリガーし、適切なハンドラーを呼び出します。いくつかのfprintfsを使用すると、関数で割り当てられた場所twi->slave.slave_callback
がtwi_init
関数内の場所とは異なることがわかりtwi_slave_interrupt_handler
ます。
数字は無意味ですがtwi_init
、値は0x13bであり、twi_slave_interrupt_handler
印刷時の値は0x100です。
コメント付きの回避策を次の行に追加しtwi_driver.c
ます。
問題はなくなりますが、これは明らかに魔法で望ましくない解決策です。私は何が間違っているのですか?
私が知る限り、適切な変数volatile
にマークを付け、他の部分を揮発性にマークし、揮発性のマークを削除してみました。fprintf
割り当て後にステートメントを削除するtwi_init
と、後で値の読み取りが異なることに気付いたときに、回避策を思いつきました。
問題は、関数ポインターをどのように渡すかにあるようです。特に、ポインターの値にアクセスしているプログラムの部分(関数自体?)は、技術的には別のスレッドにあります。
何か案は?
編集:
コードのタイプミスを解決しました。
実際のファイルへのリンク:http : //straymark.com/code/ [test.c | twi_driver.c | twi_driver.h]
fwiw:コンパイラオプション:
-Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=atxmega128a1 -DF_CPU=2000000UL
(ライブラリ経由ではなく)直接含まれている同じコードを試しましたが、同じ問題が発生しました。
編集(ラウンド2):
- 「回避策」なしですべての最適化を削除しましたが、コードは期待どおりに機能します。-Osを追加すると、エラーが発生します。-Osが私のコードを破壊しているのはなぜですか?