問題タブ [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.
arrays - 印刷時に空の配列
AVR MCU 用の C/asm プログラムを書いています。私はまだ学んでいるので、コードで何らかの間違いを犯したことを願っています。
volatile unsigned char suart_0_rx_buffer[SUART_0_BUF_SIZE+1];
以下のように、asm コードでアクセスしている C コードにバッファがあります。私がしたいのは、バッファにバイトを格納し、毎回s0_Rxbyte
ポインタをインクリメントすることだけです。s0_index
's0_Rxbyte` は常にゼロ以外の値です。
Cコードのループでコンテンツを印刷しようとすると、まったく何も得られません。
雑然とするので、ここにすべてを添付したくありませんでした。
では、上記の asm コードに問題がある人はいますか?
makefile - osx で make を使用してコンパイルする
avr-gcc を使用してコマンドラインでコンパイルしています
私が使用しているインクルードの 1 つには、次の行があります。
make を実行すると、次のようになります。
86行目は#if F_CPU != 16000000
上です。なぜエラーが発生するのかわかりません。
avr-gcc - USARTからの入力を取得できません-FreeRTOS-AT32UC3A0512
FreeRTOSを試してみてください。以下は私の設定です-
- マイクロコントローラー-AT32UC3A0512
- ボード-EVK1105
- FreeRTOSの使用
- 環境-ASF最新2.3フレームワークを備えたAVRStudio5
サンプルプロジェクトFreeRTOSから新しいプロジェクトを作成しました。現在USARTをチェックしています。サンプルプロジェクトを実行すると、USARTを介して開発ボードからPCに文字を送信できますが、PCのusartターミナルプログラム(Puttyを使用)で何かを入力または入力すると、何も表示されません。誰かが何が間違っているのか提案できますか?または、USARTのターミナルプログラムで入力と表示を行うために、現在のサンプルコードのコードを変更する必要がありますか?
ありがとう...
assembly - AVR-GCCインラインアセンブラによる相対ジャンプ
AVR-GCCでインラインアセンブラの実験を始めたところです。標準のC関数を使用するよりも高速で、2つの8ビット符号なし整数を乗算し、その結果をハードウェア乗算を持たないAVRの16ビット符号なし整数に格納するマクロに取り組んでいます。コードは次のとおりです。
問題は、このマクロを1回しか使用できないことです。コンパイラーは、マクロが挿入されて別の引数のセットで乗算を行うときに、「mult:」と「end:」が再定義されることを好みません。これを回避する方法はありますか?
exception-handling - XP 上の MinGW でのメモリアクセス例外処理
XP で MinGW GCC ツールチェーンを、XP の「民間」プロセスで許可されている仮想メモリ アドレス空間を超える高メモリ (>0xFFFF0000) にアクセスする組み込みプロジェクトのベンダー コードで使用しようとしています。
例外の次の命令で実行を続行できるようにする、つまり無視する何らかの方法でメモリアクセス例外を自分で処理したいと考えています。MinGWでそれを行う方法はありますか? またはMSツールチェーンで?
したがって、非常に単純化された図は次のとおりです。
詳細: AVR32-gcc ツールチェーンを使用して、freeRTOS を備えた Atmel AVR32 プラットフォームで組み込みプロジェクトを開発しています。ハードウェア (および低速の avr32 シミュレーター) に依存しない高レベルのアプリケーション コードを開発/デバッグすることが望ましいです。さまざまな gcc、makefile、およびマクロ トリックにより、Avr32/freeRTOS プロジェクトを MinGW/Win32 freeRTOS ポート環境でビルドし、eclipse/gdb でデバッグできます。ただし、(ベンダーが提供する) Avr32 コードでの高メモリー HW アクセスは、MinGW exe をクラッシュさせます (メモリー アクセス例外が原因で)。
私はこれらのアプローチのいくつかの組み合わせを考えています:
1) SW でアクセス例外を管理します。理想的には一種の HW シミュレーターを作成したいのですが、それは難しく、危険なアセンブリ コードが必要になると思います。多くの例外はおそらく無視できます。
2) Avr32 ヘッダー ファイルの変更されたコピーを作成して、HW レジスタ #defines をユーザー プロセス アドレス空間に再配置します (そして、仮想メモリ空間のそれらの領域をコミットするいくつかの構造体とリンカー セクションを作成します)。
3) 「実際の」HW ターゲット コードでのコード クラフトを最小限に抑えるために、高メモリ/HW アクセス、または代わりにより多くのマクロ トリックをもたらす関数呼び出しの条件付きコンパイル。(このプロジェクトには他の開発者がいます。)
提案や役立つリンクをいただければ幸いです。
このページは正しい方向に進んでいますが、非常に複雑に思えます。また、避けたい C++ です。しかし、他の提案がなければ、まだ試してみるかもしれません. http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh
avr-gcc - AVRポートのセットアップに関するこのコードを説明してください
以下は何をしますか?
私の知る限り、0xFCは16進値です。それは基本的に11111100と言っているので、PORTD0-PORTD1は出力ですが、残りは入力です。
そのコードの完全な説明は何でしょうか?
reference - メイクファイルの「未定義の参照」エラーを解決する
私のディレクトリにはいくつかのカスタム ソース ファイルがあり、私のsrc
ディレクトリには Arduino プロジェクトからのいくつかのソース ファイルがありますsrc/base
。
obj
次の make ルールを使用して、すべてのソース ファイルをオブジェクトにコンパイルし、ディレクトリに格納します。
ご覧のとおり、 および にコンパイルさsrc/tacho.c
れます。obj/bot_tacho.o
src/base/wiring_analog.c
obj/core_wiring_analog.o
私のメイクファイルでは、すべてのソース ファイルを問題なくコンパイルできます。これらのファイルの 1 つ (つまりsrc/tacho.c
) に、次のインクルードを追加しまし
#include "base/wiring.h"
たanalogRead
。
面白いことwiring.h
に、'analogRead' 関数のプロトタイプしか含まれていません。実際に関数を定義するファイルを含めることさえ気にしませんが、いろいろ調べてみると、関数の定義が にあることがわかりましたsrc/base/wiring_analog.c
。
関数を宣言するファイルをコンパイルし、それを他の必要なすべての Arduino オブジェクト ファイルと一緒に 1 つのライブラリにリンクするだけで十分だと思いました。勝手に名付けましたlib/core.a
。lib/core.a
以下を実行して作成しました。
言うまでもなく、最初にこの make ルールの前提条件が整っていることを確認しました。
問題なく動作しました。ただし、問題は、バイナリを生成しようとすると、「未定義の参照」エラーが発生することです。
core_%.o
オブジェクトの objdump を実行したところcore_wiring_analog.o
、analogRead
. 私が思っていた方法が正しかった場合、 core.a
which contains にcore_wiring_analog.o
は の定義が含まれている必要がありますanalogRead
。src/tacho.c
関数を使用するコンパイルに戻り、analogRead
試行するたびに問題なくコンパイルされました(プリプロセッサは、インクルードについて文句を言う必要性を認識しませんでした)。問題を引き起こしているのはリンクだと思います。
私はオンラインでたくさんのことを読みましたが、それでも自分でこれを理解することはできないようです. おそらくばかげた間違いですが、私はそれを見ることができません。どうすればこの問題を解決できますか?
完全を期すために、プロジェクト全体をここにドロップしました: プロジェクトの googlecode リポジトリ
avr - AtMega644 への ADXL345 SPI バスで必要なヘルプ
こんにちは、AtMega644 で SPI バスを取得して、ADXL345 加速度計と通信しようとしています。私はいつも 0 を返しますが、間違っているところはありません。どんな助けでも大歓迎です。Arduino コード ベースではなく、avr-gcc を使用しています。ありがとう
c++ - AVR Studio 5:C++コードをコンパイルする
AVR Studio 5でプロジェクトを作成すると、次の内容の.cファイルが作成されます。
このCプログラムの構築は問題なく機能します。
しかし、ファイル拡張子を.cppに変更すると、ビルドは未定義の警告デバイスタイプを発行します(AVR固有のレジスターを使用しようとするとエラーになります):
両方の出力を比較すると、Cコードの場合はオプションが追加されます-mmcu=atmega328p
がavr-gcc.exe
、C++コードの場合は実行時に追加されないことがわかりavr-g++.exe
ます。WinAVRを使用するときに私が抱えている同様の問題。これを解決する方法は?
c - AVR とシリアル ポートに関するヘルプ
シリアル通信に問題があります。AtMega644 を 9600 8N1 のシリアル LCD に接続しました。ゴミが入るだけです。ガベージによって、目的の「U」の代わりに、U、P、T、および @ を取得しています。以下にリストされているヒューズで内部 8Mhz RC Osc を使用しています。タイミングの問題が疑われますが、どこで間違ったのかわかりません。点滅する LED を追加したところ、タイミングが適切に見えます (眼球とデジタル ストップウォッチ)。どんな助けでも大歓迎です。
avrdude -pm644 -cavrisp2 -Pusb -b2400 -u -Uflash:w:ImpactTarget.hex:a -Ulfuse:w:0xe2:m -Uhfuse:w:0xd8:m -Uefuse:w:0xff:m