問題タブ [avr32]

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.

0 投票する
1 に答える
783 参照

c - AVR32 例外: バス データ エラー

最近、組み込みソフトウェアで奇妙な動作に直面しています。

私が得たもの:ファイルサイズが大きすぎてマイクロコントローラーフラッシュから直接開始できないため、32ビットAVR32コントローラーを実行し、外部SDRAMからプログラムを開始します。物理メモリ マップにより、メモリ領域は次のように分割されます。

スタック (0x1000 から始まり、0xF000 の長さ) (< 0x1000 は MPU によって保護されます)

EBI SDRAM (0xD0000000 から始まり、0x00400000 の長さ)。


何が起こるか:残念ながら、再現できない例外が発生しました。与えられたスタック トレースを見ると、次のイベントが不規則に発生します。

名前: バス エラー データ フェッチ - イベント ソース: データ バス - ストアド リターン アドレス: 未完了の最初の命令

さらに、スタック ポインターには有効な値がありますが、例外が発生したアドレス (命令をフェッチするための最後のエントリ ポイント) はメモリ ニルヴァーナ (0x496e6372、0x5...、0x6.... 付近など) を指します。たぶん、これは「最初の未完了の指示」である必要があると思います。マニュアルが話しています。ただし、ソース コードの行は常に同じです。ポインターを介してデータ配列からメンバー関数にアクセスします。

問題は、他のソース コードを追加または削除すると、イベントが消えて再び戻ることです。


考えたこと:何かが私の記憶 (マッピング) を壊しています。これにはどのような種類のエラーが考えられますか?

  • バッファオーバーフロー?
  • SDRAM コントローラがオフになる可能性があるため、一部のデータが失われます。それは不可能ではありませんが、むしろありそうもないことです
  • スタックは十分に大きく、透かしで確認済みです
  • データ バス レートと AVR クロックが正しく設定されている

これを解決する方法:もっと主張しますか? 残念ながら、これを AVRStudio でデバッグすることはできません。誰でもヒントやアイデアはありますか? それとも、明らかな何かが欠けていますか?


編集:

ユーザーからの言及されたアプローチ:

  • 関数ポインタと配列エントリのアドレスをチェック
  • スタック配列の上書き
  • 正しく書き込まれていない割り込み
  • 初期化されていないポインター
  • iクラッシュ ケース経由でアレイ アクセスを確認する
  • 不正なメモリアクセスには例外ハンドラアドレスを使用
  • snprintfの代わりに使用sprintf

スレッドへの後半の付録: 問題は、私のモジュールとは関係のない、古いソフトウェア モジュールでの間違った配列アクセス (間違ったインデックスが設定された) でした。これは偶然見つけたもので、以前は表示されなかったのが好奇心で、コード行を見つけるのにかなりの時間がかかりました。与えられた唯一の答えを正解としてマークします。

ご意見をお寄せいただきありがとうございます。

(あなたのソフトウェアの)世話をしてください;))

0 投票する
0 に答える
131 参照

c++ - 型がパニングされたポインターを逆参照すると、厳密なエイリアシング規則が破られます

AVR32 Studio スタジオを使用して、AVRUC3 コントローラー用のコードをコンパイルしています。最適化レベル -O2(optimization more) に切り替えたとき、このポインターの警告「 dereferncing type-punned pointer will break strict aliasing rules 」が表示され始めました。この警告が表示される理由はわかっています...

しかし、私の質問は、-O2 を指定してコードを実行し、このすべてのエラーを解決する必要があるか、またはそれらを引き続き使用して -O0(最適化なし) でコンパイルしても問題ないかということです。

助けてください...ありがとう。

0 投票する
1 に答える
264 参照

c - 初心者 - avr32 は LED をオンにしますが、コンパイラは変数を認識しません

私はマイクロプロセッサat32uc3b0256を持っていて、LED をオンにしたいです (例からの簡単なプログラム)。これを行うには、Atmel Studio を使用します。サンプルコードを見つけました:

しかし、それを Atmel Studio に書き込んだときにエラーが発生しました。Atmel Studio は DDRC とポートを変数として認識しません。どうすれば修正できますか?画面フォーム Atmel Studio

ここに画像の説明を入力

0 投票する
1 に答える
271 参照

c - 動的にリンクされたシンボルに対して C でポインター演算を実行すると、間違った結果になるのはなぜですか?

動的にリンクされたシンボルを含むポインター演算を実行すると、誤った結果が生じるという奇妙な状況に遭遇しました。単にいくつかのリンカ パラメータが欠落しているのか、それともリンカのバグなのかはわかりません。次の例の何が問題なのか誰か説明できますか?

lib.c次の単純な共有ライブラリのコード ( ) を考えてみましょう。

問題の演算は、 のアドレスfn1と変数の間のビットごとの AND ですmask。アプリケーション ( ) は次のようapp.cに呼び出します。fn2

それは次の出力につながります...

... と に対して同じ結果が期待されるため、これは明らかに正しくありませfn1p。コードは AVR32 アーキテクチャで実行され、次のようにコンパイルされます。

maskコンパイラは、変数を 32 ビット レジスタ 7 にロードし、& 演算を即値オペランドを持つ 2 つのアセンブラ演算に分割することが最適なソリューションであると考え ます。

and命令の即値オペランドはfn1、共有ライブラリがアプリケーションのアドレス空間にロードされるときのロード アドレスに再配置されないと仮定します。

  • この動作は意図的なものですか?
  • 共有ライブラリをリンクするとき、または実行可能ファイルをロードするときに問題が発生するかどうかを調べるにはどうすればよいですか?

背景:これは学術的な質問ではありません。OpenSSL と LibreSSL は同様のコードを使用するため、C ソースを変更することはできません。このコードは他のアーキテクチャでも問題なく動作しますが、関数ポインタに対してビット単位の操作を行う理由は明らかではありません。

0 投票する
1 に答える
157 参照

avr - Atmel Studio 7.0 でサポートされていない Atmel AT32AP7001-ALUT デバイス

2008 年に avr32studio バージョン 2.5 を使用して開発された Atmel AT32AP7001-ALUT のプロジェクトがあります。

このプロジェクトの新機能を実装する必要があり、開発作業を開始するために Atmel Studio 7.0 をインストールしました。ただし、Atmel Studio 7.0 はこのデバイス (AT32AP7001) をサポートしていないようです。avr32studio v2.5 も使用しようとしましたが、このソフトウェアは新しいバージョンの Windows にはインストールされません。AT32AP7001 を Atmel Studio 7.0 で使用するためのボード サポート パッケージを検索しましたが、何も見つかりませんでした。私は組み込みプログラミングに慣れていません。Atmel Studio 7.0 でこのデバイスのプロジェクトをセットアップする方法を誰か教えてもらえますか?

0 投票する
1 に答える
330 参照

embedded - INT0 のベクトルの数がデータシートの 2 ではなく 1 であるのはなぜですか?

外部割り込み0のドライバーを実行しようとすると、ATmega32を使用して割り込みを実行していますが、問題に直面しました

ATmega32 の割り込みベクタ テーブル

ISR(vector) の割り込みベクトル コード

iom32.h コードでは、 ((INT0_vect " _VECTOR(1) ")) は 1 番ですが、データ シートでは 2 番であることがわかります。