問題タブ [68hc12]
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 での関数エラーの再宣言 (マイクロコントローラ)
HC6812 マイクロコントローラーをプログラミングしていますが、C で次の 2 つの関数を使用する必要があります。
ポート B の LED をオフにします
PTH (ポート H) のスイッチ入力ビット 0 ~ 4 を読み取る
ポート A の 7 セグメント ディスプレイにスイッチ値を表示します。
スイッチで設定された 0 ~ 31 秒間、ポート B のすべての LED を点灯させます。
最後に、ポート B のすべての LED をオフにします。
私の 2 つの機能は、Hexled
(16 進スイッチの入力と 7 セグメントの表示を読み取る) とwait
(遅延を作成する) です。
コードをコンパイルすると、次の 4 つのエラーが表示されます。
Hexled
関数定義で 'pointer expected' が 2 回発生します
'関数の引数宣言が競合していますHexled
'
'の再宣言エラーHexled
'
C/C++ の関数では、関数プロトタイプ、関数定義、およびメイン ループでその関数を呼び出す必要があることを理解しています。私は自分が何を間違えたのか理解できず、そこから学びたいと思っています。多数の C プログラミング Web ページを調査してみました。
assembly - C と ASSEMBLY を使用して LCD 画面上に GPS を作成する
現在の私の懸念の 1 つは、LCD 画面で CountRoutes、FindRoutes、または DisplayRoutes を実行するために、C プログラムから呼び出す必要があるいくつかのアセンブリ言語サブルーチンを作成することです。たとえば、これはルートアドレスを保存したコードで、最初のサブルーチンである CountRoutes では、-1 を見つけてカウントを停止する前に、メモリ内にあるルートの数をカウントする必要があります。
これは私がこれまで行ってきたことであり、機能していません。変更する必要があるのは、.byte null 行を無視し (下の 2 つの文字列にジャンプ)、文字列の最後にいるかどうかを確認し (0 を満たす)、別の .word が見つかるまでもう一度ジャンプすることです。 6 または -1。
loops - シンプルな for ループと合計
HCS12 アセンブリ言語を学習しようとしていますが、インターネット上に十分な例がありません。コードを書き込もうとしましたが、成功しません。私は立ち往生しています。絶対に宿題ではありません。コメント付きで HCS12 アセンブリ言語で記述できますか? コードが欲しいのは、実際にコードを段階的に読みたいからです。ところで、もっと簡単に配列を定義する方法はありますか?
私の試み:
assembly - 文字列を int アセンブリに変換しています
私は何時間もコードを書こうとしてきました。私のアルゴリズムは、文字列を文字ごとに読み取り、減算することです。これは、それをアドレスに保持すること#$30
を意味します。'0'
0 で埋められた別のランダム アドレスを保持します。次に、文字列の最後まで、ランダム アドレスの内容を 10 倍し、int を変換するために使用されるアドレスの内容を減算して加算し#$30
ます。私は本当に疲れ果てており、アルゴリズムを実装するのは難しい. EMUL
ちなみに、可能かどうかはわかりませんが、デフォルトのmultiplierはYレジスタとDレジスタを使って書き込むので使えないと思います。
いくつかの擬似:
私の立ち往生したコード:
c - C で far ポインターを使用する場合のコード サイズの変更
私は主に自動車ネットワーク設計を扱うソフトウェア会社の部門で働いています。ネットワーク プロトコル スタックは、主に C で記述します。最近、Freescale の HC12 コントローラを使用する必要のあるプロジェクトを任されました。最初に作成されたプロトコル スタックは、バンクされていない RAM と、バンクされているフラッシュとバンクされていないフラッシュの両方の使用をサポートしていました。私に割り当てられたプロジェクトでは、顧客は非バンク RAM の代わりにバンク RAM を使用することを要求しています (理由は不明です)。このプロジェクトの開発に取り組んでいるときに、far ポインターを使用してバンク RAM にアクセス (読み取り/書き込み) できることに気付きました。
私の質問は、far ポインターを使用してバンク RAM にアクセスしたときに、ライブラリ コードのサイズが 10k バイトも増加したことです。これは正常ですか?私が使用しているコンパイラ (codewarrior) のリファレンス マニュアルでは、通常のポインターのサイズが 2 バイトであるのに対し、far ポインターのサイズは 3 バイトであると記載されています。この余分な 1 バイトが、コード サイズに大きな違いをもたらすのでしょうか? バンクされた RAM にアクセスできる far ポインターの使用を含まない他の方法はありますか?
私の質問に対する有益な回答をいただければ幸いです。
delay - hcs12 の遅延サイクルの計算
HCS12の命令サイクル数と遅延サイクル数を計算してみました。HCS12についての情報があります
HCS12 はバスクロック (E クロック) をタイミング基準として使用します。
- E クロックの周波数は、オンボード クロック発振器 (クロック、48 MHz、E-クロック、24 MHz) の半分です。
- 命令の実行時間も E クロック サイクルで測定されます。
24Mhzはクリスタル周波数なのかな?その場合、CPU の命令時間には水晶振動子の発振周波数の半分しか使用されません。では、半分にするべきでしょうか?
バス クロックが 24 MHz のデモ ボードで 100 ミリ秒の時間遅延を作成するにはどうすればよいですか?
100 ミリ秒の時間遅延を作成するには、前の命令シーケンスを 60,000 回繰り返す必要があります [100 ミリ秒 ÷ (40 ÷ 24,000,000) μs = 60,000]。次の命令シーケンスは、必要な遅延を作成します:例はありますが、値の計算方法60000
と値が
わかりません。40
codewarrior - 16 ワードのペイロードを送信するように flexray ノードを設定する方法は?
Freescale NCV7383 デモ (CW5.1 と MC9S12XF512 を使用) で Flexray_UNIFIED_cfg.c を編集して、自動車のターゲット システムに一致するように異なるフレーム ID を持つより大きなパケットを送信しようとしています。フレックスレイを理解したことがある人はいますか?ありがとう。
c - cで特定のキーを押すようにユーザーに促す
icc12 (ImageCraft) と hc6812 マイクロコントローラーを使用しています。次のメニューを LCD ディスプレイに表示するには、LCD キーパッドのゼロ キーを押すようにユーザーに促したいと考えています。コードでこれを行うことができないようです。(ゼロキーが押された = 0b11110000)
キーパッドはポート H の上位 5 ビットを使用します。16 個のキー (0 ~ f) があり、押されたキーが奇数の場合は最上位ビットがハイになり、押されたキーがハイの場合はローになります。ポート H は、LCD モジュールのキーパッドに接続されている入力ポートです。ゼロキーが押されたときに表示するマスクを使用しようとしていますが、プログラムを実行すると、LCD モジュールの表示が新しいメニューに直接移動します。マスキングはこれを行うための最良の方法ですか? もしそうなら、コードが正しく機能するように IF ステートメントを変更するにはどうすればよいですか?
c - cで数値/数値範囲をスケーリングする方法
LCD モジュールで 0 フィートから 20000 フィートの範囲の高度をフィートで表示できるようにしたいと考えています。数値は、回転させて値を変更できるポテンショメータから読み取られます。現時点では、ポテンショメーターは 0 から 1023 まで表示していますが、0 から 20000 フィートまで読み取れるように、これらを適切にスケーリングする必要があります。これに加えて、下の行に「棒グラフ」を表示して、高度の増加を表します。LCD には 1 行あたり 20 ブロックあるため、バー グラフは 1 ブロックから 20 ブロックの範囲で表示されます。
これはこれまでの私のコードです。ポテンショメータから値を読み取り、DELVAL2
LCD に表示します。高度と棒グラフを作成するためにデータを適切にスケーリングする方法を誰かが説明してくれませんか。