問題タブ [codewarrior]
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 - CodeWarrior イベントから変数値を取得.c
文脈に入るために私はこれをやっています:ドライバー(A4988)へのパルス周波数入力の変化を通してステッパーモーターを駆動します(この質問のためにこれの機能を知る必要はありません)。ここで、パルスの周波数を変化させます (エンジン速度を変化させます)。モーター シャフトの 1 回転で 200 パルスが必要であることを知っておく必要があります (エンジンは 1 ステップあたり 1.8 ° です)。
私はエンジンを手に入れ、彼を 1 秒で 1 回転させました。期間 = 0.005 秒
これをプログラムするために、TimerUnit_LDD というコンポーネントを使用しています。周波数163840Hzでカウント
全体ターン1の場合は、この機能を頻繁に使用することを取得します。
---- main.c
TU1_Enable (TU1_DeviceData);
TU1_SetPeriodTicks (TU1_DeviceData, 410);
パラメータ410は、次のように、ピンの値を変更することによってプログラムされたパルスを送信する場合と同様に、必要な期間と比較されます。ハイパルスとローパルスの両方が考慮されます。
----- イベント.c
TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData)
{
Step1_NegVal ();
}
上記の深刻な近似値を念頭に置いて、深刻な定式化の周期は 819.2 です (オシロスコープで見た周波数は 200 Hz (ok) です)。
すでにコンテキストに入力されている問題は次のとおりです。
---- main.c
TU1_Enable (TU1_DeviceData); // Enable the counter
TU1_SetPeriodTicks (TU1_DeviceData, 410); // Setting the desired period
for (;;) {
TU1_Enable (TU1_DeviceData);
WAIT1_Waitms (1000); // Rotation time
TU1_Enable (TU1_DeviceData); // Disable the counter
}
このコードを使用して、周波数計算が正しく、1 秒で 1 回転することを確認しようとしています。しかし、何が起こるかというと、回転はしますが、もう少しオフセットされます。これは、コードの各行に必要なランタイムを通過すると思います。
私が知りたいのは、イベント内の変数の数値をどのように取得できるかということです。どうすればこのようなことができますか。
---- main.c
TU1_Enable (TU1_DeviceData); // Initialize the counter
TU1_SetPeriodTicks (TU1_DeviceData, 410); // Setting the desired period
for (;;) {
for (;;) {
if (GetValue (x) == 200) break; // GetValue (x) This function is what I want to achieve
}
WAIT1_Waitms (1000);
}
----- イベント.c
TU1_OnCounterRestart void (* UserDataPtr LDD_TUserData)
{
Step1_NegVal ();
x = x + 1;
}
GetValue (x) この関数は、Events.c にある x の値を取得し、espefico を制御するためのパルス数を定義します。
変数を取り、カウンターの影響を受け、これが 200 になる (1 秒で 1 ターン)。
これにより、メネラが単独で孤独に送信され、多かれ少なかれ200パルスのみであることが確実になります。
これは、CNC マシンのプログラムを作成するのと同じくらい具体的にする必要があり、最高の精度が非常に重要です。
理解していただければ幸いです。私はスペイン語を話します。これは Chrome によって翻訳されました。
C 言語、Freescale KL25Z、CodeWarrior、OPEN_SDA、
codewarrior - 16 ワードのペイロードを送信するように flexray ノードを設定する方法は?
Freescale NCV7383 デモ (CW5.1 と MC9S12XF512 を使用) で Flexray_UNIFIED_cfg.c を編集して、自動車のターゲット システムに一致するように異なるフレーム ID を持つより大きなパケットを送信しようとしています。フレックスレイを理解したことがある人はいますか?ありがとう。
c - _f_data_rom リンカ スクリプト シンボル
codewarrior
リンカ スクリプトを処理する必要があるため、マイクロ コントローラ 32 ビットとコンパイラのスタートアップ コードに取り組んでいます。初期化のためにスタートアップ コードで使用され、リンカー スクリプトから取得される特定のRAM
変数stack
。
リンカー スクリプトは、これらの変数を異なるアドレスで初期化します。問題は、1 つの変数のアドレスが間違っていることです。リンカ スクリプトでは、次のコマンドで初期化します _f_data_rom
。
- stack 、RAM 初期化のアドレスを提供するリンカ変数をどのように初期化したか教えてもらえますか?
- このコマンドの意味は
_f_data_rom
?
のように見える
scale - CRGFLG レジスタ、最後のビットが設定されていない
私は FreeScale 9S12C マイクロ コントローラーを使用しており、Code Warrior でコーディングしています。シーケンス 10011 の SEQ 検出器を作成しようとしています。シミュレーションを実行すると、プログラムが関数内で動かなくなり、DelayGate
他のすべては正常に表示されます。CRGFLG レジスタの最後のビットが、想定どおりに設定されていないようです。すべてのリアルタイムクロックサイクルの終わりに設定されるはずだと思います。を設定RTICTL = 0b01000000
したので、リアルタイム クロックの周期は 1.024 ms になります。したがって、私の予想される動作は、プログラムがDelayGate
約 1.024 ミリ秒の間留まる必要がありますが、プログラムは遅延ゲートにとどまり、決して終了しません。CRGFLG の最後のビットが何らかの理由でセットされないように見えますが、その理由はわかりません。誰でも私に提供できる助けをありがとう!これが私のコードです。私'
私が得る唯一の警告をコンパイルすると、
- 次の行では、関数呼び出しの結果は無視されます。
UpdateStatetask(input,state)
- これは、この行での古いスタイルの関数呼び出しです。
int UpdateStatetask(input, state){
これらの警告は、私が抱えている問題を引き起こすべきではありません。助けてくれてありがとう!