問題タブ [8051]
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 - SDCC (リトル エンディアン) コンパイラを使用する場合、この演算の何が問題になっていますか?
私は C プログラミングが初めてで、MCU のファームウェア アプリケーションに取り組んでいます。この方法は、KEIL コンパイラ (ビッグ エンディアン) を使用していたときは正常に機能していましたが、SDCC コンパイラ (リトル エンディアン) に切り替えたときに正しく機能しません。誰かが私が間違っていることを説明できますか???
ターゲット デバイスは、8051 アーキテクチャに基づく Silicon Labs C8051F320 です。
追加: まず、MotorSteps と MotorSpeed をunsigned int に変更しました。 私のデバッガーでは、何らかの理由で、この関数 MotorSteps = 00 の最初の入り口で、if ステートメント行にブレークポイントを設定すると、t も 0 に割り当てられるはずですが、デバッガーは t=0.031497 (10 進数) を示します。 )。デバッガーを 16 進数で表示するように切り替えると、t = 0x3d010300 になります。t が割り当てられないようです...
sleep - 8051 マイクロコントローラで 1 秒間待機する方法は?
いくつかの値をレジスタに送信し、1 秒待ってから値を変更するプログラムを作成することになっています。問題は、動作を 1 秒間停止する命令が見つからないということです。
c - すべてのCコンパイラは、関数が構造体を返すことを許可していますか?
私はCでプログラムに取り組んでおり、8051アーキテクチャデバイス用のSDCCコンパイラを使用しています。フラッシュメモリから8文字を読み取り、文字配列を何らかの形式で返すGetNameという関数を作成しようとしています。Cで配列を返すことはできないことを知っているので、次のような構造体を使用してそれを実行しようとしています。
この関数への参照はまだありませんが、何らかの理由で、「関数は集計を返すことができません」というコンパイラエラーが発生します。これは、私のコンパイラが構造体を返す関数をサポートしていないことを意味しますか?それとも私は何か間違ったことをしているだけですか?
linker - Cプログラムで構造体を使用するとリンクエラーが発生するのはなぜですか
私は8051アーキテクチャチップとSDCCコンパイラ用のCプログラムを書いています。
FilterStructureという構造があります。
私のコードは次のようになります...
何らかの理由で、「?ASlink-Error-エリアDSEGの内部RAMで29連続バイトを取得できませんでした」というリンクエラーが発生します。
FilterStructure testStruct;
エラーがなくなるという行をコメントアウトすると。
このエラーはどういう意味ですか?使い終わったら構造を破棄する必要がありますか?
embedded - AT89C51とAT89S51の違いは何ですか?
これらをどのようにコンピューターに接続しますか?どちらが燃えやすいでしょうか?
c - 8 ビット プロセッサはエンディアンの問題に直面する必要がありますか?
8 ビット プロセッサのメモリ (たとえば 8051) に int32 型の整数がある場合、その整数のエンディアンを特定するにはどうすればよいでしょうか? コンパイラ固有ですか?これは、シリアル回線などでマルチバイト データを送信する場合に重要だと思います。
c - 16ビットアドレスから上位/下位バイトを分割する方法は?
8051 プロセッサでソフトウェアを開発しています。よくある作業は、16 ビット アドレスの上位バイトと下位バイトを分割することです。それを達成する方法がいくつあるか見てみたい。私がこれまでに思いついた方法は次のとおりです。
ビット演算
SDCC は次のアセンブリ コードを提供します。
Keil C51 は私に与えます: 多くの役に立たないコードIMHOがあります。ポインタートリック
SDCCは私に与えます: Keil C51 は私に与えます: これは SDCC バージョンと同じです。アンドレイの数学的アプローチ
p>SDCC は次のことを示します。
sdcc が r7 レジスタを使用する理由がわかりません... Keil C51 は私に与えます: KeilがR2レジスタも使用しない理由がわかりません...セマジの組合アプローチ
p>SDCCは私に与えます
Keil C51 は私に与えます: これは、ポインターのトリックに非常に適しています。ただし、このアプローチでは、共用体を格納するためにさらに 2 バイトのメモリが必要になります。他に明るいアイデアを持っている人はいますか?;)
そして、どちらの方法がより効率的か誰にも教えてもらえますか?
興味のある方のために、テストケースは次のとおりです。
}
c - 8 ビット MCU の C で除算を行う最速の方法は何ですか?
8 ビット MCU (8051 アーキテクチャ) を使用するデバイスのファームウェアに取り組んでいます。SDCC (Small Device C Compiler) を使用しています。私の回路が駆動しているステッピングモーターの速度を設定するために使用する関数があります。速度は、タイマーのリロード レジスタに目的の値をロードすることによって設定されます。モーターへの 1 秒あたりのパルス数を表す変数 MotorSpeed が 0 から 1200 の範囲にあります。MotorSpeed を正しい 16 ビット リロード値に変換する関数を以下に示します。浮動小数点演算がかなり遅いことは知っていますが、これを行うより高速な方法があるかどうか疑問に思っています...
c - 8051外部割り込み
8051の外部割り込みを有効にする方法は?
c - ポートを 8051 で入力するように設定するのに助けが必要です
接続は次のとおりです。マイクロコントローラー8051 philipsのポート2_0ピンへの閉回路または開回路出力ラインに応じて、0または5vを生成する赤外線センサー回路。常に続きます。ここに私のコードがあります(keil cで)、P 2_0を入力として適切に構成していないと思います
編集:私が使用していた8086プロセッサに障害があったため、問題に直面していました。プログラミング時にいくつかのスペアを取得するために、これを試している人にお勧めします。