問題タブ [avr-gcc]
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.
arduino - AT90USB162のLUFAコーディング例
USB対応のAVRマイクロコントローラーLUFA(2011-10-09)用のオープンソースUSBライブラリを使用しており、 CDC(ブートローダー)の例をAT90USB162チップにコーディングしようとしています。サンプルコードはフォルダにあり、 AT90USB1287/Bootloads/CDC
用のCDCを構築するために用意されています。そのため、適切なマイクロチップを設定するためにmakefileパラメーターを変更する必要がありました。
makefileで、次のように変更しました。
- MCU = at90usb162
- F_CPU = 16000000
- FLASH_SIZE_KB = 16
- BOOT_SECTION_SIZE_KB = 4
コードを作成しました。これはエラーなしで発生しましたが、.hexファイルを使用してチップを焼き込もうとすると、次のメッセージが返されます。
アドレスが範囲外です
なぜこれが起こるのでしょうか?
アップデート
でmakefile
、BOOT_START
は次のように構成されます。
おそらく、エラーはBOOT_STARTアカウンティングにありますか?もっと何かを設定する必要がありますか?
c - Cの固定小数点デジタルリンギングフィルター
AVRミクロンコントローラーでデジタルリンギングフィルターをコーディングしようとしていますが、固定小数点演算での状態図の実装に問題があります。これが私がコードを書き込もうとしている信号の流れの写真です:
編集:(上記のT_cの式はe^[-1 /(F_s * D)]である必要があると思います)
これが私がこれまでに持っているものです。2つの8ビット符号付き整数に対して固定小数点符号付き乗算を実行し、16ビット符号付き積を返すsmultfixというルーチンがあります。F_cとT_cは、8ビットの符号付き2進小数部です。「出力」およびT_cの入力と遅延要素z1の接合部での中間ステップは、16ビットの2進小数部として扱われます。ので、私は持っています:
(F_cとT_cが他の場所で定義されていると仮定します)
残念ながら、このコードは出力バッファをいっぱいにする大量のガベージを生成するため、貧弱な乱数ジェネレータを作成したばかりのようです。誰かが私がどこで間違っているのかを指摘することができれば、または彼らがより良い実装のアイデアを持っているなら、それは大いにありがたいです。
linker - AVR リンカ エラー、「収まるように再配置が切り捨てられました」
ATmega328 マイクロ用のコードをコンパイルしようとしていますが、ライブラリと Arduino のコアを使用したいと考えています。私はCMakeを使用しています。コア ライブラリとコードのすべてのオブジェクトと Arduino のライブラリをコンパイルすることができました。しかし、リンクすると、次のエラーが表示されます。
..."収まるように切り捨てられた再配置: シンボルに対する R_AVR_13_PCREL"..."avr5/libgcc.a"...
Googleでこれが一般的なエラーであることを確認しましたが、解決策が見つかりませんでした。私ができない唯一のことは、リンカー文の最後に「-lm」フラグと「-lc」フラグを置くことです.CMakeでそれを行う方法がわからないためです。
EDIT : makefile でコンパイルしようとしましたが、リンカー文の最後に「-lm」フラグと「-lc」フラグを付けても同じ結果が得られました。
Makefile と CMake ファイルをここに置きます。
CMakeList.txtメインの CMake ファイル
arduino.cmake。それは CMakeList.txt によってインポートされます:
Arduino コア CMake ファイル. これは、ディレクトリに置かれた CMakeList.txt ファイルですlibarduinocore
。
メイクファイル
c - C 定義を含むヘッダー ファイルを含むアセンブリ コードをコンパイルする
アセンブリと C コードを一緒にコンパイルしようとしていますが (C からアセンブリへではなく)、それを実行できません。
例えば
ファイル common.h
ファイル common.S
これをコンパイルしようとすると:
gcc を使用して C 定義をアセンブリに取り込む方法はありますか?
前もって感謝します。
string - データ配列(フォント)をFLASHに残す-AVRGCCのPROGMEM
ああ、PROGMEM、ポインタ、ポインタへのポインタ、ポインタのアドレス...頭がおかしくなります。
問題のフォントのデータ配列があります
PROGMEMを追加しました
これは、そのような別の構造で参照されます。
構造は次のように定義されます。
これをに変更する必要があると仮定して正しいですか。
私がそうするとき、それはそれを不平を言います
FONT_INFO変数のこの特定の行。
次に、関数を使用して描画されます。
最終的にグリフを描画します。
私は頭を抱えています:/誰かが私にいくつかの方向性を与えることができますか?PGM_Pやpgm_read_byteなどを使用しようとして何時間も費やして無駄になりました-私はいつも画面にゴミが表示されます。
私を救ってください!
c - 組み込みシステムへの大きな整数/値の保存
私は、多数のワイヤ(最大360)をテストできる組み込みシステムを開発しています。これは基本的に導通チェックシステムです。システムは、テストベクトルをクロックインし、もう一方の端から出力を読み取ることによって機能します。次に、出力は、出力がどうあるべきかを示す保存された結果(SDカードにある)と比較されます。テストベクトルはただ歩くものなので、どこにでも保存する必要はありません。プロセスは次のようになります。
- テストベクトルをクロックアウトします(ウォーキングのもの)
- 出力テストベクトルを読み込みます。
- SDカードから対応する出力テストベクトルを読み取ります。これにより、出力ベクトルがどうあるべきかがわかります。
- 手順2と3のテストベクトルを比較します。
- 別のアレイにエラー/障害を書き留めます。
- すべてのワイヤがチェックされていない限り、手順1に戻ります。
- エラー/障害をLCDに出力します。
私のハードウェアは、AVRマイクロコントローラーにクロックインされる大きなシフトレジスターで構成されています。すべてのテストベクトル(これも360ビットになります)について、360ビットで読み取る必要があります。したがって、360線の場合、データの総量は360 * 360=16kB程度になります。これを1回のパスで実行できないこと(つまり、データ全体を読み取ってから比較すること)ができないことはすでにわかっているため、テストベクトルごとにテストする必要があります。
このような大きな数を保持できる固有のタイプはないため、長さ360ビットのビット配列を使用する予定です。さて、私の質問は、このビット配列をtxtファイルにどのように保存する必要があるかということです。
1つの方法は、生の値を格納することです。つまり、各行に、シフトレジスタから読み込んだ生のバイナリデータを格納します。したがって、8線の場合、0b10011010になります。ただし、これは最大360本のワイヤでは見苦しい場合があります。各行には360バイトが含まれます。
もう1つの方法は、16進値を格納することです。これは、8ビットの場合は2文字(上記の場合は9A)、360ビットの場合は約90文字になります。ただし、これには、テキストを1行ずつ読み取り、16進値をビット配列で表されるように変換する必要があります。
では、この種の問題に対する最善の解決策は何でしょうか?完全に「決定論的」なソリューションが必要です。mallocなどを呼び出すことはできません。私が読んだことから、これらは組み込みシステムでは少しノーノーです。
まとめ
従来の変数型では表現できない大きな値を格納する必要があります。現在、これらの値をビット配列に格納する予定です。これらの値をSDカードのテキストファイルに保存するための最良の方法は何ですか?
size - avr32でコンパイルした後の最終的なプログラムサイズを知る方法
私はavrstudio5を使用しています。私のコントローラーはAT32UC3A0512です。プログラムを書き込む前に、フラッシュで占有される最終的なプログラムサイズを知りたいです。これを知る方法を教えてください。
avr - 遅延を使用したAVR上のソフトウェアPWM
AVRATMega16で遅延を使用して単純なPWM生成を達成しようとしています
私がやろうとしているのは、LEDを100%から0%のデューティサイクルにフェードさせることです。後でそれを拡張して、2色の2色のLEDを制御し、素晴らしい効果をもたらします。
私は以前にPICを使用してmikroCでこれを実行しましたが、どういうわけかavr-gccではそれほど簡単ではないか、何かが足りない可能性があります。
ここでの私の問題は、LEDを3秒で完全にフェードさせたいのですが、フェードが速く感じられることです。また、低いデューティサイクルよりも高いデューティサイクルに多くの時間を費やしていると思います。つまり、LEDが少し明るく見えると、色あせますが、暗くなると、さまざまなデューティサイクルに非常に速く移動するので、そう思います。
Any ideas you might have on what i am missing ?
Code is available here : http://ideone.com/lUP5f
Thanks
c - _delay_us() でインライン if (?:) が機能しない
1-Wire 実装で使用しようとすると_delay_us(condition ? value_if_true : value_if_false)
、遅延が機能せず、デバイスからの応答が得られませんが、次のように置き換えると正常に動作します。
lcdにインラインif値を表示すると、正しい値が表示されます。
では、この 2 つの表記法にはどのような違いがあるのでしょうか。_delay_us() で動作する場合、どうすればインライン化できますか?
c - Cでグローバル変数を変更する
AVRチップ上でCプログラムを実行しています。シリアル信号が聞こえると、シリアル割り込みISR(USART_RX_vect)が実行されます。このメソッドでは、への変更をオンにする必要があり= 1;
ます。次に、メインwhile
ループで、LCDをクリアして表示し、change = 0
再度設定する必要があります。
これは、継続的に計算を実行し、結果を1分間に100万回LCDに表示するのを停止するためです。
ただし、割り込みメソッドが変更変数を1に変更すると、「グローバルに」変更されているようには見えず、メインメソッドでは常に0になります。
ここには、デバッグを目的としたものが少しあります。