問題タブ [xc16]
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.
c - 構造体ポインタの要素が C の別のアドレスを指している
モーター制御アプリケーション用の C の構造体があり、その構造体には PID の要素があります。その構造を持つ 2 つの変数と、それらの変数を指す 2 つのポインターを作成しました。私のアプリケーションはマイクロコントローラ上にあるため、PID が機能するために非常に重要な別のレジスタ、つまりエンコーダ カウントがあります。したがって、それぞれの PID 変数を指すポインターを持ちたいのですが、マイクロコントローラーのエンコーダーレジスタを指す要素「エンコーダー」を持ちたいと思います。そのため、ポインターにアクセスすると、エンコーダーの位置を直接取得できます。
上記のコードは試していません。100% 思い通りに動作しないからです。要素 Encoder を逆参照し、エンコーダ位置レジスタのアドレスを割り当てると、アドレス番号が Encoder 要素に入れられます。私が達成したいことを少しだけ示すためにそこにあるだけです。しかし、私はそれを行う方法がわかりません。
関数自体に Encoder カウントを含める必要なく関数を呼び出せるようにしたい後。
今、私はこのようなことをします:
この関数を呼び出すときは、常に現在のエンコーダ カウント (マイクロコントローラのエンコーダ カウント レジスタの値) を StartPosition に入れます。
私はこのようなことをしたいと思います:
すべてが PID1 または PID2 変数を指していますが、エレメント Encoder はマイクロコントローラのエンコーダ カウント レジスタを指しています。
どうすればこのようなことができるでしょうか?ありがとうございました。
編集:XC16コンパイラでマイクロチップマイクロコントローラを使用しています。
私は通常の変数のように POS1CNTL を使用します。次
のように読み取ることができます。
または、次のように値を書き込むこともできます。POS1CNTL = 30;
POS1CNTL は次のように定義されます。
#define POS1CNTL POS1CNTL
extern volatile uint16_t POS1CNTL attribute (( sfr ));
c - 組み込みの atoi 関数を使用するマイクロチップ xc16 コンパイラでの予期しない動作
関数の予期しない動作atoi()
。コードの一部で動作し、他の部分で 0 を返しています。アプリケーションのさまざまな部分で次のコードを使用してバグを見つけています。
MPLAB X IDE V5.4、XC16 v1.61
c - XC16 コンパイラのローカル変数の割り当てが機能しない
コンパイラ XC16 で PIC30F4011 を使用しています。ローカル変数の割り当てが機能しないことに気付きましたが、変数をグローバルに宣言すると機能します。
次の関数では、代入文: の後addr = b_flashStart;
、addr
が であるはずですが0x1600
、そうではありません0
。
ファイル全体は次のとおりです。